namespace MyOffice.Web.Controllers; using Core.Extensions; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Models.Account; using MyOffice.Data.Models.Accounts; using MyOffice.Web.Models.AccountMotion; using Services.Account; using Services.Account.Domain; [Authorize] [ApiController] [Route("api/[controller]")] public class AccountController : BaseApiController { private readonly ILogger _logger; private readonly AccountService _accountService; public AccountController( ILogger logger, AccountService accountService ) { _logger = logger; _accountService = accountService; } [HttpGet("~/api/accounts")] public object AccountsGet(string category) { var list = _accountService.GetByCategoryDetailed(UserId, category!.AsGuid()); return list.Select(x => x.ToModel()); } [HttpGet("~/api/accounts/{id}/motions")] public object AccountsMotionsGet(string category) { var list = _accountService.GetByCategoryDetailed(UserId, category!.AsGuid()); return list.Select(x => x.ToModel()); } [HttpPost("~/api/accounts/{id}/motions")] public object AccountsMotionsPost(string id, AccountMotionRequest accountMotion) { var exec = _accountService.AccountMotionAdd(UserId, id.AsGuid(), accountMotion.FromModel()); switch (exec.Status) { case AccountMotionAddResult.account_not_found: return ProblemBadRequest("Account failed."); case AccountMotionAddResult.failure: return ProblemBadRequest("Adding motion failed."); case AccountMotionAddResult.success: return exec.Result!; default: throw new NotSupportedException(exec.Status.ToString()); } } }