Skip to content

Commit

Permalink
resolve conflict
Browse files Browse the repository at this point in the history
  • Loading branch information
Hanna committed Jan 10, 2024
2 parents b1ca29c + 2b56d06 commit f80bea6
Show file tree
Hide file tree
Showing 103 changed files with 1,396 additions and 754 deletions.
10 changes: 10 additions & 0 deletions api/api-booking/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,14 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-security'

implementation 'io.jsonwebtoken:jjwt-api:0.12.3'
implementation 'io.jsonwebtoken:jjwt-impl:0.12.3'
implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3'

// querydsl
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}
50 changes: 35 additions & 15 deletions api/api-booking/http/booking.http
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
### 세션 아이디 발급
POST http://localhost:8082/api/v1/bookings/issue-session-id
#Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ

### 대기열 진입
POST http://localhost:8082/api/v1/bookings/enter-queue
Content-Type: application/json
#Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Booking-Session-Id: {sessionId}

{
Expand All @@ -14,14 +14,14 @@ Booking-Session-Id: {sessionId}

### 대기열 조회
GET http://localhost:8082/api/v1/bookings/order-in-queue?eventId=1
#Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Booking-Session-Id: {sessionId}


### 예매 토큰 발급
POST http://localhost:8082/api/v1/bookings/issue-token
Content-Type: application/json
#Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Booking-Session-Id: {sessionId}

{
Expand All @@ -31,7 +31,7 @@ Booking-Session-Id: {sessionId}
### [Optional] 대기열 이탈
POST http://localhost:8082/api/v1/bookings/exit-queue
Content-Type: application/json
#Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Booking-Session-Id: {sessionId}

{
Expand All @@ -40,30 +40,50 @@ Booking-Session-Id: {sessionId}

### 좌석 목록 조회
GET http://localhost:8082/api/v1/seats?eventTimeId=1
#Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Booking-Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJib29raW5nIiwiaWF0IjoxNzA0NzA0NTY0LCJleHAiOjQyMDAxNzA0NzA0NTY0LCJzZXNzaW9uSWQiOiJ7Pz8_Pz99In0.iKZaud5vfvsMzXmQzl1WaCweL9GL00U0iGzCg4_p3Zzei8Y7z19Ff_TTpxh9gLeB

### 예매 ~ 결제 승인 (브라우저에서 진행해 주세요)
### 좌석 선택
POST http://localhost:8082/api/v1/seats/1/select
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Booking-Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJib29raW5nIiwiaWF0IjoxNzA0NzA0NTY0LCJleHAiOjQyMDAxNzA0NzA0NTY0LCJzZXNzaW9uSWQiOiJ7Pz8_Pz99In0.iKZaud5vfvsMzXmQzl1WaCweL9GL00U0iGzCg4_p3Zzei8Y7z19Ff_TTpxh9gLeB

{
"seatId": 1
}

### 좌석 선택 해제
POST http://localhost:8082/api/v1/seats/1/deselect
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Booking-Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJib29raW5nIiwiaWF0IjoxNzA0NzA0NTY0LCJleHAiOjQyMDAxNzA0NzA0NTY0LCJzZXNzaW9uSWQiOiJ7Pz8_Pz99In0.iKZaud5vfvsMzXmQzl1WaCweL9GL00U0iGzCg4_p3Zzei8Y7z19Ff_TTpxh9gLeB

{
"seatId": 1
}

### 예매 ~ 결제 (브라우저에서 진행해 주세요)
GET http://localhost:8082/bookings

### [Optional] 예매 이탈
POST http://localhost:8082/api/v1/bookings/bookingCreateTestId/exit
#Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Booking-Authorization: Bearer eyJhbGciOiJIUzM4NCJ9.eyJpc3MiOiJib29raW5nIiwiaWF0IjoxNzA0NzA0NTY0LCJleHAiOjQyMDAxNzA0NzA0NTY0LCJzZXNzaW9uSWQiOiJ7Pz8_Pz99In0.iKZaud5vfvsMzXmQzl1WaCweL9GL00U0iGzCg4_p3Zzei8Y7z19Ff_TTpxh9gLeB

### 예매 취소 (브라우저에서 생성된 예매 번호로 진행해 주세요)
### 예매 취소 (브라우저에서 생성된 예매번호로 진행해 주세요)
POST http://localhost:8082/api/v1/bookings/{bookingId}/cancel
#Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Content-Type: application/json

{
"cancelReason": "변심"
}

### 예매 내역 목록 조회
### 예매 내역 목록 조회
GET http://localhost:8082/api/v1/bookings
#Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ

### 예매 내역 상세 조회
GET http://localhost:8082/api/v1/bookings/{bookingId}
#Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
### 예매 내역 상세 조회
GET http://localhost:8082/api/v1/bookings/bookingCancelTestId
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwic3ViIjoiam9obi5kb2VAZXhhbXBsZS5jb20iLCJpYXQiOjE3MDQ2OTE0OTEsImV4cCI6MTgwNDY4MzI5MSwiYXV0aG9yaXR5IjoiUk9MRV9VU0VSIn0.wFNSz2uwRa35jP1KihNlTOewVLgMMeg3ADQ5Kztl3QQ
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package com.pgms.apibooking.common.exception;

import com.pgms.coredomain.domain.common.BookingErrorCode;
import com.pgms.coredomain.domain.common.BaseErrorCode;

import lombok.Getter;

@Getter
public class BookingException extends RuntimeException {

private final BookingErrorCode errorCode;
private final BaseErrorCode errorCode;

public BookingException(BookingErrorCode errorCode) {
public BookingException(BaseErrorCode errorCode) {
super(errorCode.getMessage());
this.errorCode = errorCode;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,7 @@ public class BookingExceptionHandler extends ResponseEntityExceptionHandler {
protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers,
HttpStatusCode statusCode, WebRequest request) {
if (ex instanceof BindException) {
BookingErrorCode errorCode = BookingErrorCode.INVALID_INPUT_VALUE;
ErrorResponse response = new ErrorResponse(errorCode.getCode(), errorCode.getMessage());
ErrorResponse response = BookingErrorCode.INVALID_INPUT_VALUE.getErrorResponse();

((BindException)ex).getBindingResult().getAllErrors().forEach(e -> {
String fieldName = ((FieldError)e).getField();
Expand All @@ -42,16 +41,14 @@ protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object bo

log.error(ex.getMessage(), ex);

BookingErrorCode errorCode = BookingErrorCode.INTERNAL_SERVER_ERROR;
ErrorResponse response = new ErrorResponse(errorCode.getCode(), errorCode.getMessage());
ErrorResponse response = BookingErrorCode.INTERNAL_SERVER_ERROR.getErrorResponse();
return ResponseEntity.internalServerError().body(response);
}

@Override
protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex,
HttpHeaders headers, HttpStatusCode status, WebRequest request) {
BookingErrorCode errorCode = BookingErrorCode.INVALID_INPUT_VALUE;
ErrorResponse response = new ErrorResponse(errorCode.getCode(), errorCode.getMessage());
ErrorResponse response = BookingErrorCode.INVALID_INPUT_VALUE.getErrorResponse();
return ResponseEntity.badRequest().body(response);
}

Expand All @@ -61,13 +58,13 @@ protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotV
BindingResult bindingResult = ex.getBindingResult();
String errorMessage = Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage();
log.warn("Validation Failed: {}", errorMessage);
ErrorResponse response = new ErrorResponse(BookingErrorCode.INVALID_INPUT_VALUE.getCode(), errorMessage);
ErrorResponse response = BookingErrorCode.INVALID_INPUT_VALUE.getErrorResponse();
return ResponseEntity.status(status).body(response);
}

@ExceptionHandler(BookingException.class)
protected ResponseEntity<ErrorResponse> handleBookingException(BookingException ex) {
ErrorResponse response = new ErrorResponse(ex.getErrorCode().getCode(), ex.getErrorCode().getMessage());
ErrorResponse response = ex.getErrorCode().getErrorResponse();
log.warn("Booking Exception Occurred : {}", response.getErrorMessage());
return ResponseEntity.status(ex.getErrorCode().getStatus()).body(response);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.pgms.apibooking.common.interceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import com.pgms.apibooking.common.exception.BookingException;
import com.pgms.apibooking.common.jwt.BookingJwtPayload;
import com.pgms.apibooking.common.jwt.BookingJwtProvider;
import com.pgms.coredomain.domain.common.BookingErrorCode;

import io.jsonwebtoken.JwtException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

@Component
@Slf4j
@RequiredArgsConstructor
public class BookingTokenInterceptor implements HandlerInterceptor {

private final BookingJwtProvider bookingJwtProvider;

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
Exception {
String token = parseToken(request);
try {
BookingJwtPayload authentication = bookingJwtProvider.validateAndParsePayload(token);
request.setAttribute("tokenSessionId", authentication.sessionId());
} catch (JwtException | BookingException e) {
log.warn(e.getMessage(), e);
throw new BookingException(BookingErrorCode.INVALID_BOOKING_TOKEN);
}
return true;
}

private String parseToken(HttpServletRequest request) {
String headerAuth = request.getHeader("Booking-Authorization");
if (headerAuth != null && headerAuth.startsWith("Bearer ")) {
return headerAuth.substring(7);
}
throw new BookingException(BookingErrorCode.BOOKING_TOKEN_NOT_EXIST);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.pgms.coresecurity.security.jwt.booking;
package com.pgms.apibooking.common.jwt;

import java.util.HashMap;
import java.util.Map;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.pgms.coresecurity.security.jwt.booking;
package com.pgms.apibooking.common.jwt;

import java.util.Date;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package com.pgms.coresecurity.security.config;
package com.pgms.apibooking.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.pgms.coresecurity.security.jwt.booking.BookingJwtProvider;

import com.pgms.apibooking.common.jwt.BookingJwtProvider;
import io.jsonwebtoken.security.Keys;

import lombok.Getter;

@Getter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import com.pgms.apibooking.common.interceptor.BookingSessionInterceptor;
import com.pgms.apibooking.common.interceptor.BookingTokenInterceptor;

import lombok.RequiredArgsConstructor;

Expand All @@ -15,6 +16,7 @@
public class WebConfig implements WebMvcConfigurer {

private final BookingSessionInterceptor bookingSessionInterceptor;
private final BookingTokenInterceptor bookingTokenInterceptor;

@Override
public void addInterceptors(InterceptorRegistry registry) {
Expand All @@ -23,5 +25,11 @@ public void addInterceptors(InterceptorRegistry registry) {
.addPathPatterns("/api/*/bookings/order-in-queue")
.addPathPatterns("/api/*/bookings/issue-token")
.addPathPatterns("/api/*/bookings/exit-queue");
registry.addInterceptor(bookingTokenInterceptor)
.addPathPatterns("/api/*/bookings/create")
.addPathPatterns("/api/*/exit")
.addPathPatterns("/api/*/seats")
.addPathPatterns("/api/*/*/select")
.addPathPatterns("/api/*/*/deselect");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,24 @@
import java.net.URI;

import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;

import com.pgms.apibooking.domain.booking.dto.request.BookingCancelRequest;
import com.pgms.apibooking.domain.booking.dto.request.BookingCreateRequest;
import com.pgms.apibooking.domain.booking.dto.request.BookingSearchCondition;
import com.pgms.apibooking.domain.booking.dto.request.PageCondition;
import com.pgms.apibooking.domain.booking.dto.response.BookingCreateResponse;
import com.pgms.apibooking.domain.booking.dto.response.BookingGetResponse;
import com.pgms.apibooking.domain.booking.dto.response.BookingsGetResponse;
import com.pgms.apibooking.domain.booking.dto.response.PageResponse;
import com.pgms.apibooking.domain.booking.service.BookingService;
import com.pgms.coredomain.response.ApiResponse;
import com.pgms.coresecurity.security.resolver.CurrentAccount;
Expand All @@ -21,19 +29,20 @@
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;

@Controller
@RestController
@RequestMapping("/api/v1/bookings")
@RequiredArgsConstructor
public class BookingController { //TODO: 인증된 멤버 연동
public class BookingController {

private final BookingService bookingService;

@PostMapping
@PostMapping("/create")
public ResponseEntity<ApiResponse<BookingCreateResponse>> createBooking(
//@CurrentAccount Long memberId,
@CurrentAccount Long memberId,
@RequestBody @Valid BookingCreateRequest request,
@RequestAttribute("tokenSessionId") String tokenSessionId,
HttpServletRequest httpRequest) {
BookingCreateResponse createdBooking = bookingService.createBooking(request, 1L);
BookingCreateResponse createdBooking = bookingService.createBooking(request, memberId, tokenSessionId);
ApiResponse<BookingCreateResponse> response = ApiResponse.ok(createdBooking);
URI location = UriComponentsBuilder
.fromHttpUrl(httpRequest.getRequestURL().toString())
Expand All @@ -45,10 +54,10 @@ public ResponseEntity<ApiResponse<BookingCreateResponse>> createBooking(

@PostMapping("/{id}/cancel")
public ResponseEntity<Void> cancelBooking(
//@CurrentAccount Long memberId,
@CurrentAccount Long memberId,
@PathVariable String id,
@RequestBody @Valid BookingCancelRequest request) {
bookingService.cancelBooking(id, request, 1L);
bookingService.cancelBooking(id, request, memberId);
return ResponseEntity.ok().build();
}

Expand All @@ -57,4 +66,25 @@ public ResponseEntity<Void> exitBooking(@PathVariable String id) {
bookingService.exitBooking(id);
return ResponseEntity.ok().build();
}

@GetMapping
public ResponseEntity<ApiResponse<PageResponse<BookingsGetResponse>>> getBookings(
@CurrentAccount Long memberId,
@ModelAttribute @Valid PageCondition pageCondition,
@ModelAttribute @Valid BookingSearchCondition searchCondition
) {
PageResponse<BookingsGetResponse> bookings = bookingService.getBookings(pageCondition, searchCondition, memberId);
ApiResponse<PageResponse<BookingsGetResponse>> response = ApiResponse.ok(bookings);
return ResponseEntity.ok().body(response);
}

@GetMapping("/{id}")
public ResponseEntity<ApiResponse<BookingGetResponse>> getBooking(
@CurrentAccount Long memberId,
@PathVariable String id
) {
BookingGetResponse booking = bookingService.getBooking(id, memberId);
ApiResponse<BookingGetResponse> response = ApiResponse.ok(booking);
return ResponseEntity.ok().body(response);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.pgms.apibooking.domain.booking.dto.request;

import java.time.LocalDate;

import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class BookingSearchCondition {

private Long memberId;
private String id;
private String status;
private LocalDate minCreatedAt;
private LocalDate maxCreatedAt;
private BookingSortType sortType;

public void updateMemberId(Long memberId) {
this.memberId = memberId;
}
}
Loading

0 comments on commit f80bea6

Please sign in to comment.