Skip to content

Commit

Permalink
Merge pull request #129 from Guzzing/academy-schedules
Browse files Browse the repository at this point in the history
학원 스케줄 퍼사드 패턴 도입 및 Etag 도입으로 인한 응답 사이즈 개선
  • Loading branch information
byeolhaha authored Dec 16, 2023
2 parents 0e330a6 + 931901b commit abde55c
Show file tree
Hide file tree
Showing 19 changed files with 363 additions and 88 deletions.
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

0 comments on commit abde55c

Please sign in to comment.