-
Notifications
You must be signed in to change notification settings - Fork 45
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
π 1λ¨κ³ - μμ½ κΈ°λ₯ ꡬν #91
base: yhheo96
Are you sure you want to change the base?
Changes from all commits
b3f9312
38c1520
ab48e61
2d80eaf
3e32603
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package roomescape.application.dto.command; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.Setter; | ||
|
||
@Builder | ||
@Getter | ||
@Setter | ||
public class CreateReservationCommand { | ||
private String name; | ||
private String date; | ||
private String timeId; | ||
} | ||
Comment on lines
+7
to
+14
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. setter κ° νμν μ΄μ κ° μμμκΉμ? |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package roomescape.application.dto.command; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.Setter; | ||
|
||
@Builder | ||
@Getter | ||
@Setter | ||
public class CreateReservationTimeCommand { | ||
private String startAt; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package roomescape.application.dto.result; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.Setter; | ||
import roomescape.domain.Reservation; | ||
|
||
@Builder | ||
@Getter | ||
@Setter | ||
public class CreateReservationResult { | ||
private Long id; | ||
private String name; | ||
private String date; | ||
private CreateReservationTimeResult time; | ||
|
||
public static CreateReservationResult of(Reservation reservation) { | ||
return CreateReservationResult.builder() | ||
.id(reservation.getId()) | ||
.name(reservation.getName()) | ||
.date(reservation.getDate()) | ||
.time(CreateReservationTimeResult.of(reservation.getTime())) | ||
.build(); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package roomescape.application.dto.result; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.Setter; | ||
import roomescape.domain.ReservationTime; | ||
|
||
@Builder | ||
@Getter | ||
@Setter | ||
public class CreateReservationTimeResult { | ||
private Long id; | ||
private String startAt; | ||
|
||
public static CreateReservationTimeResult of(ReservationTime reservationTime){ | ||
return CreateReservationTimeResult.builder() | ||
.id(reservationTime.getId()) | ||
.startAt(reservationTime.getStartAt()) | ||
.build(); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package roomescape.application.dto.result; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.Setter; | ||
|
||
@Builder | ||
@Getter | ||
@Setter | ||
public class GetReservationResult { | ||
private Long id; | ||
private String name; | ||
private String date; | ||
private GetReservationTimeResult time; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package roomescape.application.dto.result; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.Setter; | ||
|
||
@Builder | ||
@Getter | ||
@Setter | ||
public class GetReservationTimeResult { | ||
private Long id; | ||
private String startAt; | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
package roomescape.application.service.reservation; | ||
|
||
import org.springframework.stereotype.Service; | ||
import roomescape.application.dto.command.CreateReservationCommand; | ||
import roomescape.application.dto.command.CreateReservationTimeCommand; | ||
import roomescape.application.dto.result.CreateReservationResult; | ||
import roomescape.application.dto.result.GetReservationResult; | ||
import roomescape.application.dto.result.GetReservationTimeResult; | ||
import roomescape.domain.Reservation; | ||
import roomescape.domain.ReservationTime; | ||
import roomescape.repository.reservation.ReservationRepository; | ||
import roomescape.repository.reservationTime.ReservationTimeRepository; | ||
|
||
import java.util.Collections; | ||
import java.util.List; | ||
import java.util.stream.Collectors; | ||
|
||
@Service | ||
public class ReservationService { | ||
private final ReservationRepository reservationRepository; | ||
private final ReservationTimeRepository reservationTimeRepository; | ||
|
||
public ReservationService(ReservationRepository reservationRepository, ReservationTimeRepository reservationTimeRepository) { | ||
this.reservationRepository = reservationRepository; | ||
this.reservationTimeRepository = reservationTimeRepository; | ||
} | ||
|
||
public List<GetReservationResult> getReservations() { | ||
List<Reservation> reservationList = reservationRepository.findAllReservations(); | ||
if (reservationList.isEmpty()) { | ||
return Collections.emptyList(); | ||
} | ||
|
||
return reservationList | ||
.stream() | ||
.map(reservation -> GetReservationResult.builder() | ||
.id(reservation.getId()) | ||
.name(reservation.getName()) | ||
.date(reservation.getDate()) | ||
.time( | ||
GetReservationTimeResult.builder() | ||
.id(reservation.getTime().getId()) | ||
.startAt(reservation.getTime().getStartAt()) | ||
.build() | ||
) | ||
.build()).collect(Collectors.toList()); | ||
} | ||
|
||
public CreateReservationResult createReservation(CreateReservationCommand command) { | ||
|
||
ReservationTime reservationTime = reservationTimeRepository.findByTimeId(command.getTimeId()); | ||
|
||
return CreateReservationResult.of( | ||
reservationRepository.createReservation(Reservation.create(command), reservationTime) | ||
); | ||
} | ||
|
||
public void deleteReservation(Long id) { | ||
reservationRepository.deleteReservation(id); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package roomescape.application.service.reservationTime; | ||
|
||
import org.springframework.stereotype.Service; | ||
import roomescape.application.dto.result.CreateReservationTimeResult; | ||
import roomescape.application.dto.result.GetReservationTimeResult; | ||
import roomescape.domain.ReservationTime; | ||
import roomescape.repository.reservationTime.ReservationTimeRepository; | ||
|
||
import java.util.List; | ||
import java.util.stream.Collectors; | ||
|
||
@Service | ||
public class ReservationTimeService { | ||
private final ReservationTimeRepository reservationTimeRepository; | ||
|
||
public ReservationTimeService(ReservationTimeRepository reservationTimeRepository) { | ||
this.reservationTimeRepository = reservationTimeRepository; | ||
} | ||
|
||
public List<GetReservationTimeResult> getReservationTimes() { | ||
return reservationTimeRepository.findAll().stream() | ||
.map(reservationTime -> GetReservationTimeResult.builder() | ||
.id(reservationTime.getId()) | ||
.startAt(reservationTime.getStartAt()) | ||
.build()) | ||
.collect(Collectors.toList()); | ||
} | ||
|
||
public CreateReservationTimeResult createReservationTime(String startAt) { | ||
return CreateReservationTimeResult.of(reservationTimeRepository.createReservationTime(ReservationTime.create(startAt))); | ||
} | ||
|
||
public void deleteReservationTime(Long id) { | ||
reservationTimeRepository.deleteReservationTime(id); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package roomescape.domain; | ||
|
||
import lombok.Getter; | ||
import lombok.Setter; | ||
import roomescape.application.dto.command.CreateReservationCommand; | ||
|
||
@Getter | ||
@Setter | ||
public class Reservation { | ||
|
||
private Long id; | ||
private String name; | ||
private String date; | ||
private ReservationTime time; | ||
|
||
public Reservation(Long id, String name, String date, ReservationTime time | ||
) { | ||
this.id = id; | ||
this.name = name; | ||
this.date = date; | ||
this.time = time; | ||
Comment on lines
+7
to
+21
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. entity = id + vo λΌκ³ μκ°νλλ°μ, id λ₯Ό ν΅ν΄μ μλ‘ κ°μ λ°μ΄ν°λΌκ³ μλ³νκΈ° λλ¬Έμ΄μμ. κ°λ Ή μ΄λ₯Ό ννν΄μ£ΌκΈ° μν΄ id μ λν΄μλ§ equals & hashcode override λ₯Ό ν΄μ£Όλ κ²μ μ΄λ¨κΉμ? |
||
} | ||
|
||
public static Reservation create(CreateReservationCommand command) { | ||
return new Reservation(null, command.getName(), command.getDate(), null); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
package roomescape.domain; | ||
|
||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.Setter; | ||
|
||
@Builder | ||
@Getter | ||
@Setter | ||
public class ReservationTime { | ||
private Long id; | ||
private String startAt; | ||
|
||
public ReservationTime(Long id, String startAt) { | ||
this.id = id; | ||
this.startAt = startAt; | ||
} | ||
|
||
public static ReservationTime create(String startAt) { | ||
return new ReservationTime(null, startAt); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
package roomescape.presentation.controller.api.reservation; | ||
|
||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.*; | ||
import roomescape.application.service.reservation.ReservationService; | ||
import roomescape.presentation.dto.request.CreateReservationRequest; | ||
import roomescape.presentation.dto.response.CreateReservationResponse; | ||
import roomescape.presentation.dto.response.GetReservationListResponse; | ||
import roomescape.presentation.dto.response.GetReservationTimeListResponse; | ||
|
||
import java.util.List; | ||
import java.util.stream.Collectors; | ||
|
||
@RestController | ||
@RequestMapping("/reservations") | ||
public class ReservationApiController { | ||
private final ReservationService reservationService; | ||
|
||
public ReservationApiController(ReservationService reservationService) { | ||
this.reservationService = reservationService; | ||
} | ||
|
||
@GetMapping | ||
public ResponseEntity<List<GetReservationListResponse>> getReservations() { | ||
return ResponseEntity.ok().body( | ||
reservationService.getReservations().stream() | ||
.map(reservation -> GetReservationListResponse.builder() | ||
.id(reservation.getId()) | ||
.name(reservation.getName()) | ||
.date(reservation.getDate()) | ||
.time(GetReservationTimeListResponse.of(reservation.getTime())) | ||
.build()) | ||
.collect(Collectors.toList()) | ||
); | ||
} | ||
|
||
@PostMapping | ||
public ResponseEntity<CreateReservationResponse> createReservation( | ||
@RequestBody CreateReservationRequest request | ||
) { | ||
return ResponseEntity.ok().body( | ||
CreateReservationResponse.of( | ||
reservationService.createReservation(request.toCommand()) | ||
) | ||
); | ||
} | ||
|
||
@DeleteMapping("/{id}") | ||
public ResponseEntity<Void> deleteReservation( | ||
@PathVariable Long id | ||
) { | ||
reservationService.deleteReservation(id); | ||
return ResponseEntity.ok().build(); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
package roomescape.presentation.controller.api.reservationTime; | ||
|
||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.*; | ||
import roomescape.application.service.reservationTime.ReservationTimeService; | ||
import roomescape.presentation.dto.request.CreateReservationTimeRequest; | ||
import roomescape.presentation.dto.response.CreateReservationTimeResponse; | ||
import roomescape.presentation.dto.response.GetReservationTimeListResponse; | ||
|
||
import java.util.List; | ||
import java.util.stream.Collectors; | ||
|
||
@RestController | ||
@RequestMapping("/times") | ||
public class ReservationTimeApiController { | ||
private final ReservationTimeService reservationTimeService; | ||
|
||
public ReservationTimeApiController(ReservationTimeService reservationTimeService) { | ||
this.reservationTimeService = reservationTimeService; | ||
} | ||
|
||
@GetMapping | ||
public ResponseEntity<List<GetReservationTimeListResponse>> getReservationTimes() { | ||
return ResponseEntity.ok().body( | ||
reservationTimeService.getReservationTimes().stream() | ||
.map(reservationTime -> GetReservationTimeListResponse.builder() | ||
.id(reservationTime.getId()) | ||
.startAt(reservationTime.getStartAt()) | ||
.build()) | ||
.collect(Collectors.toList()) | ||
); | ||
} | ||
|
||
@PostMapping | ||
public ResponseEntity<CreateReservationTimeResponse> createReservationTime( | ||
@RequestBody CreateReservationTimeRequest request | ||
) { | ||
|
||
return ResponseEntity.ok().body( | ||
CreateReservationTimeResponse.of( | ||
reservationTimeService.createReservationTime(request.getStartAt()) | ||
) | ||
); | ||
} | ||
|
||
@DeleteMapping("/{id}") | ||
public ResponseEntity<Void> deleteReservationTime( | ||
@PathVariable Long id | ||
) { | ||
reservationTimeService.deleteReservationTime(id); | ||
return ResponseEntity.ok().build(); | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
package roomescape.presentation.controller.web.admin; | ||
|
||
import org.springframework.stereotype.Controller; | ||
import org.springframework.web.bind.annotation.RequestMapping; | ||
|
||
@Controller | ||
public class HomeController { | ||
|
||
@RequestMapping("/admin") | ||
public String index(){ | ||
return "admin/index"; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
둬볡μ μ μ©νμ μ΄μ κ° κΆκΈν΄μ!