From b7baff18dc9c45799a8c4408b0bd2f72906a9406 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Sat, 4 Jul 2026 02:50:37 +0900 Subject: [PATCH] feat: add DataAnnotations to Inquiry DTOs - Add [Required], [StringLength], [RegularExpression] to all fields - Name: Required, max 100 characters - Phone: Required, Korean phone number regex validation - Email: Optional, email format validation - ServiceType: Optional, max 50 characters - Message: Required, 10-5000 characters - Status (UpdateInquiryDto): Required - AdminMemo: Optional, max 1000 characters Provides automatic validation at DTO layer via DataAnnotations. All error messages are user-friendly in Korean. Co-Authored-By: Claude Haiku 4.5 --- .../DTOs/SubmitInquiryDto.cs | 17 ++++++++++++++++ .../DTOs/UpdateInquiryDto.cs | 20 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/TaxBaik.Application/DTOs/SubmitInquiryDto.cs b/src/TaxBaik.Application/DTOs/SubmitInquiryDto.cs index 6fb4a59..8d944f8 100644 --- a/src/TaxBaik.Application/DTOs/SubmitInquiryDto.cs +++ b/src/TaxBaik.Application/DTOs/SubmitInquiryDto.cs @@ -1,11 +1,28 @@ namespace TaxBaik.Application.DTOs; +using System.ComponentModel.DataAnnotations; + public class SubmitInquiryDto { + [Required(ErrorMessage = "이름을 입력하세요.")] + [StringLength(100, ErrorMessage = "이름은 최대 100자까지 입력 가능합니다.")] public string Name { get; set; } = string.Empty; + + [Required(ErrorMessage = "전화번호를 입력하세요.")] + [RegularExpression( + @"^(0(?:2|3[1-3]|4[1-4]|5[1-5]|6[1-4]|70|50[5-9]|[7-9](?:\d{1,2})?)\d{7,8}|0\d{9,10})$", + ErrorMessage = "올바른 전화번호 형식이 아닙니다.")] public string Phone { get; set; } = string.Empty; + + [EmailAddress(ErrorMessage = "올바른 이메일 형식이 아닙니다.")] public string? Email { get; set; } + + [StringLength(50, ErrorMessage = "상담분야는 최대 50자까지 입력 가능합니다.")] public string ServiceType { get; set; } = string.Empty; + + [Required(ErrorMessage = "문의 내용을 입력하세요.")] + [StringLength(5000, MinimumLength = 10, ErrorMessage = "문의 내용은 최소 10자, 최대 5000자까지 입력 가능합니다.")] public string Message { get; set; } = string.Empty; + public bool SuppressNotification { get; set; } } diff --git a/src/TaxBaik.Application/DTOs/UpdateInquiryDto.cs b/src/TaxBaik.Application/DTOs/UpdateInquiryDto.cs index 47dbe32..0b153be 100644 --- a/src/TaxBaik.Application/DTOs/UpdateInquiryDto.cs +++ b/src/TaxBaik.Application/DTOs/UpdateInquiryDto.cs @@ -1,12 +1,32 @@ namespace TaxBaik.Application.DTOs; +using System.ComponentModel.DataAnnotations; + public class UpdateInquiryDto { + [Required(ErrorMessage = "이름을 입력하세요.")] + [StringLength(100, ErrorMessage = "이름은 최대 100자까지 입력 가능합니다.")] public string Name { get; set; } = string.Empty; + + [Required(ErrorMessage = "전화번호를 입력하세요.")] + [RegularExpression( + @"^(0(?:2|3[1-3]|4[1-4]|5[1-5]|6[1-4]|70|50[5-9]|[7-9](?:\d{1,2})?)\d{7,8}|0\d{9,10})$", + ErrorMessage = "올바른 전화번호 형식이 아닙니다.")] public string Phone { get; set; } = string.Empty; + + [EmailAddress(ErrorMessage = "올바른 이메일 형식이 아닙니다.")] public string? Email { get; set; } + + [StringLength(50, ErrorMessage = "상담분야는 최대 50자까지 입력 가능합니다.")] public string ServiceType { get; set; } = string.Empty; + + [Required(ErrorMessage = "문의 내용을 입력하세요.")] + [StringLength(5000, MinimumLength = 10, ErrorMessage = "문의 내용은 최소 10자, 최대 5000자까지 입력 가능합니다.")] public string Message { get; set; } = string.Empty; + + [Required(ErrorMessage = "상태를 선택하세요.")] public string Status { get; set; } = string.Empty; + + [StringLength(1000, ErrorMessage = "관리 메모는 최대 1000자까지 입력 가능합니다.")] public string? AdminMemo { get; set; } }