Skip to content

Commit 9f4ec62

Browse files
committed
fix: 구조 변경
1 parent bad771c commit 9f4ec62

File tree

10 files changed

+190
-59
lines changed

10 files changed

+190
-59
lines changed

src/main/java/roomescape/controller/ReservationController.java

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,20 @@
88
import org.springframework.web.bind.annotation.PostMapping;
99
import org.springframework.web.bind.annotation.RequestBody;
1010
import org.springframework.web.bind.annotation.ResponseBody;
11-
import roomescape.dto.Reservation;
12-
import roomescape.exception.InvalidValueException;
13-
import roomescape.exception.NotFoundReservationException;
14-
import roomescape.repository.ReservationRepository;
11+
import roomescape.dto.ReservationRequestDto;
12+
import roomescape.dto.ReservationResponseDto;
13+
import roomescape.service.ReservationService;
1514

1615
import java.net.URI;
17-
import java.util.ArrayList;
1816
import java.util.List;
19-
import java.util.concurrent.atomic.AtomicLong;
2017

2118
@Controller
2219
public class ReservationController {
2320

24-
private final ReservationRepository reservationRepository;
21+
private final ReservationService reservationService;
2522

26-
public ReservationController(ReservationRepository repository) {
27-
this.reservationRepository = repository;
23+
public ReservationController(ReservationService reservationService) {
24+
this.reservationService = reservationService;
2825
}
2926

3027
// 홈화면
@@ -36,21 +33,17 @@ public String reservationPage() {
3633
//예약 조회
3734
@ResponseBody
3835
@GetMapping("/reservations")
39-
public List<Reservation> list() {
40-
return reservationRepository.findAll();
36+
public ResponseEntity<List<ReservationResponseDto>> list() {
37+
List<ReservationResponseDto> reservations = reservationService.getAllReservations();
38+
return ResponseEntity.ok(reservations);
4139
}
4240

4341
//예약 추가
4442
@ResponseBody
4543
@PostMapping("/reservations")
46-
public ResponseEntity<Reservation> create(@RequestBody Reservation newReservation) {
47-
if (newReservation.getName() == null || newReservation.getName().isEmpty() ||
48-
newReservation.getDate() == null || newReservation.getDate().isEmpty() ||
49-
newReservation.getTime() == null || newReservation.getTime().isEmpty()) {
50-
throw new InvalidValueException("예약 추가에 필요한 인자값이 비어있습니다.");
51-
}
44+
public ResponseEntity<ReservationResponseDto> create(@RequestBody ReservationRequestDto newReservationDto) {
5245

53-
Reservation reservation = reservationRepository.insert(newReservation);
46+
ReservationResponseDto reservation = reservationService.createReservation(newReservationDto);
5447

5548
return ResponseEntity.created(URI.create("/reservations/" + reservation.getId()))
5649
.body(reservation);
@@ -59,10 +52,7 @@ public ResponseEntity<Reservation> create(@RequestBody Reservation newReservatio
5952
//예약 삭제
6053
@DeleteMapping("/reservations/{id}")
6154
public ResponseEntity<Void> delete(@PathVariable Long id) {
62-
// 수정예정 Reservation reservation = reservationRepository.fin
63-
// .orElseThrow(() -> new NotFoundReservationException("예약을 찾을 수 없습니다."));
64-
65-
reservationRepository.delete(id);
55+
reservationService.deleteReservation(id);
6656
return ResponseEntity.noContent().build();
6757
}
6858
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package roomescape.dao;
2+
3+
import org.springframework.jdbc.core.JdbcTemplate;
4+
import org.springframework.stereotype.Repository;
5+
import roomescape.entity.Reservation;
6+
7+
import java.util.List;
8+
9+
@Repository
10+
public class ReservationDao {
11+
12+
private final JdbcTemplate jdbcTemplate;
13+
14+
public ReservationDao(JdbcTemplate jdbcTemplate) {
15+
this.jdbcTemplate = jdbcTemplate;
16+
}
17+
18+
public List<Reservation> findAll(){
19+
String sql = "SELECT id, name, date, time FROM reservation";
20+
21+
return jdbcTemplate.query(
22+
sql, (resultSet, rowNum) -> new Reservation(
23+
resultSet.getLong("id"),
24+
resultSet.getString("name"),
25+
resultSet.getString("date"),
26+
resultSet.getTimestamp("time").toLocalDateTime()
27+
));
28+
}
29+
30+
public Reservation insert(Reservation reservation) {
31+
String sql = "INSERT INTO reservation(name, date, time) VALUES (?, ?, ?)";
32+
jdbcTemplate.update(sql, reservation.getName(), reservation.getDate(), reservation.getTime());
33+
34+
String query = "SELECT id FROM reservation ORDER BY id DESC LIMIT 1";
35+
Long id = jdbcTemplate.queryForObject(query, Long.class);
36+
37+
return new Reservation(id, reservation.getName(), reservation.getDate(), reservation.getTime());
38+
}
39+
40+
public void delete(Long id) {
41+
String sql = "DELETE FROM reservation WHERE id = ?";
42+
jdbcTemplate.update(sql, id);
43+
}
44+
45+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package roomescape.dto;
2+
3+
import java.time.LocalDateTime;
4+
5+
public class ReservationRequestDto {
6+
private String name;
7+
private String date;
8+
private LocalDateTime time;
9+
10+
public ReservationRequestDto(String name, String date, LocalDateTime time) {
11+
this.name = name;
12+
this.date = date;
13+
this.time = time;
14+
}
15+
16+
public String getName() {
17+
return name;
18+
}
19+
20+
public String getDate() {
21+
return date;
22+
}
23+
24+
public LocalDateTime getTime() {
25+
return time;
26+
}
27+
}

src/main/java/roomescape/dto/Reservation.java renamed to src/main/java/roomescape/dto/ReservationResponseDto.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package roomescape.dto;
22

3-
public class Reservation {
3+
import java.time.LocalDate;
4+
import java.time.LocalDateTime;
45

6+
public class ReservationResponseDto {
57
private Long id;
68
private String name;
79
private String date;
8-
private String time;
10+
private LocalDateTime time;
911

10-
public Reservation(Long id, String name, String date, String time) {
12+
public ReservationResponseDto(Long id, String name, String date, LocalDateTime time) {
1113
this.id = id;
1214
this.name = name;
1315
this.date = date;
@@ -26,8 +28,7 @@ public String getDate() {
2628
return date;
2729
}
2830

29-
public String getTime() {
31+
public LocalDateTime getTime() {
3032
return time;
3133
}
32-
3334
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package roomescape.entity;
2+
3+
import java.time.LocalDateTime;
4+
5+
public class Reservation {
6+
private Long id;
7+
private String name;
8+
private String date;
9+
private LocalDateTime time;
10+
11+
public Reservation(Long id, String name, String date, LocalDateTime time) {
12+
this.id = id;
13+
this.name = name;
14+
this.date = date;
15+
this.time = time;
16+
}
17+
18+
public Reservation(String name, String date, LocalDateTime time) {
19+
this(null, name, date, time);
20+
}
21+
22+
public Long getId() {
23+
return id;
24+
}
25+
26+
public String getName() {
27+
return name;
28+
}
29+
30+
public String getDate() {
31+
return date;
32+
}
33+
34+
public LocalDateTime getTime() {
35+
return time;
36+
}
37+
}

src/main/java/roomescape/repository/ReservationRepository.java

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,52 +3,32 @@
33
import org.springframework.http.ResponseEntity;
44
import org.springframework.jdbc.core.JdbcTemplate;
55
import org.springframework.stereotype.Repository;
6-
import roomescape.dto.Reservation;
6+
import roomescape.dao.ReservationDao;
7+
import roomescape.entity.Reservation;
78

89
import java.util.List;
910

1011
@Repository
1112
public class ReservationRepository {
1213

13-
private final JdbcTemplate jdbcTemplate;
14+
private final ReservationDao reservationDao;
1415

15-
public ReservationRepository(JdbcTemplate jdbcTemplate) {
16-
this.jdbcTemplate = jdbcTemplate;
16+
public ReservationRepository(ReservationDao reservationDao) {
17+
this.reservationDao = reservationDao;
1718
}
1819

19-
//예약 조회
2020
public List<Reservation> findAll() {
21-
String sql = "SELECT id, name, date, time FROM reservation";
22-
23-
return jdbcTemplate.query(
24-
sql, (resultSet, rowNum) -> new Reservation(
25-
resultSet.getLong("id"),
26-
resultSet.getString("name"),
27-
resultSet.getString("date"),
28-
resultSet.getString("time")
29-
));
21+
return reservationDao.findAll();
3022
}
3123

3224
//예약 추가
3325
public Reservation insert(Reservation reservation) {
34-
try {
35-
String sql = "INSERT INTO reservation(name, date, time) VALUES (?, ?, ?)";
36-
jdbcTemplate.update(sql, reservation.getName(), reservation.getDate(), reservation.getTime());
37-
38-
String query = "SELECT id FROM reservation ORDER BY id DESC LIMIT 1";
39-
Long id = jdbcTemplate.queryForObject(query, Long.class);
40-
41-
return new Reservation(id, reservation.getName(), reservation.getDate(), reservation.getTime());
42-
} catch (Exception ex) {
43-
throw new RuntimeException("오류가 발생하였습니다.");
44-
}
26+
return reservationDao.insert(reservation);
4527
}
4628

4729
//예약 삭제
48-
public ResponseEntity<Object> delete(Long id) {
49-
String sql = "DELETE FROM reservation WHERE id = ?";
50-
jdbcTemplate.update(sql, Long.valueOf(id));
51-
return ResponseEntity.noContent().build();
30+
public void delete(Long id) {
31+
reservationDao.delete(id);
5232
}
5333
}
5434

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package roomescape.service;
2+
3+
import org.springframework.stereotype.Service;
4+
import roomescape.dto.ReservationRequestDto;
5+
import roomescape.dto.ReservationResponseDto;
6+
import roomescape.entity.Reservation;
7+
import roomescape.repository.ReservationRepository;
8+
9+
import java.util.List;
10+
import java.util.stream.Collectors;
11+
12+
@Service
13+
public class ReservationService {
14+
15+
private final ReservationRepository reservationRepository;
16+
17+
public ReservationService(ReservationRepository reservationRepository) {
18+
this.reservationRepository = reservationRepository;
19+
}
20+
21+
public List<ReservationResponseDto> getAllReservations(){
22+
return reservationRepository.findAll()
23+
.stream()
24+
.map(this::toResponseDto)
25+
.collect(Collectors.toList());
26+
}
27+
28+
public ReservationResponseDto createReservation(ReservationRequestDto requestDto){
29+
30+
Reservation reservation = new Reservation(
31+
requestDto.getName(),
32+
requestDto.getDate(),
33+
requestDto.getTime()
34+
);
35+
Reservation savedReservation = reservationRepository.insert(reservation);
36+
return toResponseDto(savedReservation);
37+
}
38+
39+
public void deleteReservation(Long id){
40+
reservationRepository.delete(id);
41+
}
42+
43+
private ReservationResponseDto toResponseDto(Reservation reservation) {
44+
return new ReservationResponseDto(
45+
reservation.getId(),
46+
reservation.getName(),
47+
reservation.getDate(),
48+
reservation.getTime()
49+
);
50+
}
51+
}

src/main/resources/schema.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ CREATE TABLE reservation
33
id BIGINT NOT NULL AUTO_INCREMENT,
44
name VARCHAR(255) NOT NULL,
55
date VARCHAR(255) NOT NULL,
6-
time VARCHAR(255) NOT NULL,
6+
time Timestamp NOT NULL,
77
PRIMARY KEY (id)
88
);

src/test/java/roomescape/MissionStepTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class MissionStepTest {
3434
.when().get("/reservations")
3535
.then().log().all()
3636
.statusCode(200)
37-
.body("size()", is(3)); // 아직 생성 요청이 없으니 Controller에서 임의로 넣어준 Reservation 갯수 만큼 검증하거나 0개임을 확인하세요.
37+
.body("size()", is(0)); // 아직 생성 요청이 없으니 Controller에서 임의로 넣어준 Reservation 갯수 만큼 검증하거나 0개임을 확인하세요.
3838
}
3939

4040
@Test

src/test/java/roomescape/MissionStepTest2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import org.springframework.boot.test.context.SpringBootTest;
88
import org.springframework.jdbc.core.JdbcTemplate;
99
import org.springframework.test.annotation.DirtiesContext;
10-
import roomescape.dto.Reservation;
10+
import roomescape.entity.Reservation;
1111

1212
import java.sql.Connection;
1313
import java.sql.SQLException;

0 commit comments

Comments
 (0)