diff --git a/src/main/java/in/koreatech/koin/admin/coopShop/dto/AdminCoopShopSemesterResponse.java b/src/main/java/in/koreatech/koin/admin/coopShop/dto/AdminCoopShopSemesterResponse.java index 79c86dab1..675cbcf02 100644 --- a/src/main/java/in/koreatech/koin/admin/coopShop/dto/AdminCoopShopSemesterResponse.java +++ b/src/main/java/in/koreatech/koin/admin/coopShop/dto/AdminCoopShopSemesterResponse.java @@ -72,7 +72,7 @@ record InnerCoopShop( public static InnerCoopShop from(CoopShop coopShop) { return new InnerCoopShop( coopShop.getId(), - coopShop.getName().getCoopShopName(), + coopShop.getName(), coopShop.getCoopOpens().stream() .map(InnerCoopOpens::from) .toList(), diff --git a/src/main/java/in/koreatech/koin/domain/coopshop/dto/CoopShopResponse.java b/src/main/java/in/koreatech/koin/domain/coopshop/dto/CoopShopResponse.java index 9e0da1103..3f2c98ad9 100644 --- a/src/main/java/in/koreatech/koin/domain/coopshop/dto/CoopShopResponse.java +++ b/src/main/java/in/koreatech/koin/domain/coopshop/dto/CoopShopResponse.java @@ -44,8 +44,8 @@ public record CoopShopResponse( public static CoopShopResponse from(CoopShop coopShop) { return new CoopShopResponse( coopShop.getId(), - coopShop.getName().getCoopShopName(), - coopShop.getCoopShopSemester().getSemester(), + coopShop.getName(), + coopShop.getSemester().getSemester(), coopShop.getCoopOpens().stream() .map(InnerCoopOpens::from) .toList(), diff --git a/src/main/java/in/koreatech/koin/domain/coopshop/dto/CoopShopsResponse.java b/src/main/java/in/koreatech/koin/domain/coopshop/dto/CoopShopsResponse.java index c31e967c4..366ce3901 100644 --- a/src/main/java/in/koreatech/koin/domain/coopshop/dto/CoopShopsResponse.java +++ b/src/main/java/in/koreatech/koin/domain/coopshop/dto/CoopShopsResponse.java @@ -71,7 +71,7 @@ public record InnerCoopShop( public static InnerCoopShop from(CoopShop coopShop) { return new InnerCoopShop( coopShop.getId(), - coopShop.getName().getCoopShopName(), + coopShop.getName(), coopShop.getCoopOpens().stream() .map(InnerCoopOpens::from) .toList(), diff --git a/src/main/java/in/koreatech/koin/domain/coopshop/model/CoopShop.java b/src/main/java/in/koreatech/koin/domain/coopshop/model/CoopShop.java index b911b337e..8c79b07d5 100644 --- a/src/main/java/in/koreatech/koin/domain/coopshop/model/CoopShop.java +++ b/src/main/java/in/koreatech/koin/domain/coopshop/model/CoopShop.java @@ -10,8 +10,6 @@ import in.koreatech.koin.global.domain.BaseEntity; import jakarta.persistence.Column; import jakarta.persistence.Entity; -import jakarta.persistence.EnumType; -import jakarta.persistence.Enumerated; import jakarta.persistence.FetchType; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; @@ -36,12 +34,11 @@ public class CoopShop extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "semester_id", referencedColumnName = "id", nullable = false) - private CoopShopSemester coopShopSemester; + private CoopShopSemester semester; @NotNull - @Enumerated(EnumType.STRING) @Column(name = "name", nullable = false) - private CoopShopType name; + private String name; @NotNull @Column(name = "phone", nullable = false) @@ -60,13 +57,13 @@ public class CoopShop extends BaseEntity { @Builder private CoopShop( - CoopShopSemester coopShopSemester, - CoopShopType name, + CoopShopSemester semester, + String name, String phone, String location, String remarks ) { - this.coopShopSemester = coopShopSemester; + this.semester = semester; this.name = name; this.phone = phone; this.location = location; diff --git a/src/main/java/in/koreatech/koin/domain/coopshop/model/CoopShopSemester.java b/src/main/java/in/koreatech/koin/domain/coopshop/model/CoopShopSemester.java index 55cb7628d..5089af165 100644 --- a/src/main/java/in/koreatech/koin/domain/coopshop/model/CoopShopSemester.java +++ b/src/main/java/in/koreatech/koin/domain/coopshop/model/CoopShopSemester.java @@ -47,7 +47,7 @@ public class CoopShopSemester extends BaseEntity { @Column(name = "is_applied", columnDefinition = "TINYINT", nullable = false) private boolean isApplied = false; - @OneToMany(mappedBy = "coopShopSemester", orphanRemoval = true, cascade = {PERSIST, REFRESH, MERGE, REMOVE}, + @OneToMany(mappedBy = "semester", orphanRemoval = true, cascade = {PERSIST, REFRESH, MERGE, REMOVE}, fetch = FetchType.EAGER) private List coopShops = new ArrayList<>(); diff --git a/src/main/java/in/koreatech/koin/domain/coopshop/repository/CoopShopRepository.java b/src/main/java/in/koreatech/koin/domain/coopshop/repository/CoopShopRepository.java index 63f0e6b00..7dbc89253 100644 --- a/src/main/java/in/koreatech/koin/domain/coopshop/repository/CoopShopRepository.java +++ b/src/main/java/in/koreatech/koin/domain/coopshop/repository/CoopShopRepository.java @@ -17,15 +17,16 @@ public interface CoopShopRepository extends Repository { Optional findById(Integer id); - Optional findByName(CoopShopType name); + Optional findByNameAndSemester_Id(String name, Integer semesterId); default CoopShop getById(Integer id) { return findById(id) .orElseThrow(() -> CoopShopNotFoundException.withDetail("coopShopId : " + id)); } - default CoopShop getByName(CoopShopType name) { - return findByName(name) - .orElseThrow(() -> CoopShopNotFoundException.withDetail("coopShopName : " + name.getCoopShopName())); + default CoopShop getByNameAndSemester_Id(CoopShopType name, Integer semesterId) { + return findByNameAndSemester_Id(name.getCoopShopName(), semesterId) + .orElseThrow(() -> CoopShopNotFoundException + .withDetail("coopShopName : " + name.getCoopShopName() + ", semesterId: " + semesterId)); } } diff --git a/src/main/java/in/koreatech/koin/domain/coopshop/service/CoopShopService.java b/src/main/java/in/koreatech/koin/domain/coopshop/service/CoopShopService.java index 5ebaa5600..358fc373c 100644 --- a/src/main/java/in/koreatech/koin/domain/coopshop/service/CoopShopService.java +++ b/src/main/java/in/koreatech/koin/domain/coopshop/service/CoopShopService.java @@ -49,7 +49,8 @@ public boolean getIsOpened(LocalDateTime now, CoopShopType coopShopType, DiningT DayType todayType = (now.getDayOfWeek() == DayOfWeek.SATURDAY || now.getDayOfWeek() == DayOfWeek.SUNDAY) ? DayType.WEEKEND : DayType.WEEKDAYS; - CoopShop coopShop = coopShopRepository.getByName(coopShopType); + CoopShopSemester semester = coopShopSemesterRepository.getByIsApplied(true); + CoopShop coopShop = coopShopRepository.getByNameAndSemester_Id(coopShopType, semester.getId()); CoopOpen open = coopOpenRepository .getByCoopShopAndTypeAndDayOfWeek(coopShop, type.getDiningName(), todayType); diff --git a/src/main/resources/db/migration/V77__insert_coop_shop_semester.sql b/src/main/resources/db/migration/V77__insert_coop_shop_semester.sql index 464445c01..cbe6d7a4d 100644 --- a/src/main/resources/db/migration/V77__insert_coop_shop_semester.sql +++ b/src/main/resources/db/migration/V77__insert_coop_shop_semester.sql @@ -1,8 +1,6 @@ insert into `coop_shop_semester` (`semester`, `from_date`, `to_date`, `is_applied`) values ('24-2학기', '2024-09-02', '2024-12-20', 1); -update `coop_shop` set `semester_id` = 1, `name` = 'CAFETERIA' where `id` = 1; - update `coop_opens` set `day_of_week` = 'WEEKDAYS' where `id` = 1; update `coop_opens` set `day_of_week` = 'WEEKDAYS' where `id` = 2; update `coop_opens` set `day_of_week` = 'WEEKDAYS' where `id` = 3; diff --git a/src/test/java/in/koreatech/koin/acceptance/DiningApiTest.java b/src/test/java/in/koreatech/koin/acceptance/DiningApiTest.java index 9bfaeba3c..acf081641 100644 --- a/src/test/java/in/koreatech/koin/acceptance/DiningApiTest.java +++ b/src/test/java/in/koreatech/koin/acceptance/DiningApiTest.java @@ -57,6 +57,7 @@ class DiningApiTest extends AcceptanceTest { @BeforeAll void setUp() { clear(); + coopShopFixture.현재학기(); coop_준기 = userFixture.준기_영양사().getUser(); token_준기 = userFixture.getToken(coop_준기); owner_현수 = userFixture.현수_사장님().getUser(); diff --git a/src/test/java/in/koreatech/koin/fixture/CoopShopFixture.java b/src/test/java/in/koreatech/koin/fixture/CoopShopFixture.java index 7f8edadb8..2b845769d 100644 --- a/src/test/java/in/koreatech/koin/fixture/CoopShopFixture.java +++ b/src/test/java/in/koreatech/koin/fixture/CoopShopFixture.java @@ -1,5 +1,8 @@ package in.koreatech.koin.fixture; +import static in.koreatech.koin.domain.coopshop.model.CoopShopType.CAFETERIA; +import static in.koreatech.koin.domain.coopshop.model.CoopShopType.LAUNDRY; + import java.time.LocalDate; import java.util.List; @@ -8,7 +11,6 @@ import in.koreatech.koin.domain.coopshop.model.CoopOpen; import in.koreatech.koin.domain.coopshop.model.CoopShop; import in.koreatech.koin.domain.coopshop.model.CoopShopSemester; -import in.koreatech.koin.domain.coopshop.model.CoopShopType; import in.koreatech.koin.domain.coopshop.model.DayType; import in.koreatech.koin.domain.coopshop.repository.CoopShopRepository; import in.koreatech.koin.domain.coopshop.repository.CoopShopSemesterRepository; @@ -39,11 +41,11 @@ public CoopShopFixture( coopShopSemester.updateApply(true); var cafeteria = CoopShop.builder() - .name(CoopShopType.CAFETERIA) + .name(CAFETERIA.getCoopShopName()) .location("학생회관 1층") .phone("041-000-0000") .remarks("공휴일 휴무") - .coopShopSemester(coopShopSemester) + .semester(coopShopSemester) .build(); cafeteria.getCoopOpens().addAll( @@ -59,11 +61,11 @@ public CoopShopFixture( ); var laundry = CoopShop.builder() - .name(CoopShopType.LAUNDRY) + .name(LAUNDRY.getCoopShopName()) .location("학생회관 2층") .phone("041-000-0000") .remarks("연중무휴") - .coopShopSemester(coopShopSemester) + .semester(coopShopSemester) .build(); coopShopRepository.save(cafeteria); @@ -81,11 +83,11 @@ public CoopShopFixture( ); var coopShop = CoopShop.builder() - .name(CoopShopType.LAUNDRY) + .name(LAUNDRY.getCoopShopName()) .location("학생회관 2층") .phone("041-000-0000") .remarks("연중무휴") - .coopShopSemester(coopShopSemester) + .semester(coopShopSemester) .build(); coopShop.getCoopOpens().addAll( @@ -102,4 +104,74 @@ public CoopShopFixture( coopShopSemester.getCoopShops().addAll(List.of(coopShop)); return coopShopSemesterRepository.save(coopShopSemester); } + + public CoopShopSemester 현재학기() { + var coopShopSemester = coopShopSemesterRepository.save( + CoopShopSemester.builder() + .semester("현재 학기") + .fromDate(LocalDate.of(2023, 12, 21)) + .toDate(LocalDate.of(2024, 2, 28)) + .build() + ); + + coopShopSemester.updateApply(true); + + var coopShop = CoopShop.builder() + .name(CAFETERIA.getCoopShopName()) + .location("학생회관 2층") + .phone("041-000-0000") + .remarks("연중무휴") + .semester(coopShopSemester) + .build(); + + coopShop.getCoopOpens().addAll( + List.of( + CoopOpen.builder() + .type("아침") + .openTime("08:30") + .closeTime("09:30") + .coopShop(coopShop) + .dayOfWeek(DayType.WEEKDAYS) + .build(), + CoopOpen.builder() + .type("점심") + .openTime("11:30") + .closeTime("13:30") + .coopShop(coopShop) + .dayOfWeek(DayType.WEEKDAYS) + .build(), + CoopOpen.builder() + .type("저녁") + .openTime("17:30") + .closeTime("18:30") + .coopShop(coopShop) + .dayOfWeek(DayType.WEEKDAYS) + .build(), + CoopOpen.builder() + .type("아침") + .openTime("미운영") + .closeTime("미운영") + .coopShop(coopShop) + .dayOfWeek(DayType.WEEKEND) + .build(), + CoopOpen.builder() + .type("점심") + .openTime("11:30") + .closeTime("13:30") + .coopShop(coopShop) + .dayOfWeek(DayType.WEEKEND) + .build(), + CoopOpen.builder() + .type("저녁") + .openTime("17:30") + .closeTime("18:30") + .coopShop(coopShop) + .dayOfWeek(DayType.WEEKEND) + .build() + ) + ); + + coopShopSemester.getCoopShops().addAll(List.of(coopShop)); + return coopShopSemesterRepository.save(coopShopSemester); + } }