Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

학원 스케줄 퍼사드 패턴 도입 및 Etag 도입으로 인한 응답 사이즈 개선 #129

Merged
merged 15 commits into from
Dec 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}
Expand All @@ -65,12 +66,12 @@ public ResponseEntity<AcademyCalendarCreateResponse> createAcademyCalendar(
public ResponseEntity<AcademyCalendarLoadToUpdateResponse> 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(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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(),
Expand All @@ -40,7 +40,7 @@ public record LessonScheduleLoadToUpdateResponse(
) {

public static LessonScheduleLoadToUpdateResponse from(
AcademyCalendarLoadToUpdateResult.LessonScheduleInfo result) {
AcademyScheduleLoadToUpdateFacadeResult.LessonScheduleInfo result) {
return new LessonScheduleLoadToUpdateResponse(
result.dayOfWeek(),
new LessonTime(
Expand All @@ -56,4 +56,5 @@ public record LessonTime(

}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,34 @@
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 {

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());
Expand All @@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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<LessonScheduleInfo> 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)
);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -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
Expand Down Expand Up @@ -125,10 +123,8 @@ private List<GeneratedLessonSchedule> 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,55 +5,26 @@
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<LessonScheduleInfo> 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(),
academyTimeTemplate.getMemo()
);
}

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)
);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,11 @@
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;

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;
Expand All @@ -16,6 +19,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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ public static ChildrenFindResponse from(List<ChildWithScheduleResult> 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()
)))
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -29,4 +30,5 @@ public DashBoardFindByIdsResults findByIds(List<Long> dashboardIds) {

return new DashBoardFindByIdsResults(dashBoardFindByIdsResults);
}

}
Loading