using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using TaxBaik.Application.Services; using TaxBaik.Domain.Entities; namespace TaxBaik.Web.Controllers; [ApiController] [Route("api/[controller]")] [Authorize] public class CommonCodeController(CommonCodeService commonCodeService) : ControllerBase { [HttpGet] public async Task GetAllActive() { try { var codes = await commonCodeService.GetAllActiveAsync(); return Ok(codes); } catch (Exception ex) { return StatusCode(500, new { error = "공통코드 조회 실패", message = ex.Message }); } } [HttpGet("group/{group}")] public async Task GetByGroup(string group) { try { var codes = await commonCodeService.GetByGroupAsync(group); return Ok(codes); } catch (Exception ex) { return StatusCode(500, new { error = "그룹별 공통코드 조회 실패", message = ex.Message }); } } [HttpGet("groups")] public async Task GetGroups() { try { var groups = await commonCodeService.GetAllGroupsAsync(); return Ok(groups); } catch (Exception ex) { return StatusCode(500, new { error = "공통코드 그룹 조회 실패", message = ex.Message }); } } [HttpGet("{group}/{value}")] public async Task Get(string group, string value) { var code = await commonCodeService.GetAsync(group, value); return code is null ? NotFound() : Ok(code); } [HttpPost] public async Task Upsert([FromBody] CommonCode code) { if (string.IsNullOrWhiteSpace(code.CodeGroup) || string.IsNullOrWhiteSpace(code.CodeValue) || string.IsNullOrWhiteSpace(code.CodeName)) return BadRequest(new { error = "코드 그룹, 값, 이름은 필수입니다." }); if (code.CodeGroup.Any(char.IsWhiteSpace)) return BadRequest(new { error = "code_group에는 공백을 사용할 수 없습니다." }); if (code.CodeValue.Contains(' ')) return BadRequest(new { error = "code_value에는 공백을 사용할 수 없습니다." }); await commonCodeService.UpsertAsync(code); return Ok(code); } [HttpDelete("{group}/{value}")] public async Task Delete(string group, string value) { await commonCodeService.DeleteAsync(group, value); return NoContent(); } }