-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #182 from urinaner/refactor/179
[BE] [REFACTOR] 예약 구현 리펙토링
- Loading branch information
Showing
37 changed files
with
621 additions
and
1,303 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
17 changes: 17 additions & 0 deletions
17
backend/src/main/java/org/example/backend/common/utils/TimeParsingUtils.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package org.example.backend.common.utils; | ||
|
||
import java.time.LocalDateTime; | ||
import java.time.format.DateTimeFormatter; | ||
|
||
public class TimeParsingUtils { | ||
|
||
public static LocalDateTime formatterLocalDateTime(String time) { | ||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); | ||
return LocalDateTime.parse(time, formatter); | ||
} | ||
|
||
public static String formatterString(LocalDateTime time) { | ||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"); | ||
return time.format(formatter); | ||
} | ||
} |
85 changes: 61 additions & 24 deletions
85
backend/src/main/java/org/example/backend/reservation/controller/ReservationController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,50 +1,87 @@ | ||
package org.example.backend.reservation.controller; | ||
|
||
import java.util.List; | ||
import lombok.RequiredArgsConstructor; | ||
import org.example.backend.reservation.domain.ReservationStatus; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.example.backend.reservation.domain.dto.ReservationReqDto; | ||
import org.example.backend.reservation.domain.dto.ReservationResDto; | ||
import org.example.backend.reservation.service.ReservationService; | ||
import org.example.backend.user.domain.entity.User; | ||
import org.example.backend.user.exception.UserException; | ||
import org.example.backend.user.exception.UserExceptionType; | ||
import org.example.backend.user.repository.UserRepository; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
import java.util.List; | ||
import org.springframework.web.bind.annotation.DeleteMapping; | ||
import org.springframework.web.bind.annotation.GetMapping; | ||
import org.springframework.web.bind.annotation.PathVariable; | ||
import org.springframework.web.bind.annotation.PostMapping; | ||
import org.springframework.web.bind.annotation.RequestBody; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
import org.springframework.web.bind.annotation.RequestParam; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
@Slf4j | ||
@RestController | ||
@RequiredArgsConstructor | ||
@RequestMapping("/api/reservations") | ||
@RequestMapping("/api/room") | ||
public class ReservationController { | ||
private final ReservationService reservationService; | ||
private final UserRepository userRepository; | ||
|
||
@PostMapping | ||
public ResponseEntity<ReservationResDto> createReservation(@RequestBody ReservationReqDto reqDto) { | ||
ReservationResDto resDto = reservationService.createReservation(reqDto); | ||
return ResponseEntity.ok(resDto); | ||
@PostMapping("/{roomId}/reservation") | ||
public ResponseEntity<List<ReservationResDto>> createReservation( | ||
@PathVariable(value = "roomId") Long roomId, | ||
@RequestBody ReservationReqDto reqDto) { | ||
User user = userRepository.findById(1L) | ||
.orElseThrow(() -> new UserException(UserExceptionType.NOT_FOUND_USER)); | ||
log.debug("Reservation creation request received: {}", reqDto); | ||
try { | ||
List<ReservationResDto> resDtos = reservationService.createReservation(roomId, reqDto, user); | ||
log.debug("Reservation created successfully: {}", resDtos); | ||
return ResponseEntity.ok(resDtos); | ||
} catch (Exception e) { | ||
log.error("Error during reservation creation", e); | ||
throw e; | ||
} | ||
} | ||
|
||
@GetMapping | ||
public ResponseEntity<List<ReservationResDto>> getAllReservations() { | ||
List<ReservationResDto> reservations = reservationService.getAllReservations(); | ||
|
||
@GetMapping("/{roomId}/reservation") | ||
public ResponseEntity<List<ReservationResDto>> getReservationsByRoomAndDate( | ||
@PathVariable(name = "roomId") Long roomId, | ||
@RequestParam(value = "date") String date | ||
) { | ||
List<ReservationResDto> reservations = reservationService.getReservationsByRoomAndDate(roomId, date); | ||
return ResponseEntity.ok(reservations); | ||
} | ||
|
||
@GetMapping("/{reservationId}") | ||
public ResponseEntity<ReservationResDto> getReservation(@PathVariable(value = "reservationId") Long id) { | ||
ReservationResDto resDto = reservationService.getReservation(id); | ||
return ResponseEntity.ok(resDto); | ||
@GetMapping("/{roomId}/reservation/month") | ||
public ResponseEntity<List<ReservationResDto>> getReservationsByRoomAndMonth( | ||
@PathVariable(value = "roomId") Long roomId, | ||
@RequestParam(required = false) String yearMonth) { | ||
List<ReservationResDto> reservations; | ||
if (yearMonth == null) { | ||
reservations = reservationService.getCurrentMonthReservations(roomId); | ||
} else { | ||
reservations = reservationService.getMonthReservations(roomId, yearMonth); | ||
} | ||
return ResponseEntity.ok(reservations); | ||
} | ||
|
||
@PatchMapping("/{reservationId}/status") | ||
public ResponseEntity<ReservationResDto> updateReservationStatus( | ||
@PathVariable(value = "reservationId") Long id, | ||
@RequestParam(value = "status") ReservationStatus status) { | ||
ReservationResDto resDto = reservationService.updateReservationStatus(id, status); | ||
|
||
@GetMapping("/{roomId}/reservation/{reservationId}") | ||
public ResponseEntity<ReservationResDto> getReservation( | ||
@PathVariable(value = "roomId") Long roomId, | ||
@PathVariable(value = "reservationId") Long reservationId) { | ||
ReservationResDto resDto = reservationService.getReservation(reservationId); | ||
return ResponseEntity.ok(resDto); | ||
} | ||
|
||
@DeleteMapping("/{reservationId}") | ||
public ResponseEntity<Void> deleteReservation(@PathVariable(value = "reservationId") Long id) { | ||
reservationService.deleteReservation(id); | ||
@DeleteMapping("/{roomId}/reservation/{reservationId}") | ||
public ResponseEntity<Void> deleteReservation( | ||
@PathVariable(value = "roomId") Long roomId, | ||
@PathVariable(value = "reservationId") Long reservationId) { | ||
reservationService.deleteReservation(reservationId); | ||
return ResponseEntity.ok().build(); | ||
} | ||
} |
16 changes: 16 additions & 0 deletions
16
backend/src/main/java/org/example/backend/reservation/domain/RepetitionType.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package org.example.backend.reservation.domain; | ||
|
||
public enum RepetitionType { | ||
DAILY("단일 일정"), | ||
WEEKLY("주간 반복") | ||
; | ||
|
||
private final String description; | ||
|
||
RepetitionType(String description) { | ||
this.description = description; | ||
} | ||
public String getDescription() { | ||
return description; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
15 changes: 0 additions & 15 deletions
15
backend/src/main/java/org/example/backend/reservation/domain/ReservationStatus.java
This file was deleted.
Oops, something went wrong.
39 changes: 23 additions & 16 deletions
39
backend/src/main/java/org/example/backend/reservation/domain/dto/ReservationReqDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,43 +1,50 @@ | ||
package org.example.backend.reservation.domain.dto; | ||
|
||
|
||
import com.fasterxml.jackson.annotation.JsonFormat; | ||
import java.time.LocalDateTime; | ||
import lombok.AccessLevel; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import org.example.backend.reservation.domain.ReservationPurpose; | ||
import org.example.backend.common.utils.TimeParsingUtils; | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
public class ReservationReqDto { | ||
private LocalDateTime startTime; | ||
private LocalDateTime endTime; | ||
private ReservationPurpose purpose; | ||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm") | ||
private String startTime; | ||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm") | ||
private String endTime; | ||
private String purpose; | ||
private String etc; | ||
private Long seminarRoomId; | ||
private Long userId; | ||
private String repetitionType; | ||
|
||
@Builder | ||
private ReservationReqDto(LocalDateTime startTime, LocalDateTime endTime, | ||
ReservationPurpose purpose, String etc, Long seminarRoomId, Long userId) { | ||
private ReservationReqDto(String startTime, String endTime, | ||
String purpose, String etc, String repetitionType) { | ||
this.startTime = startTime; | ||
this.endTime = endTime; | ||
this.purpose = purpose; | ||
this.etc = etc; | ||
this.seminarRoomId = seminarRoomId; | ||
this.userId = userId; | ||
this.repetitionType = repetitionType; | ||
} | ||
|
||
public static ReservationReqDto of(LocalDateTime startTime, LocalDateTime endTime, | ||
ReservationPurpose purpose, String etc, Long seminarRoomId, Long userId) { | ||
String purpose, String repetitionType, String etc) { | ||
return ReservationReqDto.builder() | ||
.startTime(startTime) | ||
.endTime(endTime) | ||
.startTime(TimeParsingUtils.formatterString(startTime)) | ||
.endTime(TimeParsingUtils.formatterString(endTime)) | ||
.purpose(purpose) | ||
.etc(etc) | ||
.seminarRoomId(seminarRoomId) | ||
.userId(userId) | ||
.repetitionType(repetitionType) | ||
.build(); | ||
} | ||
|
||
public boolean isWeeklyReservation() { | ||
return !startTime.equals(endTime); | ||
} | ||
|
||
public String getDefaultPurpose() { | ||
return (purpose == null || purpose.isBlank()) ? "CLASS" : purpose; | ||
} | ||
} |
34 changes: 18 additions & 16 deletions
34
backend/src/main/java/org/example/backend/reservation/domain/dto/ReservationResDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,50 +1,52 @@ | ||
package org.example.backend.reservation.domain.dto; | ||
|
||
import com.fasterxml.jackson.annotation.JsonFormat; | ||
import lombok.AccessLevel; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import org.example.backend.common.utils.TimeParsingUtils; | ||
import org.example.backend.reservation.domain.Reservation; | ||
import org.example.backend.reservation.domain.ReservationPurpose; | ||
import org.example.backend.reservation.domain.ReservationStatus; | ||
import java.time.LocalDateTime; | ||
|
||
@Getter | ||
@NoArgsConstructor(access = AccessLevel.PROTECTED) | ||
public class ReservationResDto { | ||
private Long id; | ||
private LocalDateTime startTime; | ||
private LocalDateTime endTime; | ||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm") | ||
private String startTime; | ||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm") | ||
private String endTime; | ||
private ReservationPurpose purpose; | ||
private String etc; | ||
private ReservationStatus status; | ||
private String seminarRoomName; | ||
private String repetitionType; | ||
private Long roomId; | ||
private Long userId; | ||
|
||
@Builder | ||
private ReservationResDto(Long id, LocalDateTime startTime, LocalDateTime endTime, | ||
ReservationPurpose purpose, String etc, ReservationStatus status, | ||
String seminarRoomName, Long userId) { | ||
private ReservationResDto(Long id, String startTime, String endTime, | ||
ReservationPurpose purpose, String etc, String repetitionType, | ||
Long roomId, Long userId) { | ||
this.id = id; | ||
this.startTime = startTime; | ||
this.endTime = endTime; | ||
this.purpose = purpose; | ||
this.etc = etc; | ||
this.status = status; | ||
this.seminarRoomName = seminarRoomName; | ||
this.repetitionType = repetitionType; | ||
this.roomId = roomId; | ||
this.userId = userId; | ||
} | ||
|
||
public static ReservationResDto of(Reservation reservation) { | ||
return ReservationResDto.builder() | ||
.id(reservation.getId()) | ||
.startTime(reservation.getStartTime()) | ||
.endTime(reservation.getEndTime()) | ||
.startTime(TimeParsingUtils.formatterString(reservation.getStartTime())) | ||
.endTime(TimeParsingUtils.formatterString(reservation.getEndTime())) | ||
.purpose(reservation.getPurpose()) | ||
.etc(reservation.getEtc()) | ||
.status(reservation.getStatus()) | ||
.seminarRoomName(reservation.getSeminarRoom().getName()) | ||
.userId(reservation.getUserId()) | ||
.repetitionType(reservation.getRepetitionType().name()) | ||
.roomId(reservation.getRoom().getId()) | ||
.userId(reservation.getUser().getId()) | ||
.build(); | ||
} | ||
} |
Oops, something went wrong.