11package roomescape .controller ;
22
3- import org .springframework .http .HttpStatus ;
43import org .springframework .http .ResponseEntity ;
5- import org .springframework .jdbc .core .JdbcTemplate ;
6- import org .springframework .jdbc .core .RowMapper ;
7- import org .springframework .jdbc .support .GeneratedKeyHolder ;
8- import org .springframework .jdbc .support .KeyHolder ;
94import org .springframework .stereotype .Controller ;
105import org .springframework .web .bind .annotation .*;
11- import roomescape .exception .NotFoundReservationException ;
126import roomescape .model .Reservation ;
13- import roomescape .model .ReservationRequest ;
14- import roomescape .model . Time ;
7+ import roomescape .model .ReservationRequest ;;
8+ import roomescape .service . ReservationService ;
159
1610import java .net .URI ;
17- import java .sql .PreparedStatement ;
1811import java .util .List ;
1912
2013@ Controller
2114public class ReservationController {
2215
23- private final JdbcTemplate jdbcTemplate ;
16+ private final ReservationService reservationService ;
2417
25- public ReservationController (JdbcTemplate jdbcTemplate ) {
26- this .jdbcTemplate = jdbcTemplate ;
18+ public ReservationController (ReservationService reservationService ) {
19+ this .reservationService = reservationService ;
2720 }
2821
29- private final RowMapper <Reservation > reservationRowMapper = (rs , rowNum ) -> new Reservation (
30- rs .getLong ("reservation_id" ),
31- rs .getString ("name" ),
32- rs .getString ("date" ),
33- new Time (rs .getLong ("time_id" ), rs .getString ("time_value" ))
34- );
35-
3622 // 예약 관리 페이지
3723 @ GetMapping ("/reservation" )
3824 public String reservationPage () {
@@ -43,61 +29,22 @@ public String reservationPage() {
4329 @ GetMapping ("/reservations" )
4430 @ ResponseBody
4531 public ResponseEntity <List <Reservation >> getReservations () {
46- String sql = """
47- SELECT
48- r.id as reservation_id,
49- r.name,
50- r.date,
51- t.id as time_id,
52- t.time as time_value
53- FROM reservation as r
54- INNER JOIN time as t
55- ON r.time_id = t.id
56- """ ;
57- List <Reservation > reservations = jdbcTemplate .query (sql , reservationRowMapper );
32+ List <Reservation > reservations = reservationService .getReservations ();
5833 return ResponseEntity .ok (reservations );
5934 }
6035
6136 // 예약 추가
6237 @ PostMapping ("/reservations" )
6338 @ ResponseBody
6439 public ResponseEntity <Reservation > addReservation (@ RequestBody ReservationRequest request ) {
65- request .validateAndSetTimeId (jdbcTemplate );
66-
67- // 예약 추가
68- String sql = "INSERT INTO reservation (name, date, time_id) VALUES (?, ?, ?)" ;
69- KeyHolder keyHolder = new GeneratedKeyHolder ();
70-
71- jdbcTemplate .update (connection -> {
72- PreparedStatement ps = connection .prepareStatement (sql , new String []{"id" });
73- ps .setString (1 , request .getName ());
74- ps .setString (2 , request .getDate ());
75- ps .setLong (3 , request .getTimeId ());
76- return ps ;
77- }, keyHolder );
78-
79- Long id = keyHolder .getKey ().longValue ();
80-
81- String timeQuery = "SELECT time FROM time WHERE id = ?" ;
82- String timeValue = jdbcTemplate .queryForObject (timeQuery , String .class , request .getTime ());
83-
84- Reservation newReservation = new Reservation (id , request .getName (), request .getDate (),
85- new Time (request .getTimeId (), timeValue ));
86-
87-
88- return ResponseEntity .created (URI .create ("/reservations/" + id )).body (newReservation );
40+ Reservation newReservation = reservationService .addReservation (request );
41+ return ResponseEntity .created (URI .create ("/reservations/" + newReservation .getId ())).body (newReservation );
8942 }
9043
9144 // 예약 삭제
9245 @ DeleteMapping ("/reservations/{id}" )
9346 public ResponseEntity <Void > deleteReservation (@ PathVariable Long id ) {
94- String sql = "DELETE FROM reservation WHERE id = ?" ;
95- int rowsAffected = jdbcTemplate .update (sql , id );
96-
97- if (rowsAffected > 0 ) {
98- return new ResponseEntity <>(HttpStatus .NO_CONTENT );
99- }
100-
101- throw new NotFoundReservationException ("삭제할 예약이 없습니다." );
47+ reservationService .deleteReservation (id );
48+ return ResponseEntity .noContent ().build ();
10249 }
10350}
0 commit comments