From 5f57499d79db1a15b61fc09770d4bd12e78b5aac Mon Sep 17 00:00:00 2001 From: pricelees Date: Thu, 17 Jul 2025 09:28:09 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20theme=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=20=EB=82=B4=20DTO=20=EC=BD=94=ED=8B=80=EB=A6=B0=20=EC=A0=84?= =?UTF-8?q?=ED=99=98=20=EB=B0=8F=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=ED=86=B5?= =?UTF-8?q?=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/roomescape/theme/web/ThemeDTO.kt | 62 +++++++++++++++++++ .../roomescape/theme/web/ThemeRequest.java | 21 ------- .../roomescape/theme/web/ThemeResponse.java | 21 ------- .../roomescape/theme/web/ThemesResponse.java | 11 ---- 4 files changed, 62 insertions(+), 53 deletions(-) create mode 100644 src/main/java/roomescape/theme/web/ThemeDTO.kt delete mode 100644 src/main/java/roomescape/theme/web/ThemeRequest.java delete mode 100644 src/main/java/roomescape/theme/web/ThemeResponse.java delete mode 100644 src/main/java/roomescape/theme/web/ThemesResponse.java diff --git a/src/main/java/roomescape/theme/web/ThemeDTO.kt b/src/main/java/roomescape/theme/web/ThemeDTO.kt new file mode 100644 index 00000000..14291da9 --- /dev/null +++ b/src/main/java/roomescape/theme/web/ThemeDTO.kt @@ -0,0 +1,62 @@ +package roomescape.theme.web + +import io.swagger.v3.oas.annotations.media.Schema +import jakarta.validation.constraints.NotBlank +import jakarta.validation.constraints.Size +import roomescape.theme.infrastructure.persistence.Theme + +@Schema(name = "테마 저장 요청", description = "테마 정보를 저장할 때 사용합니다.") +@JvmRecord +data class ThemeRequest( + @field:Schema(description = "필수 값이며, 최대 20글자까지 입력 가능합니다.") + @NotBlank + @Size(max = 20, message = "테마의 이름은 1~20글자 사이여야 합니다.") + val name: String, + + @field:Schema(description = "필수 값이며, 최대 100글자까지 입력 가능합니다.") + @NotBlank + @Size(max = 100, message = "테마의 설명은 1~100글자 사이여야 합니다.") + val description: String, + + @field:Schema(description = "필수 값이며, 썸네일 이미지 URL 을 입력해주세요.") + @NotBlank + val thumbnail: String +) + +@Schema(name = "테마 정보", description = "테마 추가 및 조회 응답에 사용됩니다.") +@JvmRecord +data class ThemeResponse( + @field:Schema(description = "테마 번호. 테마를 식별할 때 사용합니다.") + val id: Long, + + @field:Schema(description = "테마 이름. 중복을 허용하지 않습니다.") + val name: String, + + @field:Schema(description = "테마 설명") + val description: String, + + @field:Schema(description = "테마 썸네일 이미지 URL") + val thumbnail: String +) { + companion object { + @JvmStatic + fun from(theme: Theme): ThemeResponse { + return ThemeResponse(theme.id, theme.name, theme.description, theme.thumbnail) + } + } +} + +fun Theme.toResponse(): ThemeResponse = ThemeResponse( + id = this.id, + name = this.name, + description = this.description, + thumbnail = this.thumbnail +) + + +@Schema(name = "테마 목록 조회 응답", description = "모든 테마 목록 조회 응답시 사용됩니다.") +@JvmRecord +data class ThemesResponse( + @field:Schema(description = "모든 테마 목록") + val themes: List +) diff --git a/src/main/java/roomescape/theme/web/ThemeRequest.java b/src/main/java/roomescape/theme/web/ThemeRequest.java deleted file mode 100644 index 30725515..00000000 --- a/src/main/java/roomescape/theme/web/ThemeRequest.java +++ /dev/null @@ -1,21 +0,0 @@ -package roomescape.theme.web; - -import io.swagger.v3.oas.annotations.media.Schema; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.Size; - -@Schema(name = "테마 저장 요청", description = "테마 정보를 저장할 때 사용합니다.") -public record ThemeRequest( - @NotBlank(message = "테마의 이름은 null 또는 공백일 수 없습니다.") - @Size(min = 1, max = 20, message = "테마의 이름은 1~20글자 사이여야 합니다.") - @Schema(description = "필수 값이며, 최대 20글자까지 입력 가능합니다.") - String name, - @NotBlank(message = "테마의 설명은 null 또는 공백일 수 없습니다.") - @Size(min = 1, max = 100, message = "테마의 설명은 1~100글자 사이여야 합니다.") - @Schema(description = "필수 값이며, 최대 100글자까지 입력 가능합니다.") - String description, - @NotBlank(message = "테마의 쌈네일은 null 또는 공백일 수 없습니다.") - @Schema(description = "필수 값이며, 썸네일 이미지 URL 을 입력해주세요.") - String thumbnail -) { -} diff --git a/src/main/java/roomescape/theme/web/ThemeResponse.java b/src/main/java/roomescape/theme/web/ThemeResponse.java deleted file mode 100644 index fc5711ff..00000000 --- a/src/main/java/roomescape/theme/web/ThemeResponse.java +++ /dev/null @@ -1,21 +0,0 @@ -package roomescape.theme.web; - -import io.swagger.v3.oas.annotations.media.Schema; -import roomescape.theme.infrastructure.persistence.Theme; - -@Schema(name = "테마 정보", description = "테마 추가 및 조회 응답에 사용됩니다.") -public record ThemeResponse( - @Schema(description = "테마 번호. 테마를 식별할 때 사용합니다.") - Long id, - @Schema(description = "테마 이름. 중복을 허용하지 않습니다.") - String name, - @Schema(description = "테마 설명") - String description, - @Schema(description = "테마 썸네일 이미지 URL") - String thumbnail -) { - - public static ThemeResponse from(Theme theme) { - return new ThemeResponse(theme.getId(), theme.getName(), theme.getDescription(), theme.getThumbnail()); - } -} diff --git a/src/main/java/roomescape/theme/web/ThemesResponse.java b/src/main/java/roomescape/theme/web/ThemesResponse.java deleted file mode 100644 index bf1b9e22..00000000 --- a/src/main/java/roomescape/theme/web/ThemesResponse.java +++ /dev/null @@ -1,11 +0,0 @@ -package roomescape.theme.web; - -import java.util.List; - -import io.swagger.v3.oas.annotations.media.Schema; - -@Schema(name = "테마 목록 조회 응답", description = "모든 테마 목록 조회 응답시 사용됩니다.") -public record ThemesResponse( - @Schema(description = "모든 테마 목록") List themes -) { -}