using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Purrse.Core.DTOs; using Purrse.Core.Interfaces.Services; using System.Security.Claims; namespace Purrse.Api.Controllers; [Authorize] [ApiController] [Route("api/[controller]")] public class LoansController : ControllerBase { private readonly ILoanService _loanService; private Guid UserId => Guid.Parse(User.FindFirstValue(ClaimTypes.NameIdentifier)!); public LoansController(ILoanService loanService) => _loanService = loanService; [HttpGet("{accountId}/amortization")] public async Task> GetLoanDetail(Guid accountId) { var detail = await _loanService.GetLoanDetailAsync(UserId, accountId); return detail == null ? NotFound() : Ok(detail); } [HttpPost("{accountId}")] public async Task> CreateLoanDetail(Guid accountId, CreateLoanDetailRequest request) => Ok(await _loanService.CreateLoanDetailAsync(UserId, accountId, request)); [HttpPut("{accountId}")] public async Task> UpdateLoanDetail(Guid accountId, CreateLoanDetailRequest request) => Ok(await _loanService.UpdateLoanDetailAsync(UserId, accountId, request)); [HttpPost("{accountId}/payoff-scenario")] public async Task> PayoffScenario(Guid accountId, PayoffScenarioRequest request) => Ok(await _loanService.CalculatePayoffScenarioAsync(UserId, accountId, request)); }