namespace MyOffice.Web.Controllers; using AutoMapper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Models.Item; using Core.Extensions; using Core; using Infrastructure.Attributes; using Services.Item; using Services.Item.Domain; [Authorize] [ApiController] [Route("api/[controller]")] public class SettingsItemController : BaseApiController { private ILogger _logger; private IMapper _mapper; private ItemService _itemService; public SettingsItemController( ILogger logger, ItemService itemService, IMapper mapper ) { _itemService = itemService; _logger = logger; _mapper = mapper; } [HttpGet("~/api/settings/item-categories")] public ObjectResult ItemsCategories() { var list = _itemService.GetAllCategories(UserId); return Ok(_mapper.Map>(list) .OrderByDescending(x => x.SortOrder) .ThenBy(x => x.Name)); } [HttpPost("~/api/settings/item-categories")] public ObjectResult ItemCategoriesAdd(ItemCategoryViewModel request) { var exec = _itemService.CategoryAdd(UserId, request.FromModel()); switch (exec.Status) { case GeneralExecStatus.success: return Ok(_mapper.Map(exec.Result!)); case GeneralExecStatus.failure: case GeneralExecStatus.not_found: return ProblemBadResponse("Adding item category failed."); default: throw new NotSupportedException(exec.Status.ToString()); } } [HttpPut("~/api/settings/item-categories/{id}")] public ObjectResult ItemCategoriesUpdate([AsGuid] string id, ItemCategoryViewModel request) { var exec = _itemService.CategoryUpdate(UserId, id.AsGuid(), request.FromModel()); switch (exec.Status) { case GeneralExecStatus.success: return Ok(_mapper.Map(exec.Result!)); case GeneralExecStatus.failure: case GeneralExecStatus.not_found: return ProblemBadResponse("Update item category failed."); default: throw new NotSupportedException(exec.Status.ToString()); } } [HttpDelete("~/api/settings/item-categories/{id}")] public ObjectResult ItemCategoriesDelete([AsGuid] string id) { var exec = _itemService.CategoryRemove(UserId, id.AsGuid()); switch (exec.Status) { case ItemCategoryRemoveResult.success: return Ok(_mapper.Map(exec.Result!)); case ItemCategoryRemoveResult.failure: return ProblemBadResponse("Remove item category failed."); case ItemCategoryRemoveResult.not_found: return ProblemBadResponse("Account item not found."); case ItemCategoryRemoveResult.accounts_exists: return ProblemBadResponse("Account motion have accounts."); default: throw new NotSupportedException(exec.Status.ToString()); } } [HttpGet("~/api/settings/items")] public ObjectResult Items([AsGuid] string? category) { var list = category.IsMissing() ? _itemService.GetAll(UserId) : _itemService.GetByCategory(UserId, category!.AsGuid()); return Ok(_mapper.Map>(list.OrderBy(x => x.Name))); } [HttpPut("~/api/settings/items/{id}")] public ObjectResult Items([AsGuid] string id, ItemEditModel request) { var exec = _itemService.Update(UserId, id.AsGuid(), request.Category.AsGuid()); switch (exec.Status) { case GeneralExecStatus.not_found: return ProblemBadResponse("Item not found."); case GeneralExecStatus.failure: return ProblemBadResponse("Item update failed."); case GeneralExecStatus.success: return Ok(_mapper.Map(exec.Result!)); default: throw new NotSupportedException(exec.Status.ToString()); } } }