namespace MyOffice.Web.Controllers; using AutoMapper; using Core.Extensions; using Data.Models.Currencies; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Authorization; using Models.Currency; using Services.Currency; using Services.Currency.Domain; [Authorize] [ApiController] [Route("api/[controller]")] public class CurrencyController : BaseApiController { private readonly CurrencyService _currencyService; private readonly ILogger _logger; private readonly IMapper _mapper; public CurrencyController( CurrencyService currencyService, ILogger logger, IMapper mapper ) { _currencyService = currencyService; _logger = logger; _mapper = mapper; } [HttpGet("~/api/settings/currencies")] public ObjectResult Get() { var list = _currencyService.GetAllWithRates(UserId); return OkResponse(_mapper.Map>(list).OrderBy(x => x.Id)); } [HttpPost("~/api/settings/currencies")] public ObjectResult Post(CurrencyAddModel currency) { var exec = _currencyService.CurrencyAdd(UserId, new CurrencyDto { UserId = UserId, CurrencyGlobalId = currency.Id, Name = currency.Name, ShortName = currency.ShortName, }); switch (exec.Status) { case CurrencyAddStatus.success: case CurrencyAddStatus.exists: _currencyService.CurrencyRateAdd(UserId, exec.Result!.Id, new CurrencyRateDto { CurrencyId = exec.Result!.Id, Rate = currency.Rate, Quantity = currency.Quantity, DateTime = currency.RateDate.Date, }); return OkResponse(_mapper.Map(exec.Result!)); case CurrencyAddStatus.failed: return ProblemBadResponse("Adding currency failed."); default: throw new NotSupportedException(exec.Status.ToString()); } } [HttpPut("~/api/settings/currencies/{id}")] public ObjectResult Update(string id, CurrencyEditModel currency) { var exec = _currencyService.CurrencyUpdate( UserId, id.AsGuid(), new CurrencyEdit { Name = currency.Name, ShortName = currency.ShortName, IsPrimary = currency.IsPrimary } ); switch (exec.Status) { case CurrencyEditStatus.success: return OkResponse(_mapper.Map(exec.Result!)); case CurrencyEditStatus.not_found: case CurrencyEditStatus.failed: return ProblemBadResponse("Currency not found."); default: throw new NotSupportedException(exec.Status.ToString()); } } [HttpPost("~/api/settings/currencies/{id}/rate")] public ObjectResult Add(string id, CurrencyRateModel currencyRate) { var exec = _currencyService.CurrencyRateAdd(UserId, id.AsGuid(), new CurrencyRateDto { CurrencyId = id.AsGuid(), Quantity = currencyRate.Quantity, Rate = currencyRate.Rate, DateTime = currencyRate.RateDate.Date, }); switch (exec.Status) { case CurrencyAddRateStatus.failed: return ProblemBadResponse("Adding currency rate failed."); case CurrencyAddRateStatus.not_found: return ProblemBadResponse("Currency not found."); case CurrencyAddRateStatus.success: return OkResponse(_mapper.Map(exec.Result!)); default: throw new NotSupportedException(exec.Status.ToString()); } } }