From 7fa95edd29090c95678332311adfba415285ca89 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Tue, 15 Jul 2025 22:56:46 +0900 Subject: [PATCH 1/5] =?UTF-8?q?MOSU-94=20feat:=20=ED=95=99=EA=B5=90=20?= =?UTF-8?q?=EB=8F=84=EC=8B=9C=EB=9D=BD,=20=EB=A7=88=EA=B0=90=20=EA=B8=B0?= =?UTF-8?q?=EA=B0=84=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../school/dto/SchoolRegistrationRequest.java | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/presentation/school/dto/SchoolRegistrationRequest.java b/src/main/java/life/mosu/mosuserver/presentation/school/dto/SchoolRegistrationRequest.java index 64c14612..f22cc8ad 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/school/dto/SchoolRegistrationRequest.java +++ b/src/main/java/life/mosu/mosuserver/presentation/school/dto/SchoolRegistrationRequest.java @@ -5,7 +5,8 @@ import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Positive; import java.time.LocalDate; -import life.mosu.mosuserver.domain.school.AddressJpaVO; +import java.time.LocalDateTime; +import life.mosu.mosuserver.domain.application.Lunch; import life.mosu.mosuserver.domain.school.Area; import life.mosu.mosuserver.domain.school.SchoolJpaEntity; import life.mosu.mosuserver.presentation.application.dto.AddressRequest; @@ -13,9 +14,6 @@ @Schema(description = "학교 생성/등록 요청 DTO") public record SchoolRegistrationRequest( - @Schema(description = "학교 이름", example = "모수고등학교") - @NotBlank(message = "학교 이름은 필수 입니다.") - String schoolName, @Schema(description = "지역 (예: DAECHI, MOKDONG, NOWON)", example = "DAECHI") @NotNull(message = "지역은 필수 입니다.") @@ -23,12 +21,28 @@ public record SchoolRegistrationRequest( @Schema(description = "학교 주소 정보") @NotNull(message = "주소 정보는 필수 입니다.") - AddressRequest address, + AddressRequest schoolAddress, - @Schema(description = "시험/입학 시험 날짜 (YYYY-MM-DD)", example = "2025-11-20") + @Schema(description = "날짜 (YYYY-MM-DD)", example = "2025-11-20") @NotNull(message = "시험 날짜는 필수입니다.") LocalDate examDate, + @Schema(description = "학교명", example = "모수고등학교") + @NotBlank(message = "학교 이름은 필수 입니다.") + String schoolName, + + @Schema(description = "도시락 메뉴") + @NotNull + String lunch, + + @Schema(description = "도시락 가격") + @NotNull + Integer lunchPrice, + + @NotNull + @Schema(description = "신청 마감 일시", example = "2025-05-30T10:00:00") + LocalDateTime deadlineTime, + @Schema(description = "수용 인원", example = "300") @NotNull(message = "수용 인원은 필수입니다.") @Positive(message = "수용 인원은 양수여야 합니다.") @@ -36,12 +50,13 @@ public record SchoolRegistrationRequest( ) { public SchoolJpaEntity toEntity() { - AddressJpaVO address = address().toValueObject(); return SchoolJpaEntity.builder() - .schoolName(schoolName) - .area(Area.valueOf(area)) - .address(address) + .area(Area.from(area)) .examDate(examDate) + .schoolName(schoolName) + .lunch(Lunch.from(lunch)) + .lunchPrice(lunchPrice) + .deadlineTime(deadlineTime) .capacity(capacity) .build(); } From 4fe83bb04cf15539f7596da5078c618b3a3194a9 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Tue, 15 Jul 2025 22:56:54 +0900 Subject: [PATCH 2/5] =?UTF-8?q?MOSU-94=20feat:=20=ED=95=99=EA=B5=90=20?= =?UTF-8?q?=EB=8F=84=EC=8B=9C=EB=9D=BD,=20=EB=A7=88=EA=B0=90=20=EA=B8=B0?= =?UTF-8?q?=EA=B0=84=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=ED=95=84=EB=93=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/school/SchoolJpaEntity.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/domain/school/SchoolJpaEntity.java b/src/main/java/life/mosu/mosuserver/domain/school/SchoolJpaEntity.java index 994bc884..7390988e 100644 --- a/src/main/java/life/mosu/mosuserver/domain/school/SchoolJpaEntity.java +++ b/src/main/java/life/mosu/mosuserver/domain/school/SchoolJpaEntity.java @@ -11,6 +11,8 @@ import jakarta.persistence.Id; import jakarta.persistence.Table; import java.time.LocalDate; +import java.time.LocalDateTime; +import life.mosu.mosuserver.domain.application.Lunch; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; @@ -30,11 +32,20 @@ public class SchoolJpaEntity { @Column(name = "school_name") private String schoolName; + @Embedded + private AddressJpaVO address; + @Enumerated(EnumType.STRING) private Area area; - @Embedded - private AddressJpaVO address; + @Enumerated(EnumType.STRING) + private Lunch lunch; + + @Column(name = "lunch_price") + private Integer lunchPrice; + + @Column(name = "deadline_time") + private LocalDateTime deadlineTime; @Column(name = "exam_date") private LocalDate examDate; @@ -43,12 +54,15 @@ public class SchoolJpaEntity { private Long capacity; @Builder - public SchoolJpaEntity(String schoolName, Area area, AddressJpaVO address, LocalDate examDate, - Long capacity) { + public SchoolJpaEntity(String schoolName, Area area, Lunch lunch, LocalDate examDate, + Long capacity, + LocalDateTime deadlineTime, Integer lunchPrice) { this.schoolName = schoolName; this.area = area; - this.address = address; + this.lunch = lunch; this.examDate = examDate; this.capacity = capacity; + this.deadlineTime = deadlineTime; + this.lunchPrice = lunchPrice; } } From c5e37d41216a44ae062032208234415f4d9d42ca Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Tue, 15 Jul 2025 22:57:17 +0900 Subject: [PATCH 3/5] =?UTF-8?q?MOSU-94=20refactor:=20Enum=20=ED=95=9C?= =?UTF-8?q?=EA=B5=AD=EC=96=B4=EB=A1=9C=20=EB=B0=9B=EC=95=84=EC=84=9C=20?= =?UTF-8?q?=ED=95=9C=EA=B5=AD=EC=96=B4=EB=A1=9C=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mosu/mosuserver/domain/application/Lunch.java | 12 ++++++++++++ .../life/mosu/mosuserver/domain/school/Area.java | 15 ++++++++++++--- .../mosuserver/global/exception/ErrorCode.java | 4 ++++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/main/java/life/mosu/mosuserver/domain/application/Lunch.java b/src/main/java/life/mosu/mosuserver/domain/application/Lunch.java index c75505bf..1f0cb87c 100644 --- a/src/main/java/life/mosu/mosuserver/domain/application/Lunch.java +++ b/src/main/java/life/mosu/mosuserver/domain/application/Lunch.java @@ -1,5 +1,8 @@ package life.mosu.mosuserver.domain.application; +import java.util.Arrays; +import life.mosu.mosuserver.global.exception.CustomRuntimeException; +import life.mosu.mosuserver.global.exception.ErrorCode; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -15,4 +18,13 @@ public enum Lunch { OPTION6("중식 도시락"); private final String lunchName; + + public static Lunch from(String lunchName) { + return Arrays.stream(values()) + .filter(e -> e.getLunchName().equals(lunchName)) + .findFirst() + .orElseThrow( + () -> new CustomRuntimeException(ErrorCode.NOT_FOUND_LUNCH) + ); + } } diff --git a/src/main/java/life/mosu/mosuserver/domain/school/Area.java b/src/main/java/life/mosu/mosuserver/domain/school/Area.java index 59936697..b894ee47 100644 --- a/src/main/java/life/mosu/mosuserver/domain/school/Area.java +++ b/src/main/java/life/mosu/mosuserver/domain/school/Area.java @@ -1,16 +1,25 @@ package life.mosu.mosuserver.domain.school; +import java.util.Arrays; +import life.mosu.mosuserver.global.exception.CustomRuntimeException; +import life.mosu.mosuserver.global.exception.ErrorCode; +import lombok.Getter; + +@Getter public enum Area { DAECHI("대치"), MOKDONG("목동"), NOWON("노원"); private final String areaName; - Area(String areaName) { + private Area(String areaName) { this.areaName = areaName; } - public String getAreaName() { - return areaName; + public static Area from(String areaName) { + return Arrays.stream(Area.values()) + .filter(area -> area.getAreaName().equals(areaName)) + .findFirst() + .orElseThrow(() -> new CustomRuntimeException(ErrorCode.NOT_FOUND_AREA)); } } \ No newline at end of file diff --git a/src/main/java/life/mosu/mosuserver/global/exception/ErrorCode.java b/src/main/java/life/mosu/mosuserver/global/exception/ErrorCode.java index 35d44ab9..be7dd28b 100644 --- a/src/main/java/life/mosu/mosuserver/global/exception/ErrorCode.java +++ b/src/main/java/life/mosu/mosuserver/global/exception/ErrorCode.java @@ -63,6 +63,10 @@ public enum ErrorCode { // 이벤트 관련 에러 EVENT_NOT_FOUND(HttpStatus.NOT_FOUND, "이벤트를 찾을 수 없습니다."), + // Enum 관련 에러 + NOT_FOUND_AREA(HttpStatus.NOT_FOUND, "해당 지역을 찾을 수 없습니다."), + NOT_FOUND_LUNCH(HttpStatus.NOT_FOUND, "해당 도시락을 찾을 수 없습니다."), + // FAQ 관련 에러 FAQ_NOT_FOUND(HttpStatus.NOT_FOUND, "FAQ를 찾을 수 없습니다."), FAQ_CREATION_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "FAQ 등록에 실패했습니다."), From 1f9231f38b3a128c86db4e69687e44f4695eb738 Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Tue, 15 Jul 2025 23:05:56 +0900 Subject: [PATCH 4/5] =?UTF-8?q?MOSU-94=20fix:=20address=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1=EC=9E=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../life/mosu/mosuserver/domain/school/SchoolJpaEntity.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/life/mosu/mosuserver/domain/school/SchoolJpaEntity.java b/src/main/java/life/mosu/mosuserver/domain/school/SchoolJpaEntity.java index 7390988e..2b2f40df 100644 --- a/src/main/java/life/mosu/mosuserver/domain/school/SchoolJpaEntity.java +++ b/src/main/java/life/mosu/mosuserver/domain/school/SchoolJpaEntity.java @@ -56,7 +56,7 @@ public class SchoolJpaEntity { @Builder public SchoolJpaEntity(String schoolName, Area area, Lunch lunch, LocalDate examDate, Long capacity, - LocalDateTime deadlineTime, Integer lunchPrice) { + LocalDateTime deadlineTime, Integer lunchPrice, AddressJpaVO address) { this.schoolName = schoolName; this.area = area; this.lunch = lunch; @@ -64,5 +64,6 @@ public SchoolJpaEntity(String schoolName, Area area, Lunch lunch, LocalDate exam this.capacity = capacity; this.deadlineTime = deadlineTime; this.lunchPrice = lunchPrice; + this.address = address; } } From 6db4d09a63a40dbc488a96f27f15d274b77a8b9c Mon Sep 17 00:00:00 2001 From: wlgns12370 Date: Wed, 16 Jul 2025 01:58:13 +0900 Subject: [PATCH 5/5] =?UTF-8?q?MOSU-94=20feat:=20=ED=95=99=EA=B5=90=20?= =?UTF-8?q?=EC=A3=BC=EC=86=8C=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/school/dto/SchoolRegistrationRequest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/life/mosu/mosuserver/presentation/school/dto/SchoolRegistrationRequest.java b/src/main/java/life/mosu/mosuserver/presentation/school/dto/SchoolRegistrationRequest.java index f22cc8ad..ecacdad7 100644 --- a/src/main/java/life/mosu/mosuserver/presentation/school/dto/SchoolRegistrationRequest.java +++ b/src/main/java/life/mosu/mosuserver/presentation/school/dto/SchoolRegistrationRequest.java @@ -51,6 +51,7 @@ public record SchoolRegistrationRequest( public SchoolJpaEntity toEntity() { return SchoolJpaEntity.builder() + .address(schoolAddress.toValueObject()) .area(Area.from(area)) .examDate(examDate) .schoolName(schoolName)