Skip to content

Commit

Permalink
refactor: 수정사항 적용
Browse files Browse the repository at this point in the history
  • Loading branch information
yuuuyeonho committed Feb 3, 2025
1 parent ff6e7cb commit 82fc30e
Show file tree
Hide file tree
Showing 16 changed files with 140 additions and 108 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;

import java.time.DayOfWeek;

@EnableJpaAuditing
@SpringBootApplication
public class KeunSoriServerApplication {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.keunsori.keunsoriserver.domain.admin.member.controller;

import com.keunsori.keunsoriserver.domain.admin.member.dto.MemberApplicantResponse;
import com.keunsori.keunsoriserver.domain.admin.member.dto.response.MemberApplicantResponse;
import com.keunsori.keunsoriserver.domain.admin.member.service.AdminMemberService;
import com.keunsori.keunsoriserver.domain.member.dto.response.MemberResponse;
import com.keunsori.keunsoriserver.domain.member.service.MemberService;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.keunsori.keunsoriserver.domain.admin.member.dto;
package com.keunsori.keunsoriserver.domain.admin.member.dto.response;

import com.keunsori.keunsoriserver.domain.member.domain.vo.MemberStatus;
import com.keunsori.keunsoriserver.domain.member.domain.Member;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.keunsori.keunsoriserver.domain.admin.member.service;

import com.keunsori.keunsoriserver.domain.admin.member.dto.MemberApplicantResponse;
import com.keunsori.keunsoriserver.domain.admin.member.dto.response.MemberApplicantResponse;
import com.keunsori.keunsoriserver.domain.member.domain.Member;
import com.keunsori.keunsoriserver.domain.member.domain.vo.MemberStatus;
import com.keunsori.keunsoriserver.domain.member.dto.response.MemberResponse;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.keunsori.keunsoriserver.domain.admin.reservation.controller;

import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.DailyScheduleRequest;
import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.WeeklyScheduleRequest;
import com.keunsori.keunsoriserver.domain.admin.reservation.dto.response.DailyAvailableResponse;
import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.DailyScheduleUpdateOrCreateRequest;
import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.WeeklyScheduleUpdateRequest;
import com.keunsori.keunsoriserver.domain.admin.reservation.dto.response.MonthlyScheduleResponse;
import com.keunsori.keunsoriserver.domain.admin.reservation.dto.response.WeeklyScheduleResponse;
import com.keunsori.keunsoriserver.domain.admin.reservation.service.AdminReservationService;
import com.keunsori.keunsoriserver.domain.reservation.service.ReservationService;
Expand All @@ -28,23 +28,23 @@ public ResponseEntity<List<WeeklyScheduleResponse>> findAllWeeklySchedules(){
}

// 주간 테이블 설정
@PostMapping("/weekly-schedule")
public ResponseEntity<Void> saveWeeklySchedule(@RequestBody List<WeeklyScheduleRequest> requests){
adminReservationService.saveWeeklySchedule(requests);
@PutMapping("/weekly-schedule")
public ResponseEntity<Void> saveWeeklySchedule(@RequestBody List<WeeklyScheduleUpdateRequest> requests){
adminReservationService.saveOrUpdateWeeklySchedule(requests);
return ResponseEntity.ok().build();
}

//일자별 관리 페이지 반환
@GetMapping("daily-schedule")
public ResponseEntity<List<DailyAvailableResponse>> findAllDailySchedulesAndResrvations(@RequestParam("month") String month) {
List<DailyAvailableResponse> responses = reservationService.findDailyAvailableByMonth(month);
return ResponseEntity.ok().body(responses);
// 일자별 관리 페이지 반환
@GetMapping("/daily-schedule")
public ResponseEntity<MonthlyScheduleResponse> findAllDailySchedulesAndResrvations(@RequestParam("month") String month) {
MonthlyScheduleResponse response = reservationService.findMonthlySchedule(month);
return ResponseEntity.ok().body(response);
}

// 일간 시간 설정
@PostMapping("daily-schedule")
public ResponseEntity<Void> saveDailySchedule(@RequestBody DailyScheduleRequest request){
adminReservationService.saveDailySchedule(request);
@PostMapping("/daily-schedule")
public ResponseEntity<Void> saveDailySchedule(@RequestBody DailyScheduleUpdateOrCreateRequest request){
adminReservationService.saveOrUpdateDailySchedule(request);
return ResponseEntity.ok().build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,14 @@
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.*;

import java.time.LocalDate;
import java.time.LocalTime;

@Entity
@Getter
@NoArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class DailySchedule {

@Id
Expand All @@ -24,10 +23,15 @@ public class DailySchedule {

private LocalTime endTime;

public DailySchedule(LocalDate date, boolean isActive, LocalTime startTime, LocalTime endTime){
@Builder
private DailySchedule(LocalDate date, boolean isActive, LocalTime startTime, LocalTime endTime){
this.date = date;
this.isActive = isActive;
this.startTime = startTime;
this.endTime = endTime;
}

public boolean isPastDate(){
return date.isBefore(LocalDate.now());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,32 @@

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.DayOfWeek;
import java.time.LocalTime;

@Entity
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class WeeklySchedule {

@Id
@Column(nullable = false, unique = true)
private String dayOfWeek;
private DayOfWeek dayOfWeek;

private boolean isActive;

private LocalTime startTime;

private LocalTime endTime;

@Builder
private WeeklySchedule(DayOfWeek dayOfWeek, boolean isActive, LocalTime startTime, LocalTime endTime){
this.dayOfWeek = dayOfWeek;
this.isActive = isActive;
this.startTime = startTime;
this.endTime = endTime;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import java.time.LocalDate;
import java.time.LocalTime;

public record DailyScheduleRequest(
public record DailyScheduleUpdateOrCreateRequest(
@Schema(example = "2025-01-01", type = "string")
LocalDate date,
boolean isActive,
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.keunsori.keunsoriserver.domain.admin.reservation.dto.request;

import com.keunsori.keunsoriserver.domain.admin.reservation.domain.WeeklySchedule;
import io.swagger.v3.oas.annotations.media.Schema;

import java.time.DayOfWeek;
import java.time.LocalTime;

public record WeeklyScheduleUpdateRequest(
int dayOfWeekNum, // 0 = 일요일, 1 = 월요일, ...
boolean isActive,
@Schema(example = "10:00", type = "string")
LocalTime startTime,
@Schema(example = "22:00", type = "string")
LocalTime endTime
) {
public WeeklySchedule toEntity(){
return WeeklySchedule.builder()
.dayOfWeek(DayOfWeek.of((dayOfWeekNum+1)%8))
.isActive(isActive)
.startTime(startTime)
.endTime(endTime)
.build();
}
}

Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package com.keunsori.keunsoriserver.domain.admin.reservation.dto.response;

import com.keunsori.keunsoriserver.domain.admin.reservation.domain.DailySchedule;
import com.keunsori.keunsoriserver.domain.admin.reservation.domain.WeeklySchedule;

import java.time.LocalDate;
import java.time.LocalTime;

Expand All @@ -9,4 +12,30 @@ public record DailyAvailableResponse(
LocalTime startTime,
LocalTime endTime
) {
public static DailyAvailableResponse from(DailySchedule dailySchedule){
return new DailyAvailableResponse(
dailySchedule.getDate(),
dailySchedule.isActive(),
dailySchedule.getStartTime(),
dailySchedule.getEndTime()
);
}

public static DailyAvailableResponse of(LocalDate date, WeeklySchedule weeklySchedule){
return new DailyAvailableResponse(
date,
weeklySchedule.isActive(),
weeklySchedule.getStartTime(),
weeklySchedule.getEndTime()
);
}

public static DailyAvailableResponse createInactiveDate(LocalDate date){
return new DailyAvailableResponse(
date,
false,
null,
null
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import java.util.List;

public record MonthlyScheduleResponse(
List<DailyAvailableResponse> dailyAvailableRespons,
List<DailyAvailableResponse> dailyAvailableResponses,
List<ReservationResponse> reservationResponses
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
import java.time.LocalTime;

public record WeeklyScheduleResponse(
String dayOfWeek,
int dayOfWeekNum, // 0 = 일요일, 1 = 월요일, ...
boolean isActive,
LocalTime startTime,
LocalTime endTime
) {
public static WeeklyScheduleResponse from(WeeklySchedule weeklySchedule){
return new WeeklyScheduleResponse(
weeklySchedule.getDayOfWeek(),
weeklySchedule.getDayOfWeek().getValue()%7,
weeklySchedule.isActive(),
weeklySchedule.getStartTime(),
weeklySchedule.getEndTime()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,10 @@
import com.keunsori.keunsoriserver.domain.admin.reservation.domain.WeeklySchedule;
import org.springframework.data.jpa.repository.JpaRepository;

import java.time.DayOfWeek;
import java.util.Optional;

public interface WeeklyScheduleRepository extends JpaRepository<WeeklySchedule, String> {
public interface WeeklyScheduleRepository extends JpaRepository<WeeklySchedule, DayOfWeek> {

Optional<WeeklySchedule> findByDayOfWeek(String dayOfWeek);

void deleteById(String dayOfWeek);
Optional<WeeklySchedule> findByDayOfWeek(DayOfWeek dayOfWeek);
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package com.keunsori.keunsoriserver.domain.admin.reservation.service;

import com.keunsori.keunsoriserver.domain.admin.reservation.domain.DailySchedule;
import com.keunsori.keunsoriserver.domain.admin.reservation.domain.WeeklySchedule;
import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.DailyScheduleRequest;
import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.WeeklyScheduleRequest;
import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.DailyScheduleUpdateOrCreateRequest;
import com.keunsori.keunsoriserver.domain.admin.reservation.dto.request.WeeklyScheduleUpdateRequest;
import com.keunsori.keunsoriserver.domain.admin.reservation.dto.response.WeeklyScheduleResponse;
import com.keunsori.keunsoriserver.domain.admin.reservation.repository.DailyScheduleRepository;
import com.keunsori.keunsoriserver.domain.admin.reservation.repository.WeeklyScheduleRepository;
Expand All @@ -15,9 +14,7 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;

import static com.keunsori.keunsoriserver.global.exception.ErrorMessage.*;
Expand All @@ -39,10 +36,12 @@ public List<WeeklyScheduleResponse> findAllWeeklySchedules() {
}

@Transactional
public void saveWeeklySchedule(List<WeeklyScheduleRequest> requests) {
List<WeeklySchedule> weeklyScheduleList = new ArrayList<>();
public void saveOrUpdateWeeklySchedule(List<WeeklyScheduleUpdateRequest> requests) {
requests.stream()
.map(WeeklyScheduleUpdateRequest::toEntity)
.forEach(weeklyScheduleRepository::save);

for(WeeklyScheduleRequest request : requests){
/*for(WeeklyScheduleRequest request : requests){
if(request.isActive()){
// 활성화된 요일 저장
WeeklySchedule weeklySchedule = new WeeklySchedule(
Expand All @@ -56,27 +55,27 @@ public void saveWeeklySchedule(List<WeeklyScheduleRequest> requests) {
weeklyScheduleList.add(weeklySchedule);
} else {
// 비활성화된 요일 삭제
weeklyScheduleRepository.deleteById(request.dayOfWeek());
weeklyScheduleRepository.deleteByDayOfWeek(request.dayOfWeek());
}
}
// 데이터베이스에 저장
weeklyScheduleRepository.saveAll(weeklyScheduleList);
weeklyScheduleRepository.saveAll(weeklyScheduleList);*/
}

@Transactional
public void saveDailySchedule(DailyScheduleRequest request) {
DailySchedule dailySchedule = new DailySchedule(
request.date(),
request.isActive(),
request.startTime(),
request.endTime()
);
public void saveOrUpdateDailySchedule(DailyScheduleUpdateOrCreateRequest request) {
DailySchedule dailySchedule = DailySchedule.builder()
.date(request.date())
.isActive(request.isActive())
.startTime(request.startTime())
.endTime(request.endTime())
.build();

validateNotPastDateSchdule(dailySchedule);
validateSchelduleTime(dailySchedule.getStartTime(),dailySchedule.getEndTime());
validateNotPastDateSchedule(dailySchedule);
validateScheduleTime(dailySchedule.getStartTime(),dailySchedule.getEndTime());

// active -> unactive 시 예약들 삭제
if(dailySchedule.isActive() == false){
if(!dailySchedule.isActive()){
reservationRepository.deleteAllByDate(dailySchedule.getDate());
}

Expand All @@ -94,13 +93,13 @@ public void deleteReservationByAdmin(Long reservationId) {
reservationRepository.delete(reservation);
}

private void validateNotPastDateSchdule(DailySchedule schedule){
if(schedule.getDate().isBefore(LocalDate.now())) {
private void validateNotPastDateSchedule(DailySchedule schedule){
if(schedule.isPastDate()) {
throw new ReservationException(INVALID_DATE_SCHEDULE);
}
}

private void validateSchelduleTime(LocalTime startTime, LocalTime endTime) {
private void validateScheduleTime(LocalTime startTime, LocalTime endTime) {
if (!endTime.isAfter(startTime)) {
throw new ReservationException(INVALID_SCHEDULE_TIME);
}
Expand Down
Loading

0 comments on commit 82fc30e

Please sign in to comment.