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 -) { -}