using System.Text.Json; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using MultiShop.Data; using MultiShop.Models; using MultiShop.Shared.Models; namespace MultiShop.Server.Controllers { [ApiController] [Authorize] [Route("api/[controller]")] public class UserConfigurationsController : ControllerBase { private ILogger logger; private UserManager userManager; private ApplicationDbContext dbContext; public UserConfigurationsController(UserManager userManager, ApplicationDbContext dbContext, ILogger logger) { this.userManager = userManager; this.dbContext = dbContext; this.logger = logger; } [HttpGet] public async Task GetSearchOutline() { ApplicationUser userModel = await userManager.GetUserAsync(User); return Ok(userModel.SearchOutline); } [HttpGet] public async Task GetResultsPreferences() { ApplicationUser userModel = await userManager.GetUserAsync(User); return Ok(userModel.ResultsPreferences); } [HttpGet] public async Task GetApplicationPreferences() { ApplicationUser userModel = await userManager.GetUserAsync(User); logger.LogInformation(JsonSerializer.Serialize(userModel.ApplicationPreferences)); return Ok(userModel.ApplicationPreferences); } [HttpPut] public async Task PutSearchOutline(SearchOutline searchOutline) { ApplicationUser userModel = await userManager.GetUserAsync(User); if (userModel.SearchOutline.Id != searchOutline.Id || userModel.Id != searchOutline.ApplicationUserId) { return BadRequest(); } dbContext.Entry(userModel.SearchOutline).CurrentValues.SetValues(searchOutline); await userManager.UpdateAsync(userModel); return NoContent(); } [HttpPut] public async Task PutResultsPreferences(ResultsPreferences resultsPreferences) { ApplicationUser userModel = await userManager.GetUserAsync(User); if (userModel.ResultsPreferences.Id != resultsPreferences.Id || userModel.Id != resultsPreferences.ApplicationUserId) { return BadRequest(); } dbContext.Entry(userModel.ResultsPreferences).CurrentValues.SetValues(resultsPreferences); await userManager.UpdateAsync(userModel); return NoContent(); } [HttpPut] public async Task PutApplicationPreferences(ApplicationPreferences applicationPreferences) { ApplicationUser userModel = await userManager.GetUserAsync(User); logger.LogInformation(JsonSerializer.Serialize(applicationPreferences)); if (userModel.ApplicationPreferences.Id != applicationPreferences.Id || userModel.Id != applicationPreferences.ApplicationUserId) { return BadRequest(); } dbContext.Entry(userModel.ApplicationPreferences).CurrentValues.SetValues(applicationPreferences); await userManager.UpdateAsync(userModel); return NoContent(); } } }