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

πŸš€ 1단계 - μ˜ˆμ•½ κΈ°λŠ₯ κ΅¬ν˜„ #91

Open
wants to merge 5 commits into
base: yhheo96
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 2 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.projectlombok:lombok'
annotationProcessor('org.projectlombok:lombok')
runtimeOnly 'com.h2database:h2'
Comment on lines 19 to 22
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

둬볡을 μ μš©ν•˜μ‹  μ΄μœ κ°€ κΆκΈˆν•΄μš”!

testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.rest-assured:rest-assured:5.3.1'
Expand Down
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
Copy link
Member

Choose a reason for hiding this comment

The 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);
}
}
27 changes: 27 additions & 0 deletions src/main/java/roomescape/domain/Reservation.java
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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

entity = id + vo 라고 μƒκ°ν•˜λŠ”λ°μš”, id λ₯Ό ν†΅ν•΄μ„œ μ„œλ‘œ 같은 데이터라고 μ‹λ³„ν•˜κΈ° λ•Œλ¬Έμ΄μ—μš”.

κ°€λ Ή id = 1, name = "μœ€ν–‰" κ³Ό id = 1, name = "ν–‰μœ€" 은 μ„œλ‘œ 같은 λ°μ΄ν„°λ‘œ,
id = 1, name = "μœ€ν–‰" κ³Ό id = 9, name = "μœ€ν–‰" 은 μ„œλ‘œ λ‹€λ₯Έ λ°μ΄ν„°λ‘œ λ³Ό 수 μžˆκ² λ„€μš”.

이λ₯Ό ν‘œν˜„ν•΄μ£ΌκΈ° μœ„ν•΄ id 에 λŒ€ν•΄μ„œλ§Œ equals & hashcode override λ₯Ό ν•΄μ£ΌλŠ” 것은 μ–΄λ–¨κΉŒμš”?

}

public static Reservation create(CreateReservationCommand command) {
return new Reservation(null, command.getName(), command.getDate(), null);
}
}
22 changes: 22 additions & 0 deletions src/main/java/roomescape/domain/ReservationTime.java
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";
}
}
Loading