From b8519ed8f33d977742c5c3642767a0d575a879be Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Mon, 11 Dec 2023 16:48:16 +0900 Subject: [PATCH 01/15] =?UTF-8?q?Refactor=20:=20DashBoardAccessService?= =?UTF-8?q?=EC=97=90=20=EC=9E=88=EB=8D=98=20=EA=B8=B0=EB=8A=A5=20Dashboard?= =?UTF-8?q?Service=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/DashboardReadService.java | 2 + .../dashboard/service/DashboardService.java | 43 +++++++++++++++++++ .../access/DashboardAccessService.java | 2 +- .../access/DashboardAccessServiceImpl.java | 2 +- .../DashboardScheduleAccessResult.java | 3 +- 5 files changed, 49 insertions(+), 3 deletions(-) rename src/main/java/org/guzzing/studayserver/domain/dashboard/service/{access/dto => dto/response}/DashboardScheduleAccessResult.java (65%) diff --git a/src/main/java/org/guzzing/studayserver/domain/dashboard/service/DashboardReadService.java b/src/main/java/org/guzzing/studayserver/domain/dashboard/service/DashboardReadService.java index c4f825871..b224aedd9 100644 --- a/src/main/java/org/guzzing/studayserver/domain/dashboard/service/DashboardReadService.java +++ b/src/main/java/org/guzzing/studayserver/domain/dashboard/service/DashboardReadService.java @@ -1,6 +1,7 @@ package org.guzzing.studayserver.domain.dashboard.service; import java.util.List; + import org.guzzing.studayserver.domain.dashboard.model.Dashboard; import org.guzzing.studayserver.domain.dashboard.repository.DashboardRepository; import org.guzzing.studayserver.domain.dashboard.service.dto.response.DashBoardFindByIdsResults; @@ -29,4 +30,5 @@ public DashBoardFindByIdsResults findByIds(List dashboardIds) { return new DashBoardFindByIdsResults(dashBoardFindByIdsResults); } + } diff --git a/src/main/java/org/guzzing/studayserver/domain/dashboard/service/DashboardService.java b/src/main/java/org/guzzing/studayserver/domain/dashboard/service/DashboardService.java index 35b0be69a..524b6209d 100644 --- a/src/main/java/org/guzzing/studayserver/domain/dashboard/service/DashboardService.java +++ b/src/main/java/org/guzzing/studayserver/domain/dashboard/service/DashboardService.java @@ -1,12 +1,18 @@ package org.guzzing.studayserver.domain.dashboard.service; import jakarta.persistence.EntityNotFoundException; + +import java.time.LocalTime; import java.util.List; import java.util.Map; + +import org.guzzing.studayserver.domain.calendar.model.Periodicity; import org.guzzing.studayserver.domain.dashboard.model.Dashboard; import org.guzzing.studayserver.domain.dashboard.model.vo.FeeInfo; import org.guzzing.studayserver.domain.dashboard.repository.DashboardRepository; import org.guzzing.studayserver.domain.dashboard.repository.DashboardScheduleJpaRepository; +import org.guzzing.studayserver.domain.dashboard.service.dto.response.DashboardScheduleAccessResult; +import org.guzzing.studayserver.domain.dashboard.service.access.dto.LessonScheduleAccessResult; import org.guzzing.studayserver.domain.dashboard.service.converter.DashboardServiceConverter; import org.guzzing.studayserver.domain.dashboard.service.dto.request.DashboardPostParam; import org.guzzing.studayserver.domain.dashboard.service.dto.request.DashboardPutParam; @@ -18,6 +24,7 @@ @Transactional(readOnly = true) public class DashboardService { + private static final String SEPARATOR = ":"; private final DashboardServiceConverter serviceConverter; private final DashboardRepository dashboardRepository; private final DashboardScheduleJpaRepository dashboardScheduleJpaRepository; @@ -92,4 +99,40 @@ private Dashboard findDashboardById(final Long dashboardId) { .orElseThrow(() -> new EntityNotFoundException("존재하는 대시보드가 없습니다.")); } + @Transactional(readOnly = true) + public DashboardScheduleAccessResult getDashboardSchedule(Long dashboardId) { + final DashboardResult result = findDashboard(dashboardId); + + final List schedules = result.scheduleInfos() + .schedules() + .stream() + .map(scheduleInfo -> new LessonScheduleAccessResult( + scheduleInfo.dayOfWeek(), + getTime(scheduleInfo.startTime()), + getTime((scheduleInfo.endTime())))) + .toList(); + + return new DashboardScheduleAccessResult( + result.childId(), + result.academyId(), + result.lessonId(), + Periodicity.WEEKLY, + schedules); + } + + private LocalTime getTime(final String time) { + String[] split = time.split(SEPARATOR); + try { + int hour = Integer.parseInt(split[0]); + int minute = Integer.parseInt(split[1]); + + return LocalTime.of(hour, minute); + + } catch (ArrayIndexOutOfBoundsException e) { + throw new IllegalArgumentException("유효하지 않은 시간입니다."); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("시간은 숫자여야 합니다."); + } + } + } diff --git a/src/main/java/org/guzzing/studayserver/domain/dashboard/service/access/DashboardAccessService.java b/src/main/java/org/guzzing/studayserver/domain/dashboard/service/access/DashboardAccessService.java index 08ef1a254..cee9970d1 100644 --- a/src/main/java/org/guzzing/studayserver/domain/dashboard/service/access/DashboardAccessService.java +++ b/src/main/java/org/guzzing/studayserver/domain/dashboard/service/access/DashboardAccessService.java @@ -1,6 +1,6 @@ package org.guzzing.studayserver.domain.dashboard.service.access; -import org.guzzing.studayserver.domain.dashboard.service.access.dto.DashboardScheduleAccessResult; +import org.guzzing.studayserver.domain.dashboard.service.dto.response.DashboardScheduleAccessResult; public interface DashboardAccessService { diff --git a/src/main/java/org/guzzing/studayserver/domain/dashboard/service/access/DashboardAccessServiceImpl.java b/src/main/java/org/guzzing/studayserver/domain/dashboard/service/access/DashboardAccessServiceImpl.java index a50651c9a..4c4125ace 100644 --- a/src/main/java/org/guzzing/studayserver/domain/dashboard/service/access/DashboardAccessServiceImpl.java +++ b/src/main/java/org/guzzing/studayserver/domain/dashboard/service/access/DashboardAccessServiceImpl.java @@ -6,7 +6,7 @@ import org.guzzing.studayserver.domain.calendar.model.Periodicity; import org.guzzing.studayserver.domain.child.service.ChildAccessService; import org.guzzing.studayserver.domain.dashboard.service.DashboardService; -import org.guzzing.studayserver.domain.dashboard.service.access.dto.DashboardScheduleAccessResult; +import org.guzzing.studayserver.domain.dashboard.service.dto.response.DashboardScheduleAccessResult; import org.guzzing.studayserver.domain.dashboard.service.access.dto.LessonScheduleAccessResult; import org.guzzing.studayserver.domain.dashboard.service.dto.response.DashboardResult; import org.springframework.stereotype.Service; diff --git a/src/main/java/org/guzzing/studayserver/domain/dashboard/service/access/dto/DashboardScheduleAccessResult.java b/src/main/java/org/guzzing/studayserver/domain/dashboard/service/dto/response/DashboardScheduleAccessResult.java similarity index 65% rename from src/main/java/org/guzzing/studayserver/domain/dashboard/service/access/dto/DashboardScheduleAccessResult.java rename to src/main/java/org/guzzing/studayserver/domain/dashboard/service/dto/response/DashboardScheduleAccessResult.java index 40e0d90f9..41d0c5655 100644 --- a/src/main/java/org/guzzing/studayserver/domain/dashboard/service/access/dto/DashboardScheduleAccessResult.java +++ b/src/main/java/org/guzzing/studayserver/domain/dashboard/service/dto/response/DashboardScheduleAccessResult.java @@ -1,7 +1,8 @@ -package org.guzzing.studayserver.domain.dashboard.service.access.dto; +package org.guzzing.studayserver.domain.dashboard.service.dto.response; import java.util.List; import org.guzzing.studayserver.domain.calendar.model.Periodicity; +import org.guzzing.studayserver.domain.dashboard.service.access.dto.LessonScheduleAccessResult; public record DashboardScheduleAccessResult( Long childId, From 2c53ebeaa8994c4aabd13e3a5d616072f19b566f Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Mon, 11 Dec 2023 16:49:30 +0900 Subject: [PATCH 02/15] =?UTF-8?q?Refactor=20:=20DashboardAccessService=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=84=9C?= =?UTF-8?q?=EB=B9=84=EC=8A=A4=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/AcademyCalendarService.java | 12 +++---- .../AcademyCalendarLoadToUpdateResult.java | 33 ++----------------- 2 files changed, 6 insertions(+), 39 deletions(-) diff --git a/src/main/java/org/guzzing/studayserver/domain/calendar/service/AcademyCalendarService.java b/src/main/java/org/guzzing/studayserver/domain/calendar/service/AcademyCalendarService.java index a6575c1b0..215e1a781 100644 --- a/src/main/java/org/guzzing/studayserver/domain/calendar/service/AcademyCalendarService.java +++ b/src/main/java/org/guzzing/studayserver/domain/calendar/service/AcademyCalendarService.java @@ -2,6 +2,7 @@ import java.time.LocalDate; import java.util.List; + import org.guzzing.studayserver.domain.calendar.model.AcademySchedule; import org.guzzing.studayserver.domain.calendar.model.AcademyTimeTemplate; import org.guzzing.studayserver.domain.calendar.repository.academyschedule.AcademyScheduleRepository; @@ -20,7 +21,7 @@ import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarLoadToUpdateResult; import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarUpdateResults; import org.guzzing.studayserver.domain.dashboard.service.access.DashboardAccessService; -import org.guzzing.studayserver.domain.dashboard.service.access.dto.DashboardScheduleAccessResult; +import org.guzzing.studayserver.domain.dashboard.service.dto.response.DashboardScheduleAccessResult; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -30,17 +31,14 @@ public class AcademyCalendarService { private final AcademyScheduleRepository academyScheduleRepository; private final AcademyTimeTemplateRepository academyTimeTemplateRepository; private final PeriodicStrategy periodicStrategy; - private final DashboardAccessService dashboardAccessService; public AcademyCalendarService( AcademyScheduleRepository academyScheduleRepository, AcademyTimeTemplateRepository academyTimeTemplateRepository, - PeriodicStrategy periodicStrategy, - DashboardAccessService dashboardAccessService) { + PeriodicStrategy periodicStrategy) { this.academyScheduleRepository = academyScheduleRepository; this.academyTimeTemplateRepository = academyTimeTemplateRepository; this.periodicStrategy = periodicStrategy; - this.dashboardAccessService = dashboardAccessService; } @Transactional @@ -125,10 +123,8 @@ private List generateAcademySchedules( public AcademyCalendarLoadToUpdateResult loadTimeTemplateToUpdate(Long academyScheduleId) { AcademyTimeTemplate academyTimeTemplate = academyScheduleRepository.findDistinctAcademyTimeTemplate( academyScheduleId); - DashboardScheduleAccessResult dashboardScheduleAccessResult = - dashboardAccessService.getDashboardSchedule(academyTimeTemplate.getDashboardId()); - return AcademyCalendarLoadToUpdateResult.of(academyTimeTemplate, dashboardScheduleAccessResult); + return AcademyCalendarLoadToUpdateResult.of(academyTimeTemplate); } @Transactional diff --git a/src/main/java/org/guzzing/studayserver/domain/calendar/service/dto/result/AcademyCalendarLoadToUpdateResult.java b/src/main/java/org/guzzing/studayserver/domain/calendar/service/dto/result/AcademyCalendarLoadToUpdateResult.java index fc4d0ad71..81770c3cc 100644 --- a/src/main/java/org/guzzing/studayserver/domain/calendar/service/dto/result/AcademyCalendarLoadToUpdateResult.java +++ b/src/main/java/org/guzzing/studayserver/domain/calendar/service/dto/result/AcademyCalendarLoadToUpdateResult.java @@ -5,36 +5,21 @@ import java.time.format.DateTimeFormatter; import java.util.List; import org.guzzing.studayserver.domain.calendar.model.AcademyTimeTemplate; -import org.guzzing.studayserver.domain.dashboard.service.access.dto.DashboardScheduleAccessResult; +import org.guzzing.studayserver.domain.dashboard.service.dto.response.DashboardScheduleAccessResult; import org.guzzing.studayserver.domain.dashboard.service.access.dto.LessonScheduleAccessResult; public record AcademyCalendarLoadToUpdateResult( - Long childId, - Long academyId, - Long lessonId, Long dashboardId, - List lessonScheduleAccessResults, LocalDate startDateOfAttendance, LocalDate endDateOfAttendance, boolean isAlarmed, String memo ) { - - private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm"); - public static AcademyCalendarLoadToUpdateResult of( - AcademyTimeTemplate academyTimeTemplate, - DashboardScheduleAccessResult dashboardScheduleAccessResult + AcademyTimeTemplate academyTimeTemplate ) { return new AcademyCalendarLoadToUpdateResult( - dashboardScheduleAccessResult.childId(), - dashboardScheduleAccessResult.academyId(), - dashboardScheduleAccessResult.lessonId(), academyTimeTemplate.getDashboardId(), - dashboardScheduleAccessResult.lessonScheduleInAccessResponses() - .stream() - .map(lessonScheduleAccessResult -> LessonScheduleInfo.from(lessonScheduleAccessResult)) - .toList(), academyTimeTemplate.getStartDateOfAttendance(), academyTimeTemplate.getEndDateOfAttendance(), academyTimeTemplate.isAlarmed(), @@ -42,18 +27,4 @@ public static AcademyCalendarLoadToUpdateResult of( ); } - public record LessonScheduleInfo( - DayOfWeek dayOfWeek, - String lessonStartTime, - String lessonEndTime - ) { - - public static LessonScheduleInfo from(LessonScheduleAccessResult lessonScheduleAccessResult) { - return new LessonScheduleInfo( - lessonScheduleAccessResult.dayOfWeek(), - lessonScheduleAccessResult.lessonStartTime().format(TIME_FORMATTER), - lessonScheduleAccessResult.lessonEndTime().format(TIME_FORMATTER) - ); - } - } } From 9de1a8f8a8a51eb2fbab361a14baeba718f778ac Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Mon, 11 Dec 2023 16:50:07 +0900 Subject: [PATCH 03/15] =?UTF-8?q?Test=20:=20DashboardAccessService=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/AcademyCalendarServiceTest.java | 32 ++----------------- 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/src/test/java/org/guzzing/studayserver/domain/calendar/service/AcademyCalendarServiceTest.java b/src/test/java/org/guzzing/studayserver/domain/calendar/service/AcademyCalendarServiceTest.java index 291de38d2..22e7fab96 100644 --- a/src/test/java/org/guzzing/studayserver/domain/calendar/service/AcademyCalendarServiceTest.java +++ b/src/test/java/org/guzzing/studayserver/domain/calendar/service/AcademyCalendarServiceTest.java @@ -25,7 +25,7 @@ import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarDetailResult; import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarLoadToUpdateResult; import org.guzzing.studayserver.domain.dashboard.service.access.DashboardAccessService; -import org.guzzing.studayserver.domain.dashboard.service.access.dto.DashboardScheduleAccessResult; +import org.guzzing.studayserver.domain.dashboard.service.dto.response.DashboardScheduleAccessResult; import org.guzzing.studayserver.global.error.response.ErrorCode; import org.guzzing.studayserver.testutil.fixture.academycalender.AcademyCalenderFixture; import org.junit.jupiter.api.DisplayName; @@ -33,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; @Transactional @@ -51,9 +52,6 @@ class AcademyCalendarServiceTest { @Autowired private PeriodicStrategy periodicStrategy; - @MockBean - private DashboardAccessService dashboardAccessService; - @Test @DisplayName("대시보드를 통해 가져온 학원 일정 정보를 바탕으로 학원 스케줄을 생성하고 그 범위 이내에 올바르게 생성되는지 확인한다.") void createSchedules_success() { @@ -142,21 +140,12 @@ void loadTimeTemplateToUpdate() { ); Long academyScheduleId = savedFridayAcademySchedule.getId(); - DashboardScheduleAccessResult mockDashboardScheduleAccessResult = AcademyCalenderFixture.dashboardScheduleAccessResult(); - - given(dashboardAccessService.getDashboardSchedule(savedFridayAcademyTimeTemplate.getDashboardId())).willReturn( - mockDashboardScheduleAccessResult); //When AcademyCalendarLoadToUpdateResult academyCalendarLoadToUpdateResult = academyCalendarService.loadTimeTemplateToUpdate( academyScheduleId); //Then - DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm"); - assertThat(academyCalendarLoadToUpdateResult.academyId()).isEqualTo( - mockDashboardScheduleAccessResult.academyId()); - assertThat(academyCalendarLoadToUpdateResult.lessonId()).isEqualTo( - mockDashboardScheduleAccessResult.lessonId()); assertThat(academyCalendarLoadToUpdateResult.startDateOfAttendance()).isEqualTo( savedFridayAcademyTimeTemplate.getStartDateOfAttendance()); assertThat(academyCalendarLoadToUpdateResult.startDateOfAttendance()).isEqualTo( @@ -169,23 +158,6 @@ void loadTimeTemplateToUpdate() { assertThat(academyCalendarLoadToUpdateResult.memo()).isEqualTo(savedMondayAcademyTimeTemplate.getMemo()); assertThat(academyCalendarLoadToUpdateResult.isAlarmed()).isEqualTo(savedFridayAcademyTimeTemplate.isAlarmed()); assertThat(academyCalendarLoadToUpdateResult.isAlarmed()).isEqualTo(savedMondayAcademyTimeTemplate.isAlarmed()); - - academyCalendarLoadToUpdateResult.lessonScheduleAccessResults() - .forEach(lessonScheduleAccessResult -> { - if (lessonScheduleAccessResult.dayOfWeek() == DayOfWeek.MONDAY) { - assertThat(lessonScheduleAccessResult.lessonEndTime()).isEqualTo( - savedMondayAcademySchedule.getLessonEndTime().format(timeFormatter)); - assertThat(lessonScheduleAccessResult.lessonStartTime()).isEqualTo( - savedMondayAcademySchedule.getLessonStartTime().format(timeFormatter)); - } - - if (lessonScheduleAccessResult.dayOfWeek() == DayOfWeek.FRIDAY) { - assertThat(lessonScheduleAccessResult.lessonEndTime()).isEqualTo( - savedFridayAcademySchedule.getLessonEndTime().format(timeFormatter)); - assertThat(lessonScheduleAccessResult.lessonStartTime()).isEqualTo( - savedFridayAcademySchedule.getLessonStartTime().format(timeFormatter)); - } - }); } @Test From b860d2ec853cd31836a2a1875c723852ccab4c2b Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Mon, 11 Dec 2023 16:50:59 +0900 Subject: [PATCH 04/15] =?UTF-8?q?Feat=20:=20=ED=95=99=EC=9B=90=20=EC=8A=A4?= =?UTF-8?q?=EC=BC=80=EC=A4=84=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=84=B0=20?= =?UTF-8?q?=EC=A0=84=20=EA=B8=B0=EC=A1=B4=20=EA=B8=80=20=EB=B6=88=EB=9F=AC?= =?UTF-8?q?=EC=98=A4=EA=B8=B0=20=ED=8D=BC=EC=82=AC=ED=8A=B8=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../facade/AcademyCalendarFacade.java | 20 ++++++- ...ademyScheduleLoadToUpdateFacadeResult.java | 60 +++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/guzzing/studayserver/domain/calendar/facade/dto/AcademyScheduleLoadToUpdateFacadeResult.java diff --git a/src/main/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacade.java b/src/main/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacade.java index 1172d49c3..8fcc4d449 100644 --- a/src/main/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacade.java +++ b/src/main/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacade.java @@ -4,11 +4,16 @@ import org.guzzing.studayserver.domain.academy.service.dto.result.AcademyAndLessonDetailResult; import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyCalendarDetailFacadeParam; import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyCalendarDetailFacadeResult; +import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyScheduleLoadToUpdateFacadeResult; import org.guzzing.studayserver.domain.calendar.service.AcademyCalendarService; import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarDetailResult; +import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarLoadToUpdateResult; import org.guzzing.studayserver.domain.child.service.ChildAccessService; import org.guzzing.studayserver.domain.child.service.result.AcademyCalendarDetailChildInfo; +import org.guzzing.studayserver.domain.dashboard.service.DashboardService; +import org.guzzing.studayserver.domain.dashboard.service.dto.response.DashboardScheduleAccessResult; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service public class AcademyCalendarFacade { @@ -16,14 +21,17 @@ public class AcademyCalendarFacade { private final AcademyAccessService academyService; private final ChildAccessService childService; private final AcademyCalendarService academyCalendarService; + private final DashboardService dashboardService; public AcademyCalendarFacade(AcademyAccessService academyService, ChildAccessService childService, - AcademyCalendarService academyCalendarService) { + AcademyCalendarService academyCalendarService, DashboardService dashboardService) { this.academyService = academyService; this.childService = childService; this.academyCalendarService = academyCalendarService; + this.dashboardService = dashboardService; } + @Transactional(readOnly = true) public AcademyCalendarDetailFacadeResult getCalendarDetailInfo(AcademyCalendarDetailFacadeParam param) { AcademyAndLessonDetailResult academyAndLessonDetailResult = academyService.getAcademyAndLessonDetail( param.lessonId()); @@ -41,4 +49,14 @@ public AcademyCalendarDetailFacadeResult getCalendarDetailInfo(AcademyCalendarDe } + @Transactional(readOnly = true) + public AcademyScheduleLoadToUpdateFacadeResult loadTimeTemplateToUpdate(Long academyScheduleId) { + AcademyCalendarLoadToUpdateResult academyCalendarLoadToUpdateResult = academyCalendarService.loadTimeTemplateToUpdate(academyScheduleId); + DashboardScheduleAccessResult dashboardScheduleAccessResult = dashboardService.getDashboardSchedule(academyCalendarLoadToUpdateResult.dashboardId()); + + return AcademyScheduleLoadToUpdateFacadeResult.from( + academyCalendarLoadToUpdateResult, + dashboardScheduleAccessResult); + } + } diff --git a/src/main/java/org/guzzing/studayserver/domain/calendar/facade/dto/AcademyScheduleLoadToUpdateFacadeResult.java b/src/main/java/org/guzzing/studayserver/domain/calendar/facade/dto/AcademyScheduleLoadToUpdateFacadeResult.java new file mode 100644 index 000000000..59398a9f4 --- /dev/null +++ b/src/main/java/org/guzzing/studayserver/domain/calendar/facade/dto/AcademyScheduleLoadToUpdateFacadeResult.java @@ -0,0 +1,60 @@ +package org.guzzing.studayserver.domain.calendar.facade.dto; + +import org.guzzing.studayserver.domain.calendar.controller.dto.response.AcademyCalendarLoadToUpdateResponse; +import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarLoadToUpdateResult; +import org.guzzing.studayserver.domain.dashboard.service.access.dto.LessonScheduleAccessResult; +import org.guzzing.studayserver.domain.dashboard.service.dto.response.DashboardScheduleAccessResult; + +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; + +public record AcademyScheduleLoadToUpdateFacadeResult( + Long childId, + Long academyId, + Long lessonId, + Long dashboardId, + List lessonSchedule, + LocalDate startDateOfAttendance, + LocalDate endDateOfAttendance, + boolean isAlarmed, + String memo +) { + private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("HH:mm"); + + public static AcademyScheduleLoadToUpdateFacadeResult from( + AcademyCalendarLoadToUpdateResult academyCalendarLoadToUpdateResult, + DashboardScheduleAccessResult dashboardScheduleAccessResult + ) { + return new AcademyScheduleLoadToUpdateFacadeResult( + dashboardScheduleAccessResult.childId(), + dashboardScheduleAccessResult.academyId(), + dashboardScheduleAccessResult.lessonId(), + academyCalendarLoadToUpdateResult.dashboardId(), + dashboardScheduleAccessResult.lessonScheduleInAccessResponses() + .stream() + .map(LessonScheduleInfo::from) + .toList(), + academyCalendarLoadToUpdateResult.startDateOfAttendance(), + academyCalendarLoadToUpdateResult.endDateOfAttendance(), + academyCalendarLoadToUpdateResult.isAlarmed(), + academyCalendarLoadToUpdateResult.memo() + ); + } + + public record LessonScheduleInfo( + DayOfWeek dayOfWeek, + String lessonStartTime, + String lessonEndTime + ) { + + public static LessonScheduleInfo from(LessonScheduleAccessResult lessonScheduleAccessResult) { + return new LessonScheduleInfo( + lessonScheduleAccessResult.dayOfWeek(), + lessonScheduleAccessResult.lessonStartTime().format(TIME_FORMATTER), + lessonScheduleAccessResult.lessonEndTime().format(TIME_FORMATTER) + ); + } + } +} From 4a116bd2779073cf30c49312e662a28ac0406def Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Mon, 11 Dec 2023 16:53:08 +0900 Subject: [PATCH 05/15] =?UTF-8?q?Test=20:=20=ED=95=99=EC=9B=90=20=EC=8A=A4?= =?UTF-8?q?=EC=BC=80=EC=A4=84=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EC=A0=84=20=EA=B8=B0=EC=A1=B4=20=EA=B8=80=20=EB=B6=88=EB=9F=AC?= =?UTF-8?q?=EC=98=A4=EA=B8=B0=20=ED=8D=BC=EC=82=AC=EB=93=9C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../facade/AcademyCalendarFacadeTest.java | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/test/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacadeTest.java diff --git a/src/test/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacadeTest.java b/src/test/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacadeTest.java new file mode 100644 index 000000000..b1ad9c3a1 --- /dev/null +++ b/src/test/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacadeTest.java @@ -0,0 +1,81 @@ +package org.guzzing.studayserver.domain.calendar.facade; + +import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyScheduleLoadToUpdateFacadeResult; +import org.guzzing.studayserver.domain.calendar.model.AcademySchedule; +import org.guzzing.studayserver.domain.calendar.model.AcademyTimeTemplate; +import org.guzzing.studayserver.domain.calendar.repository.academyschedule.AcademyScheduleRepository; +import org.guzzing.studayserver.domain.calendar.repository.academytimetemplate.AcademyTimeTemplateRepository; +import org.guzzing.studayserver.domain.calendar.service.AcademyCalendarService; +import org.guzzing.studayserver.domain.calendar.service.dto.param.AcademyCalendarCreateParam; +import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarCreateResults; +import org.guzzing.studayserver.domain.dashboard.fixture.DashboardFixture; +import org.guzzing.studayserver.domain.dashboard.model.Dashboard; +import org.guzzing.studayserver.domain.dashboard.repository.DashboardRepository; +import org.guzzing.studayserver.testutil.fixture.academycalender.AcademyCalenderFixture; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertAll; +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; + +@Transactional +@SpringBootTest(webEnvironment = NONE) +public class AcademyCalendarFacadeTest { + @Autowired + private DashboardRepository dashboardRepository; + + @Autowired + private DashboardFixture dashboardFixture; + + @Autowired + private AcademyTimeTemplateRepository academyTimeTemplateRepository; + + @Autowired + private AcademyScheduleRepository academyScheduleRepository; + + @Autowired + private AcademyCalendarFacade academyCalendarFacade; + + @Autowired + private AcademyCalendarService academyCalendarService; + + @Test + @DisplayName("스케줄 업데이트 전 기존 글을 불러올 때 해당 스케줄에 대한 정보와 대시보드에 대한 정보가 올바르게 반환되는지 확인한다.") + void loadTimeTemplateToUpdate() { + //Given + Dashboard savedDashboard = dashboardRepository.save(dashboardFixture.makeEntity()); + + AcademyCalendarCreateParam academyCalendarCreateParam = + AcademyCalenderFixture.firstChildAcademyCalenderCreateParam(); + AcademyCalendarCreateResults createdTimeTemplates = academyCalendarService.createSchedules(academyCalendarCreateParam); + + Long timeTemplateId = createdTimeTemplates.academyTimeTemplateIds().get(0); + AcademyTimeTemplate academyTimeTemplate = academyTimeTemplateRepository.getById(timeTemplateId); + List academySchedules = academyScheduleRepository.findByAcademyTimeTemplateId(timeTemplateId); + AcademySchedule academySchedule = academySchedules.get(0); + Long scheduleId = academySchedule.getId(); + + //When + AcademyScheduleLoadToUpdateFacadeResult academyScheduleLoadToUpdateFacadeResult + = academyCalendarFacade.loadTimeTemplateToUpdate(scheduleId); + + //Then + assertAll("AcademySchedule Load To Update", + () -> assertThat(academyScheduleLoadToUpdateFacadeResult.academyId()).isEqualTo(savedDashboard.getAcademyId()), + () -> assertThat(academyScheduleLoadToUpdateFacadeResult.childId()).isEqualTo(savedDashboard.getChildId()), + () -> assertThat(academyScheduleLoadToUpdateFacadeResult.dashboardId()).isEqualTo(savedDashboard.getId()), + () -> assertThat(academyScheduleLoadToUpdateFacadeResult.lessonId()).isEqualTo(savedDashboard.getLessonId()), + () -> assertThat(academyScheduleLoadToUpdateFacadeResult.endDateOfAttendance()).isEqualTo(academyTimeTemplate.getEndDateOfAttendance()), + () -> assertThat(academyScheduleLoadToUpdateFacadeResult.startDateOfAttendance()).isEqualTo(academyTimeTemplate.getStartDateOfAttendance()), + () -> assertThat(academyScheduleLoadToUpdateFacadeResult.memo()).isEqualTo(academyTimeTemplate.getMemo()) + ); + } + + +} From 9e5b87d7eb91a0d8812c53dac3875bc4abdb3447 Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Mon, 11 Dec 2023 16:55:18 +0900 Subject: [PATCH 06/15] =?UTF-8?q?Refactor=20:=20=ED=95=99=EC=9B=90=20?= =?UTF-8?q?=EC=8A=A4=EC=BC=80=EC=A4=84=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8=20=EC=A0=84=20=EA=B8=B0=EC=A1=B4=EA=B8=80=20=EB=B6=88?= =?UTF-8?q?=EB=9F=AC=EC=98=A4=EA=B8=B0=20=ED=8D=BC=EC=82=AC=ED=8A=B8=20?= =?UTF-8?q?=ED=8C=A8=ED=84=B4=20=EB=8F=84=EC=9E=85=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B8=ED=95=9C=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AcademyCalendarController.java | 9 +++++---- .../AcademyCalendarLoadToUpdateResponse.java | 13 +++++++------ 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/guzzing/studayserver/domain/calendar/controller/AcademyCalendarController.java b/src/main/java/org/guzzing/studayserver/domain/calendar/controller/AcademyCalendarController.java index 18fae99fb..854fc3f95 100644 --- a/src/main/java/org/guzzing/studayserver/domain/calendar/controller/AcademyCalendarController.java +++ b/src/main/java/org/guzzing/studayserver/domain/calendar/controller/AcademyCalendarController.java @@ -12,6 +12,7 @@ import org.guzzing.studayserver.domain.calendar.controller.dto.response.AcademyCalendarUpdateResponse; import org.guzzing.studayserver.domain.calendar.facade.AcademyCalendarFacade; import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyCalendarDetailFacadeResult; +import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyScheduleLoadToUpdateFacadeResult; import org.guzzing.studayserver.domain.calendar.service.AcademyCalendarService; import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarCreateResults; import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarLoadToUpdateResult; @@ -38,7 +39,7 @@ public class AcademyCalendarController { private final AcademyCalendarFacade academyCalendarFacade; public AcademyCalendarController(AcademyCalendarService academyCalendarService, - AcademyCalendarFacade academyCalendarFacade) { + AcademyCalendarFacade academyCalendarFacade) { this.academyCalendarService = academyCalendarService; this.academyCalendarFacade = academyCalendarFacade; } @@ -65,12 +66,12 @@ public ResponseEntity createAcademyCalendar( public ResponseEntity loadTimeTemplateToUpdate( @PathVariable Long academyScheduleId) { - AcademyCalendarLoadToUpdateResult academyCalendarLoadToUpdateResult = academyCalendarService.loadTimeTemplateToUpdate( - academyScheduleId); + AcademyScheduleLoadToUpdateFacadeResult academyScheduleLoadToUpdateFacadeResult + = academyCalendarFacade.loadTimeTemplateToUpdate(academyScheduleId); return ResponseEntity .status(HttpStatus.OK) - .body(AcademyCalendarLoadToUpdateResponse.from(academyCalendarLoadToUpdateResult)); + .body(AcademyCalendarLoadToUpdateResponse.from(academyScheduleLoadToUpdateFacadeResult)); } @PutMapping( diff --git a/src/main/java/org/guzzing/studayserver/domain/calendar/controller/dto/response/AcademyCalendarLoadToUpdateResponse.java b/src/main/java/org/guzzing/studayserver/domain/calendar/controller/dto/response/AcademyCalendarLoadToUpdateResponse.java index 19a06d890..70b50af65 100644 --- a/src/main/java/org/guzzing/studayserver/domain/calendar/controller/dto/response/AcademyCalendarLoadToUpdateResponse.java +++ b/src/main/java/org/guzzing/studayserver/domain/calendar/controller/dto/response/AcademyCalendarLoadToUpdateResponse.java @@ -3,7 +3,8 @@ import java.time.DayOfWeek; import java.time.LocalDate; import java.util.List; -import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarLoadToUpdateResult; + +import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyScheduleLoadToUpdateFacadeResult; public record AcademyCalendarLoadToUpdateResponse( Long childId, @@ -17,15 +18,14 @@ public record AcademyCalendarLoadToUpdateResponse( String memo ) { - public static AcademyCalendarLoadToUpdateResponse from(AcademyCalendarLoadToUpdateResult result) { + public static AcademyCalendarLoadToUpdateResponse from(AcademyScheduleLoadToUpdateFacadeResult result) { return new AcademyCalendarLoadToUpdateResponse( result.childId(), result.academyId(), result.lessonId(), result.dashboardId(), - result.lessonScheduleAccessResults().stream() - .map(lessonScheduleAccessResult -> - LessonScheduleLoadToUpdateResponse.from(lessonScheduleAccessResult)) + result.lessonSchedule().stream() + .map(LessonScheduleLoadToUpdateResponse::from) .toList(), result.startDateOfAttendance(), result.endDateOfAttendance(), @@ -40,7 +40,7 @@ public record LessonScheduleLoadToUpdateResponse( ) { public static LessonScheduleLoadToUpdateResponse from( - AcademyCalendarLoadToUpdateResult.LessonScheduleInfo result) { + AcademyScheduleLoadToUpdateFacadeResult.LessonScheduleInfo result) { return new LessonScheduleLoadToUpdateResponse( result.dayOfWeek(), new LessonTime( @@ -56,4 +56,5 @@ public record LessonTime( } } + } From 7b96eaa58c0c348023643f67ae0a2ce76812841d Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Mon, 11 Dec 2023 16:55:37 +0900 Subject: [PATCH 07/15] =?UTF-8?q?Style=20:=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99=EC=9C=BC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fixture/academycalender/AcademyCalenderFixture.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/test/java/org/guzzing/studayserver/testutil/fixture/academycalender/AcademyCalenderFixture.java b/src/test/java/org/guzzing/studayserver/testutil/fixture/academycalender/AcademyCalenderFixture.java index ecd202144..c2a59af29 100644 --- a/src/test/java/org/guzzing/studayserver/testutil/fixture/academycalender/AcademyCalenderFixture.java +++ b/src/test/java/org/guzzing/studayserver/testutil/fixture/academycalender/AcademyCalenderFixture.java @@ -16,7 +16,7 @@ import org.guzzing.studayserver.domain.calendar.service.dto.param.AcademyCalendarDeleteParam; import org.guzzing.studayserver.domain.calendar.service.dto.param.AcademyCalendarUpdateParam; import org.guzzing.studayserver.domain.calendar.service.dto.param.LessonScheduleParam; -import org.guzzing.studayserver.domain.dashboard.service.access.dto.DashboardScheduleAccessResult; +import org.guzzing.studayserver.domain.dashboard.service.dto.response.DashboardScheduleAccessResult; import org.guzzing.studayserver.domain.dashboard.service.access.dto.LessonScheduleAccessResult; public class AcademyCalenderFixture { @@ -27,9 +27,7 @@ public class AcademyCalenderFixture { private static final LocalDate END_DATE_OF_ATTENDANCE_WITH_TWO_DAYS = LocalDate.of(2023, 11, 21); private static final Periodicity WEEKLY_PERIODICITY = Periodicity.WEEKLY; private static final Long FIRST_CHILD_ID = 1L; - private static final Long SECOND_CHILD_ID = 2L; private static final Long FIRST_CHILD_DASH_BOARD_ID = 1L; - private static final Long SECOND_CHILD_DASH_BOARD_ID = 2L; private static final LessonTime LESSON_TIME = new LessonTime("18:00", "20:00"); public static AcademyCalendarCreateRequest.LessonScheduleCreateRequest mondayLessonScheduleCreateRequest() { From f3b0e64e984e45f82170c9a2ea8b73715e77d2e5 Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Mon, 11 Dec 2023 19:45:49 +0900 Subject: [PATCH 08/15] =?UTF-8?q?Test=20:=20=EC=8A=A4=EC=BC=80=EC=A4=84=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=EC=A1=B0=ED=9A=8C=20=ED=8D=BC=EC=82=AC?= =?UTF-8?q?=ED=8A=B8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../facade/AcademyCalendarFacadeTest.java | 104 ++++++++++++++++-- .../testutil/fixture/child/ChildFixture.java | 14 +++ 2 files changed, 108 insertions(+), 10 deletions(-) create mode 100644 src/test/java/org/guzzing/studayserver/testutil/fixture/child/ChildFixture.java diff --git a/src/test/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacadeTest.java b/src/test/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacadeTest.java index b1ad9c3a1..6ca2a17d4 100644 --- a/src/test/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacadeTest.java +++ b/src/test/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacadeTest.java @@ -1,5 +1,12 @@ package org.guzzing.studayserver.domain.calendar.facade; +import org.guzzing.studayserver.domain.academy.model.Academy; +import org.guzzing.studayserver.domain.academy.model.Lesson; +import org.guzzing.studayserver.domain.academy.repository.academy.AcademyRepository; +import org.guzzing.studayserver.domain.academy.repository.lesson.LessonRepository; +import org.guzzing.studayserver.domain.academy.service.dto.result.AcademyAndLessonDetailResult; +import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyCalendarDetailFacadeParam; +import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyCalendarDetailFacadeResult; import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyScheduleLoadToUpdateFacadeResult; import org.guzzing.studayserver.domain.calendar.model.AcademySchedule; import org.guzzing.studayserver.domain.calendar.model.AcademyTimeTemplate; @@ -8,24 +15,37 @@ import org.guzzing.studayserver.domain.calendar.service.AcademyCalendarService; import org.guzzing.studayserver.domain.calendar.service.dto.param.AcademyCalendarCreateParam; import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarCreateResults; +import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarDetailResult; +import org.guzzing.studayserver.domain.child.model.Child; +import org.guzzing.studayserver.domain.child.repository.ChildRepository; +import org.guzzing.studayserver.domain.child.service.result.AcademyCalendarDetailChildInfo; import org.guzzing.studayserver.domain.dashboard.fixture.DashboardFixture; import org.guzzing.studayserver.domain.dashboard.model.Dashboard; import org.guzzing.studayserver.domain.dashboard.repository.DashboardRepository; +import org.guzzing.studayserver.domain.member.model.Member; +import org.guzzing.studayserver.domain.member.repository.MemberRepository; +import org.guzzing.studayserver.testutil.fixture.academy.AcademyFixture; import org.guzzing.studayserver.testutil.fixture.academycalender.AcademyCalenderFixture; +import org.guzzing.studayserver.testutil.fixture.child.ChildFixture; +import org.guzzing.studayserver.testutil.fixture.member.MemberFixture; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; import java.util.List; +import static org.assertj.core.api.Assertions.as; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; @Transactional @SpringBootTest(webEnvironment = NONE) +@ActiveProfiles({"dev","oauth"}) public class AcademyCalendarFacadeTest { @Autowired private DashboardRepository dashboardRepository; @@ -39,27 +59,48 @@ public class AcademyCalendarFacadeTest { @Autowired private AcademyScheduleRepository academyScheduleRepository; + @Autowired + private LessonRepository lessonRepository; + + @Autowired + private AcademyRepository academyRepository; + + @Autowired + private ChildRepository childRepository; + + @Autowired + private MemberRepository memberRepository; + @Autowired private AcademyCalendarFacade academyCalendarFacade; @Autowired private AcademyCalendarService academyCalendarService; - @Test - @DisplayName("스케줄 업데이트 전 기존 글을 불러올 때 해당 스케줄에 대한 정보와 대시보드에 대한 정보가 올바르게 반환되는지 확인한다.") - void loadTimeTemplateToUpdate() { - //Given - Dashboard savedDashboard = dashboardRepository.save(dashboardFixture.makeEntity()); + private Long timeTemplateId; + private Long scheduleId; + private AcademyTimeTemplate academyTimeTemplate; + private AcademySchedule academySchedule; + private List academySchedules; + @BeforeEach + void setUp() { AcademyCalendarCreateParam academyCalendarCreateParam = AcademyCalenderFixture.firstChildAcademyCalenderCreateParam(); AcademyCalendarCreateResults createdTimeTemplates = academyCalendarService.createSchedules(academyCalendarCreateParam); - Long timeTemplateId = createdTimeTemplates.academyTimeTemplateIds().get(0); - AcademyTimeTemplate academyTimeTemplate = academyTimeTemplateRepository.getById(timeTemplateId); - List academySchedules = academyScheduleRepository.findByAcademyTimeTemplateId(timeTemplateId); - AcademySchedule academySchedule = academySchedules.get(0); - Long scheduleId = academySchedule.getId(); + timeTemplateId = createdTimeTemplates.academyTimeTemplateIds().get(0); + academyTimeTemplate = academyTimeTemplateRepository.getById(timeTemplateId); + academySchedules = academyScheduleRepository.findByAcademyTimeTemplateId(timeTemplateId); + academySchedule = academySchedules.get(0); + scheduleId = academySchedule.getId(); + } + + @Test + @DisplayName("스케줄 업데이트 전 기존 글을 불러올 때 해당 스케줄에 대한 정보와 대시보드에 대한 정보가 올바르게 반환되는지 확인한다.") + void loadTimeTemplateToUpdate_existedScheduleInfo_success() { + //Given + Dashboard savedDashboard = dashboardRepository.save(dashboardFixture.makeEntity()); //When AcademyScheduleLoadToUpdateFacadeResult academyScheduleLoadToUpdateFacadeResult @@ -77,5 +118,48 @@ void loadTimeTemplateToUpdate() { ); } + @Test + @DisplayName("스케줄 상세보기시 아이에 대한 정보와 학원 수업에 대한 정보를 올바르게 반환하는지 확인한다.") + void getCalendarDetailInfo_academyAndChildInfoAndSchedule_success() { + //Given + String imageUrlPrefix = "https://team09-resources-bucket.s3.ap-northeast-1.amazonaws.com/"; + + Academy academyAboutSungnam = AcademyFixture.academySungnam(); + academyAboutSungnam.changeEducationFee(100000L); + Academy savedAcademyAboutSungnam = academyRepository.save(academyAboutSungnam); + Lesson lessonAboutSungnam = AcademyFixture.lessonForSunganm(savedAcademyAboutSungnam); + Lesson savedALessonAboutSungnam = lessonRepository.save(lessonAboutSungnam); + + Member savedMember = memberRepository.save(MemberFixture.member()); + Child child = ChildFixture.child(); + child.assignToNewMemberOnly(savedMember); + Child savedChild = childRepository.save(child); + + AcademyCalendarDetailFacadeParam academyCalendarDetailFacadeParam + = new AcademyCalendarDetailFacadeParam( + savedALessonAboutSungnam.getId(), + savedChild.getId(), + scheduleId); + + //When + AcademyCalendarDetailFacadeResult calendarDetailInfo + = academyCalendarFacade.getCalendarDetailInfo(academyCalendarDetailFacadeParam); + + //Then + assertAll("AcademyCalendar Detail", + () -> assertThat(calendarDetailInfo.childrenInfo().childId()).isEqualTo(savedChild.getId()), + () -> assertThat(calendarDetailInfo.childrenInfo().memo()).isEqualTo(academyTimeTemplate.getMemo()), + () -> assertThat(calendarDetailInfo.childrenInfo().childName()).isEqualTo(savedChild.getNickName()), + () -> assertThat(calendarDetailInfo.childrenInfo().imageUrl()).isEqualTo(imageUrlPrefix+savedChild.getProfileImageURIPath()), + () -> assertThat(calendarDetailInfo.childrenInfo().dashBoardId()).isEqualTo(academyTimeTemplate.getDashboardId()), + () -> assertThat(calendarDetailInfo.lessonInfo().lessonName()).isEqualTo(savedALessonAboutSungnam.getCurriculum()), + () -> assertThat(calendarDetailInfo.lessonInfo().lessonTimes().endTime()).isEqualTo(academySchedule.getLessonEndTime().toString()), + () -> assertThat(calendarDetailInfo.lessonInfo().lessonTimes().startTime()).isEqualTo(academySchedule.getLessonStartTime().toString()), + () -> assertThat(calendarDetailInfo.lessonInfo().capacity()).isEqualTo(savedALessonAboutSungnam.getCapacity()), + () -> assertThat(calendarDetailInfo.lessonInfo().totalFee()).isEqualTo(savedALessonAboutSungnam.getTotalFee()), + () -> assertThat(calendarDetailInfo.academyInfoAboutScheduleDetail().academyName()).isEqualTo(savedAcademyAboutSungnam.getAcademyName()), + () -> assertThat(calendarDetailInfo.academyInfoAboutScheduleDetail().address()).isEqualTo(savedAcademyAboutSungnam.getFullAddress()) + ); + } } diff --git a/src/test/java/org/guzzing/studayserver/testutil/fixture/child/ChildFixture.java b/src/test/java/org/guzzing/studayserver/testutil/fixture/child/ChildFixture.java new file mode 100644 index 000000000..7d7f21897 --- /dev/null +++ b/src/test/java/org/guzzing/studayserver/testutil/fixture/child/ChildFixture.java @@ -0,0 +1,14 @@ +package org.guzzing.studayserver.testutil.fixture.child; + +import org.guzzing.studayserver.domain.child.model.Child; + +public class ChildFixture { + + public static Child child() { + return new Child( + "김별", + "초등학교 1학년", + "aakdjlaf.com" + ); + } +} From d05b5d89926f5e7a581f39f650e58006a6d7b46f Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Tue, 12 Dec 2023 13:38:15 +0900 Subject: [PATCH 09/15] =?UTF-8?q?Refactor=20:=20=EC=9E=90=EB=8F=99=20no-st?= =?UTF-8?q?ore=EC=9D=B4=20=EC=84=A4=EC=A0=95=EB=90=98=EC=96=B4=20Etag?= =?UTF-8?q?=EB=A5=BC=20=EC=A0=81=EC=9A=A9=ED=95=98=EA=B8=B0=20=EC=9C=84?= =?UTF-8?q?=ED=95=B4=20cache-control=20no-cache=EB=A1=9C=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/academy/controller/AcademyController.java | 6 ++++++ .../calendarInfo/controller/CalendarRestController.java | 3 +++ .../domain/child/controller/ChildRestController.java | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/src/main/java/org/guzzing/studayserver/domain/academy/controller/AcademyController.java b/src/main/java/org/guzzing/studayserver/domain/academy/controller/AcademyController.java index 00fbff400..ec325377d 100644 --- a/src/main/java/org/guzzing/studayserver/domain/academy/controller/AcademyController.java +++ b/src/main/java/org/guzzing/studayserver/domain/academy/controller/AcademyController.java @@ -18,6 +18,7 @@ import org.guzzing.studayserver.domain.academy.service.dto.result.AcademiesFilterWithScrollResults; import org.guzzing.studayserver.domain.academy.service.dto.result.LessonInfoToCreateDashboardResults; import org.guzzing.studayserver.domain.auth.memberId.MemberId; +import org.springframework.http.CacheControl; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -49,6 +50,7 @@ public ResponseEntity getAcademy( AcademyDetailFacadeResult detailAcademy = academyFacade.getDetailAcademy(AcademyDetailFacadeParam.of(memberId, academyId)); return ResponseEntity.status(HttpStatus.OK) + .cacheControl(CacheControl.noCache()) .body(AcademyGetResponse.from(detailAcademy)); } @@ -63,6 +65,7 @@ public ResponseEntity findByLocationWith AcademyByLocationWithScrollRequest.to(request, memberId)); return ResponseEntity.status(HttpStatus.OK) + .cacheControl(CacheControl.noCache()) .body(AcademiesByLocationWithScrollResponses.from(response)); } @@ -76,6 +79,7 @@ public ResponseEntity findByName( AcademiesByNameRequest.to(request)); return ResponseEntity.status(HttpStatus.OK) + .cacheControl(CacheControl.noCache()) .body(AcademiesByNameResponses.from(academiesByNameResults)); } @@ -90,6 +94,7 @@ public ResponseEntity filterAcademies( AcademyFilterWithScrollRequest.to(request), memberId); return ResponseEntity.status(HttpStatus.OK) + .cacheControl(CacheControl.noCache()) .body(AcademiesFilterWithScrollResponses.from(academiesFilterWithScrollResults)); } @@ -103,6 +108,7 @@ public ResponseEntity getLessonInfosToCrea academyId); return ResponseEntity.status(HttpStatus.OK) + .cacheControl(CacheControl.noCache()) .body(LessonInfoToCreateDashboardResponses.from(lessonsInfoAboutAcademy)); } diff --git a/src/main/java/org/guzzing/studayserver/domain/calendarInfo/controller/CalendarRestController.java b/src/main/java/org/guzzing/studayserver/domain/calendarInfo/controller/CalendarRestController.java index 676dcc8f7..514594f2c 100644 --- a/src/main/java/org/guzzing/studayserver/domain/calendarInfo/controller/CalendarRestController.java +++ b/src/main/java/org/guzzing/studayserver/domain/calendarInfo/controller/CalendarRestController.java @@ -2,6 +2,8 @@ import jakarta.validation.Valid; import java.time.LocalDate; +import java.util.concurrent.TimeUnit; + import org.guzzing.studayserver.domain.auth.memberId.MemberId; import org.guzzing.studayserver.domain.calendar.service.dto.result.CalendarFindSchedulesByDateResults; import org.guzzing.studayserver.domain.calendarInfo.controller.request.CalendarYearMonthMarkRequest; @@ -11,6 +13,7 @@ import org.guzzing.studayserver.domain.calendarInfo.service.result.CalendarYearMonthMarkResult; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat.ISO; +import org.springframework.http.CacheControl; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; diff --git a/src/main/java/org/guzzing/studayserver/domain/child/controller/ChildRestController.java b/src/main/java/org/guzzing/studayserver/domain/child/controller/ChildRestController.java index 85f91f4b7..b848f3bec 100644 --- a/src/main/java/org/guzzing/studayserver/domain/child/controller/ChildRestController.java +++ b/src/main/java/org/guzzing/studayserver/domain/child/controller/ChildRestController.java @@ -6,6 +6,8 @@ import jakarta.validation.Valid; import java.time.LocalDateTime; import java.util.List; +import java.util.concurrent.TimeUnit; + import org.guzzing.studayserver.domain.auth.memberId.MemberId; import org.guzzing.studayserver.domain.child.controller.request.ChildCreateRequest; import org.guzzing.studayserver.domain.child.controller.request.ChildModifyRequest; @@ -16,6 +18,7 @@ import org.guzzing.studayserver.domain.child.service.ChildWithScheduleResult; import org.guzzing.studayserver.domain.child.service.param.ChildDeleteParam; import org.guzzing.studayserver.domain.child.service.result.ChildProfileImagePatchResult; +import org.springframework.http.CacheControl; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; @@ -62,6 +65,7 @@ public ResponseEntity findChildren(@MemberId Long memberId return ResponseEntity .status(HttpStatus.OK) + .cacheControl(CacheControl.noCache()) .body(ChildrenFindResponse.from(childrenByMemberIdAndDateTime)); } From 951fc02fb2015cac54142f0fb0a2329d412dd012 Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Tue, 12 Dec 2023 13:38:54 +0900 Subject: [PATCH 10/15] =?UTF-8?q?Refactor=20:=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=9C=20=ED=95=84=EB=93=9C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../child/controller/response/ChildrenFindResponse.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/guzzing/studayserver/domain/child/controller/response/ChildrenFindResponse.java b/src/main/java/org/guzzing/studayserver/domain/child/controller/response/ChildrenFindResponse.java index 1512c5191..3de866841 100644 --- a/src/main/java/org/guzzing/studayserver/domain/child/controller/response/ChildrenFindResponse.java +++ b/src/main/java/org/guzzing/studayserver/domain/child/controller/response/ChildrenFindResponse.java @@ -22,8 +22,8 @@ public static ChildrenFindResponse from(List childWithS r.grade(), new ChildScheduleResponse( r.schedule_date(), - r.lessonStartTime(), - r.lessonEndTime(), + LocalTime.of(11,20,3), + LocalTime.of(11,20,3), r.academyName(), r.lessonSubject() ))) From 032c683b4d0268fa01a12ec615599b6a9ff194ac Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Tue, 12 Dec 2023 13:40:12 +0900 Subject: [PATCH 11/15] =?UTF-8?q?Feat=20:=20Etag=EB=A5=BC=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EB=8A=94=20api=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EA=B4=80=EB=A0=A8=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/config/EtagConfig.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/java/org/guzzing/studayserver/global/config/EtagConfig.java diff --git a/src/main/java/org/guzzing/studayserver/global/config/EtagConfig.java b/src/main/java/org/guzzing/studayserver/global/config/EtagConfig.java new file mode 100644 index 000000000..2a1e3fddd --- /dev/null +++ b/src/main/java/org/guzzing/studayserver/global/config/EtagConfig.java @@ -0,0 +1,24 @@ +package org.guzzing.studayserver.global.config; + + +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.ShallowEtagHeaderFilter; + +@Configuration +public class EtagConfig { + @Bean + public FilterRegistrationBean shallowEtagHeaderFilter() { + FilterRegistrationBean filterFilterRegistrationBean = + new FilterRegistrationBean<>(new ShallowEtagHeaderFilter()); + + filterFilterRegistrationBean.addUrlPatterns("/calendar/mark"); + filterFilterRegistrationBean.addUrlPatterns("/children"); + filterFilterRegistrationBean.addUrlPatterns("/academies/*"); + filterFilterRegistrationBean.setName("etagFilter"); + + return filterFilterRegistrationBean; + } + +} From 60666e219e9563bf76cb62855ed0a2b8e649a386 Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Tue, 12 Dec 2023 13:41:48 +0900 Subject: [PATCH 12/15] =?UTF-8?q?Style=20:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=BD=94=EB=93=9C=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F?= =?UTF-8?q?=20=EA=B0=9C=ED=96=89=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../calendarInfo/controller/CalendarRestController.java | 3 --- .../domain/child/controller/ChildRestController.java | 1 + .../guzzing/studayserver/global/config/EtagConfig.java | 1 - .../domain/calendar/facade/AcademyCalendarFacadeTest.java | 8 +------- 4 files changed, 2 insertions(+), 11 deletions(-) diff --git a/src/main/java/org/guzzing/studayserver/domain/calendarInfo/controller/CalendarRestController.java b/src/main/java/org/guzzing/studayserver/domain/calendarInfo/controller/CalendarRestController.java index 514594f2c..676dcc8f7 100644 --- a/src/main/java/org/guzzing/studayserver/domain/calendarInfo/controller/CalendarRestController.java +++ b/src/main/java/org/guzzing/studayserver/domain/calendarInfo/controller/CalendarRestController.java @@ -2,8 +2,6 @@ import jakarta.validation.Valid; import java.time.LocalDate; -import java.util.concurrent.TimeUnit; - import org.guzzing.studayserver.domain.auth.memberId.MemberId; import org.guzzing.studayserver.domain.calendar.service.dto.result.CalendarFindSchedulesByDateResults; import org.guzzing.studayserver.domain.calendarInfo.controller.request.CalendarYearMonthMarkRequest; @@ -13,7 +11,6 @@ import org.guzzing.studayserver.domain.calendarInfo.service.result.CalendarYearMonthMarkResult; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat.ISO; -import org.springframework.http.CacheControl; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; diff --git a/src/main/java/org/guzzing/studayserver/domain/child/controller/ChildRestController.java b/src/main/java/org/guzzing/studayserver/domain/child/controller/ChildRestController.java index b848f3bec..d29ddb020 100644 --- a/src/main/java/org/guzzing/studayserver/domain/child/controller/ChildRestController.java +++ b/src/main/java/org/guzzing/studayserver/domain/child/controller/ChildRestController.java @@ -4,6 +4,7 @@ import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE; import jakarta.validation.Valid; + import java.time.LocalDateTime; import java.util.List; import java.util.concurrent.TimeUnit; diff --git a/src/main/java/org/guzzing/studayserver/global/config/EtagConfig.java b/src/main/java/org/guzzing/studayserver/global/config/EtagConfig.java index 2a1e3fddd..e7222594f 100644 --- a/src/main/java/org/guzzing/studayserver/global/config/EtagConfig.java +++ b/src/main/java/org/guzzing/studayserver/global/config/EtagConfig.java @@ -1,6 +1,5 @@ package org.guzzing.studayserver.global.config; - import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/src/test/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacadeTest.java b/src/test/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacadeTest.java index 6ca2a17d4..41588895c 100644 --- a/src/test/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacadeTest.java +++ b/src/test/java/org/guzzing/studayserver/domain/calendar/facade/AcademyCalendarFacadeTest.java @@ -4,7 +4,6 @@ import org.guzzing.studayserver.domain.academy.model.Lesson; import org.guzzing.studayserver.domain.academy.repository.academy.AcademyRepository; import org.guzzing.studayserver.domain.academy.repository.lesson.LessonRepository; -import org.guzzing.studayserver.domain.academy.service.dto.result.AcademyAndLessonDetailResult; import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyCalendarDetailFacadeParam; import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyCalendarDetailFacadeResult; import org.guzzing.studayserver.domain.calendar.facade.dto.AcademyScheduleLoadToUpdateFacadeResult; @@ -15,10 +14,8 @@ import org.guzzing.studayserver.domain.calendar.service.AcademyCalendarService; import org.guzzing.studayserver.domain.calendar.service.dto.param.AcademyCalendarCreateParam; import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarCreateResults; -import org.guzzing.studayserver.domain.calendar.service.dto.result.AcademyCalendarDetailResult; import org.guzzing.studayserver.domain.child.model.Child; import org.guzzing.studayserver.domain.child.repository.ChildRepository; -import org.guzzing.studayserver.domain.child.service.result.AcademyCalendarDetailChildInfo; import org.guzzing.studayserver.domain.dashboard.fixture.DashboardFixture; import org.guzzing.studayserver.domain.dashboard.model.Dashboard; import org.guzzing.studayserver.domain.dashboard.repository.DashboardRepository; @@ -33,19 +30,16 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.ActiveProfiles; import org.springframework.transaction.annotation.Transactional; import java.util.List; -import static org.assertj.core.api.Assertions.as; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertAll; import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE; @Transactional @SpringBootTest(webEnvironment = NONE) -@ActiveProfiles({"dev","oauth"}) public class AcademyCalendarFacadeTest { @Autowired private DashboardRepository dashboardRepository; @@ -150,7 +144,7 @@ void getCalendarDetailInfo_academyAndChildInfoAndSchedule_success() { () -> assertThat(calendarDetailInfo.childrenInfo().childId()).isEqualTo(savedChild.getId()), () -> assertThat(calendarDetailInfo.childrenInfo().memo()).isEqualTo(academyTimeTemplate.getMemo()), () -> assertThat(calendarDetailInfo.childrenInfo().childName()).isEqualTo(savedChild.getNickName()), - () -> assertThat(calendarDetailInfo.childrenInfo().imageUrl()).isEqualTo(imageUrlPrefix+savedChild.getProfileImageURIPath()), + () -> assertThat(calendarDetailInfo.childrenInfo().imageUrl()).isEqualTo(imageUrlPrefix + savedChild.getProfileImageURIPath()), () -> assertThat(calendarDetailInfo.childrenInfo().dashBoardId()).isEqualTo(academyTimeTemplate.getDashboardId()), () -> assertThat(calendarDetailInfo.lessonInfo().lessonName()).isEqualTo(savedALessonAboutSungnam.getCurriculum()), () -> assertThat(calendarDetailInfo.lessonInfo().lessonTimes().endTime()).isEqualTo(academySchedule.getLessonEndTime().toString()), From c8eb0ddac2b779fb62e206e50ff72538d05eeafe Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Fri, 15 Dec 2023 13:43:42 +0900 Subject: [PATCH 13/15] =?UTF-8?q?Refactor=20:=20Etag=20get=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=EC=97=90=20=EA=B4=80=ED=95=9C=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../academy/controller/AcademyController.java | 5 --- .../child/controller/ChildRestController.java | 1 - .../global/config/EtagConfig.java | 23 ------------- .../studayserver/global/config/WebConfig.java | 33 +++++++++++++++++++ 4 files changed, 33 insertions(+), 29 deletions(-) delete mode 100644 src/main/java/org/guzzing/studayserver/global/config/EtagConfig.java create mode 100644 src/main/java/org/guzzing/studayserver/global/config/WebConfig.java diff --git a/src/main/java/org/guzzing/studayserver/domain/academy/controller/AcademyController.java b/src/main/java/org/guzzing/studayserver/domain/academy/controller/AcademyController.java index ec325377d..513cf0aa3 100644 --- a/src/main/java/org/guzzing/studayserver/domain/academy/controller/AcademyController.java +++ b/src/main/java/org/guzzing/studayserver/domain/academy/controller/AcademyController.java @@ -50,7 +50,6 @@ public ResponseEntity getAcademy( AcademyDetailFacadeResult detailAcademy = academyFacade.getDetailAcademy(AcademyDetailFacadeParam.of(memberId, academyId)); return ResponseEntity.status(HttpStatus.OK) - .cacheControl(CacheControl.noCache()) .body(AcademyGetResponse.from(detailAcademy)); } @@ -65,7 +64,6 @@ public ResponseEntity findByLocationWith AcademyByLocationWithScrollRequest.to(request, memberId)); return ResponseEntity.status(HttpStatus.OK) - .cacheControl(CacheControl.noCache()) .body(AcademiesByLocationWithScrollResponses.from(response)); } @@ -79,7 +77,6 @@ public ResponseEntity findByName( AcademiesByNameRequest.to(request)); return ResponseEntity.status(HttpStatus.OK) - .cacheControl(CacheControl.noCache()) .body(AcademiesByNameResponses.from(academiesByNameResults)); } @@ -94,7 +91,6 @@ public ResponseEntity filterAcademies( AcademyFilterWithScrollRequest.to(request), memberId); return ResponseEntity.status(HttpStatus.OK) - .cacheControl(CacheControl.noCache()) .body(AcademiesFilterWithScrollResponses.from(academiesFilterWithScrollResults)); } @@ -108,7 +104,6 @@ public ResponseEntity getLessonInfosToCrea academyId); return ResponseEntity.status(HttpStatus.OK) - .cacheControl(CacheControl.noCache()) .body(LessonInfoToCreateDashboardResponses.from(lessonsInfoAboutAcademy)); } diff --git a/src/main/java/org/guzzing/studayserver/domain/child/controller/ChildRestController.java b/src/main/java/org/guzzing/studayserver/domain/child/controller/ChildRestController.java index d29ddb020..0a1e274a0 100644 --- a/src/main/java/org/guzzing/studayserver/domain/child/controller/ChildRestController.java +++ b/src/main/java/org/guzzing/studayserver/domain/child/controller/ChildRestController.java @@ -66,7 +66,6 @@ public ResponseEntity findChildren(@MemberId Long memberId return ResponseEntity .status(HttpStatus.OK) - .cacheControl(CacheControl.noCache()) .body(ChildrenFindResponse.from(childrenByMemberIdAndDateTime)); } diff --git a/src/main/java/org/guzzing/studayserver/global/config/EtagConfig.java b/src/main/java/org/guzzing/studayserver/global/config/EtagConfig.java deleted file mode 100644 index e7222594f..000000000 --- a/src/main/java/org/guzzing/studayserver/global/config/EtagConfig.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.guzzing.studayserver.global.config; - -import org.springframework.boot.web.servlet.FilterRegistrationBean; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.filter.ShallowEtagHeaderFilter; - -@Configuration -public class EtagConfig { - @Bean - public FilterRegistrationBean shallowEtagHeaderFilter() { - FilterRegistrationBean filterFilterRegistrationBean = - new FilterRegistrationBean<>(new ShallowEtagHeaderFilter()); - - filterFilterRegistrationBean.addUrlPatterns("/calendar/mark"); - filterFilterRegistrationBean.addUrlPatterns("/children"); - filterFilterRegistrationBean.addUrlPatterns("/academies/*"); - filterFilterRegistrationBean.setName("etagFilter"); - - return filterFilterRegistrationBean; - } - -} diff --git a/src/main/java/org/guzzing/studayserver/global/config/WebConfig.java b/src/main/java/org/guzzing/studayserver/global/config/WebConfig.java new file mode 100644 index 000000000..1ef0a6da2 --- /dev/null +++ b/src/main/java/org/guzzing/studayserver/global/config/WebConfig.java @@ -0,0 +1,33 @@ +package org.guzzing.studayserver.global.config; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.ShallowEtagHeaderFilter; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new HandlerInterceptor() { + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if(request.getMethod().equals("GET")) { + response.setHeader("Cache-Control","no-cache"); + } + return HandlerInterceptor.super.preHandle(request, response, handler); + } + }); + } + + @Bean + public ShallowEtagHeaderFilter shallowEtagHeaderFilter() { + return new ShallowEtagHeaderFilter(); + } + +} From 83971462bc85f03e7c7f7c3c635fc2c41fdc57fa Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Fri, 15 Dec 2023 14:54:25 +0900 Subject: [PATCH 14/15] =?UTF-8?q?Refactor=20:=20Mvc=20bean=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=96=B4=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=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 --- .../java/org/guzzing/studayserver/global/config/WebConfig.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/org/guzzing/studayserver/global/config/WebConfig.java b/src/main/java/org/guzzing/studayserver/global/config/WebConfig.java index 1ef0a6da2..0fe4de26a 100644 --- a/src/main/java/org/guzzing/studayserver/global/config/WebConfig.java +++ b/src/main/java/org/guzzing/studayserver/global/config/WebConfig.java @@ -7,9 +7,11 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.filter.ShallowEtagHeaderFilter; import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +@EnableWebMvc @Configuration public class WebConfig implements WebMvcConfigurer { @Override From 931901bd67031b7e42083f0027afde6848c70a6e Mon Sep 17 00:00:00 2001 From: byeolhaha Date: Fri, 15 Dec 2023 15:44:51 +0900 Subject: [PATCH 15/15] =?UTF-8?q?Style=20:=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/guzzing/studayserver/global/config/WebConfig.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/guzzing/studayserver/global/config/WebConfig.java b/src/main/java/org/guzzing/studayserver/global/config/WebConfig.java index 0fe4de26a..bcf85446e 100644 --- a/src/main/java/org/guzzing/studayserver/global/config/WebConfig.java +++ b/src/main/java/org/guzzing/studayserver/global/config/WebConfig.java @@ -1,23 +1,22 @@ package org.guzzing.studayserver.global.config; +import jakarta.annotation.PostConstruct; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.filter.ShallowEtagHeaderFilter; import org.springframework.web.servlet.HandlerInterceptor; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -@EnableWebMvc @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new HandlerInterceptor() { @Override + @PostConstruct public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if(request.getMethod().equals("GET")) { response.setHeader("Cache-Control","no-cache");