diff --git a/src/main/java/org/fontory/fontorybe/font/controller/FontController.java b/src/main/java/org/fontory/fontorybe/font/controller/FontController.java index e99fe3c..7a09e43 100644 --- a/src/main/java/org/fontory/fontorybe/font/controller/FontController.java +++ b/src/main/java/org/fontory/fontorybe/font/controller/FontController.java @@ -30,7 +30,6 @@ import org.fontory.fontorybe.font.controller.port.FontService; import org.fontory.fontorybe.font.domain.Font; import org.springframework.data.domain.Page; -import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -124,7 +123,7 @@ public ResponseEntity getFontProgress(@Login UserPrincipal userPrincipal) { @Parameter(name = "fontId", description = "수정할 폰트 ID") @PutMapping("/{fontId}") public ResponseEntity updateFont( - @RequestBody FontUpdateDTO fontUpdateDTO, + @RequestBody @Valid FontUpdateDTO fontUpdateDTO, @PathVariable Long fontId, @Login UserPrincipal userPrincipal ) { @@ -260,7 +259,7 @@ public ResponseEntity getPopularFonts(@Login(required = false) UserPrincipal @Parameter(name = "fontId", description = "수정할 폰트 ID") @PatchMapping("/progress/{fontId}") public ResponseEntity updateFontProgress( - @RequestBody FontProgressUpdateDTO fontProgressUpdateDTO, + @RequestBody @Valid FontProgressUpdateDTO fontProgressUpdateDTO, @PathVariable Long fontId ) { log.info("Request received: Update font progress ID: {}, request: {}", diff --git a/src/main/java/org/fontory/fontorybe/font/controller/dto/FontCreateDTO.java b/src/main/java/org/fontory/fontorybe/font/controller/dto/FontCreateDTO.java index 01a1a91..2cc153d 100644 --- a/src/main/java/org/fontory/fontorybe/font/controller/dto/FontCreateDTO.java +++ b/src/main/java/org/fontory/fontorybe/font/controller/dto/FontCreateDTO.java @@ -2,6 +2,7 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Pattern; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -12,9 +13,11 @@ public class FontCreateDTO { @NotBlank(message = "폰트 이름은 필수 입력 값입니다.") + @Size(min = 2, max = 30, message = "폰트 이름은 2자 이상 30자 이하로 입력해주세요.") private String name; @NotBlank(message = "폰트 예시는 필수 입력 값입니다.") + @Size(min = 10, max = 255, message = "폰트 예시는 10자 이상 255자 이하로 입력해주세요.") private String example; @Pattern(regexp = "^$|^01[016-9]\\d{7,8}$", message = "휴대폰 번호 형식이 올바르지 않습니다.") diff --git a/src/main/java/org/fontory/fontorybe/font/controller/dto/FontProgressUpdateDTO.java b/src/main/java/org/fontory/fontorybe/font/controller/dto/FontProgressUpdateDTO.java index 2a26840..dbd43e5 100644 --- a/src/main/java/org/fontory/fontorybe/font/controller/dto/FontProgressUpdateDTO.java +++ b/src/main/java/org/fontory/fontorybe/font/controller/dto/FontProgressUpdateDTO.java @@ -1,6 +1,7 @@ package org.fontory.fontorybe.font.controller.dto; import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; import lombok.Builder; import lombok.Getter; import org.fontory.fontorybe.font.infrastructure.entity.FontStatus; @@ -8,6 +9,7 @@ @Getter @Builder public class FontProgressUpdateDTO { - @Schema(description = "폰트의 상태 (PROGRESS, DONE)") + @NotNull(message = "폰트 상태는 필수입니다.") + @Schema(description = "폰트의 상태 (PROGRESS, DONE, FAILED)") private FontStatus status; } diff --git a/src/main/java/org/fontory/fontorybe/font/controller/dto/FontUpdateDTO.java b/src/main/java/org/fontory/fontorybe/font/controller/dto/FontUpdateDTO.java index 3e01b08..81a373e 100644 --- a/src/main/java/org/fontory/fontorybe/font/controller/dto/FontUpdateDTO.java +++ b/src/main/java/org/fontory/fontorybe/font/controller/dto/FontUpdateDTO.java @@ -1,11 +1,18 @@ package org.fontory.fontorybe.font.controller.dto; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; import lombok.Builder; import lombok.Getter; @Getter @Builder public class FontUpdateDTO { + @NotBlank(message = "폰트 이름은 필수 입력 값입니다.") + @Size(min = 2, max = 30, message = "폰트 이름은 2자 이상 30자 이하로 입력해주세요.") private String name; + + @NotBlank(message = "폰트 예시는 필수 입력 값입니다.") + @Size(min = 10, max = 255, message = "폰트 예시는 10자 이상 255자 이하로 입력해주세요.") private String example; } diff --git a/src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java b/src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java index b651cee..ab095e6 100644 --- a/src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java +++ b/src/main/java/org/fontory/fontorybe/member/controller/ProfileController.java @@ -3,6 +3,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; import lombok.Builder; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -71,7 +72,7 @@ public ResponseEntity getMyProfile( @PatchMapping(consumes = MULTIPART_FORM_DATA_VALUE) public ResponseEntity updateMember( @Login UserPrincipal userPrincipal, - @RequestPart MemberUpdateRequest req, + @RequestPart @Valid MemberUpdateRequest req, @SingleFileUpload @RequestPart("file") List files ) { Long requestMemberId = userPrincipal.getId(); diff --git a/src/main/java/org/fontory/fontorybe/member/controller/RegistrationController.java b/src/main/java/org/fontory/fontorybe/member/controller/RegistrationController.java index 3d054b2..7fa1c17 100644 --- a/src/main/java/org/fontory/fontorybe/member/controller/RegistrationController.java +++ b/src/main/java/org/fontory/fontorybe/member/controller/RegistrationController.java @@ -2,6 +2,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; import lombok.Builder; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -58,7 +59,7 @@ public ResponseEntity checkDuplicate( @PostMapping(consumes = MULTIPART_FORM_DATA_VALUE) public ResponseEntity register( @Login UserPrincipal user, - @RequestPart InitMemberInfoRequest req, + @RequestPart @Valid InitMemberInfoRequest req, @SingleFileUpload @RequestPart("file") List files ) { Long requestMemberId = user.getId(); diff --git a/src/main/java/org/fontory/fontorybe/member/controller/dto/InitMemberInfoRequest.java b/src/main/java/org/fontory/fontorybe/member/controller/dto/InitMemberInfoRequest.java index 3bb9513..ff9e248 100644 --- a/src/main/java/org/fontory/fontorybe/member/controller/dto/InitMemberInfoRequest.java +++ b/src/main/java/org/fontory/fontorybe/member/controller/dto/InitMemberInfoRequest.java @@ -1,5 +1,9 @@ package org.fontory.fontorybe.member.controller.dto; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Past; +import jakarta.validation.constraints.Size; import java.time.LocalDate; import lombok.AllArgsConstructor; @@ -13,8 +17,17 @@ @ToString @AllArgsConstructor public class InitMemberInfoRequest { + @NotBlank(message = "닉네임은 필수 입력 값입니다.") + @Size(min = 2, max = 20, message = "닉네임은 2자 이상 20자 이하로 입력해주세요.") private String nickname; + + @NotNull(message = "성별을 선택해주세요.") private Gender gender; + + @NotNull(message = "생년월일을 입력해주세요.") + @Past(message = "생년월일은 과거 날짜만 가능합니다.") private LocalDate birth; + + @NotNull(message = "이용약관 동의 여부를 선택해주세요.") private Boolean terms; } diff --git a/src/main/java/org/fontory/fontorybe/member/controller/dto/MemberUpdateRequest.java b/src/main/java/org/fontory/fontorybe/member/controller/dto/MemberUpdateRequest.java index 63179cd..b658a46 100644 --- a/src/main/java/org/fontory/fontorybe/member/controller/dto/MemberUpdateRequest.java +++ b/src/main/java/org/fontory/fontorybe/member/controller/dto/MemberUpdateRequest.java @@ -1,5 +1,8 @@ package org.fontory.fontorybe.member.controller.dto; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -10,6 +13,10 @@ @ToString @AllArgsConstructor public class MemberUpdateRequest { + @NotBlank(message = "닉네임은 필수 입력 값입니다.") + @Size(min = 2, max = 20, message = "닉네임은 2자 이상 20자 이하로 입력해주세요.") private String nickname; + + @NotNull(message = "이용약관 동의 여부를 선택해주세요.") private Boolean terms; }