using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using TaxBaik.Application.DTOs; using TaxBaik.Application.Services; namespace TaxBaik.Web.Controllers; [ApiController] [Route("api/[controller]")] [Authorize] public class ClientController : ControllerBase { private readonly ClientService _clientService; public ClientController(ClientService clientService) { _clientService = clientService; } [HttpGet] public async Task GetPaged( [FromQuery] int page = 1, [FromQuery] int pageSize = 20, [FromQuery] string? status = null, [FromQuery] string? search = null) { var (clients, total) = await _clientService.GetPagedAsync(page, pageSize, status, search); return Ok(new { data = clients, total, page, pageSize }); } [HttpGet("{id}")] public async Task GetById(int id) { var client = await _clientService.GetByIdAsync(id); if (client == null) return NotFound(new ProblemDetails { Title = "고객을 찾을 수 없습니다.", Status = StatusCodes.Status404NotFound }); return Ok(client); } [HttpPost] public async Task Create([FromBody] CreateClientDto dto) { try { var clientId = await _clientService.CreateAsync(dto); var client = await _clientService.GetByIdAsync(clientId); return CreatedAtAction(nameof(GetById), new { id = clientId }, client); } catch (ValidationException ex) { return BadRequest(new ProblemDetails { Title = ex.Message, Status = StatusCodes.Status400BadRequest }); } } [HttpPut("{id}")] public async Task Update(int id, [FromBody] CreateClientDto dto) { try { await _clientService.UpdateAsync(id, dto); var client = await _clientService.GetByIdAsync(id); if (client == null) return NotFound(new ProblemDetails { Title = "고객을 찾을 수 없습니다.", Status = StatusCodes.Status404NotFound }); return Ok(client); } catch (ValidationException ex) { return BadRequest(new ProblemDetails { Title = ex.Message, Status = StatusCodes.Status400BadRequest }); } } [HttpDelete("{id}")] public async Task Delete(int id) { await _clientService.DeleteAsync(id); return NoContent(); } }