Skip to content
hyejung kim edited this page Dec 8, 2021 · 2 revisions

아래 문서는 notion에 작성한 API 설계를 복사한 내용입니다.

User Level API

POST /api/sigup

body로 받은 이메일을 사용자 정보에 등록한다.

등록된 이메일 정보는 공연 좌석 예약 시 사용된다.

사용자 등록

201 : 이메일 등록 성공시, 등록에 성공했다는 메세지를 전달한다.
400 : String type이 아닌 parameter를 요청으로 받을 경우 400 에러(잘못된 요청)를 전달한다. 
500 : DB 문제, 서버 연결 문제 발생 시 500 에러를 전달한다.

GET /api/performance/info/?date="오늘 날짜"

parameter로 받은 날짜 기준 이후의 공연 정보를 날짜 기준으로 오름차순 정렬하여 조회한다.

공연일이 지난 공연을 조회할 수 없으므로 예약도 불가하다.

공연은 '제목, 공연일, 가격, 상세정보'로 이루어져있다.

공연 정보 조회

200 : 공연 정보 조회 성공 시, 공연 정보를 담아놓은 테이블의 모든 데이터를 조회하여 List형태로 전달한다.
400 : 오늘(2021-09-04) 이전의 날짜의 경우, 400 에러(잘못된 요청)을 전달한다.
404 : 공연 정보 조회 결과가 없을 경우, 404 에러(요청 정보 없음)을 전달한다. 
500 : DB 문제, 서버 연결 문제 발생 시 500 에러를 전달한다.

GET /api/performance/info/seat/?date="날짜"&title="공연이름"

parameter로 받은 날짜와 공연이름을 이용하여 해당 공연의 선택 가능한 좌석 정보를 날짜 기준으로 오름차순 조회한다.

등록된 이메일 정보는 공연 좌석 예약 시 사용된다.

공연 좌석 정보 조회

200 : 요청에 대한 일치하는 정보 조회 성공 시, 조회 성공 메세지와 함께 좌석 여부를 전달한다.
400 : parameter 2개 중 1개라도 String type이 아닌 타입을 요청으로 받을 경우 400 에러(잘못된 요청)를 전달한다. 
404 : 요청에 대한 일치하는 정보 조회 실패 시, 조회 실패 메세지와 함께 404 에러를 전달한다.
500 : DB 문제, 서버 연결 문제 발생 시 500 에러를 전달한다.

POST /api/performance/booking

body로 받은 날짜와 공연이름, 이메일 정보를 이용하여 해당 공연의 좌석을 예약한다.

공연 좌석 정보 예약

201 : 요청에 대한 공연 정보 좌석을 DB에 추가하고, 성공 메세지와 함께 예약한 좌석 정보를 전달한다.
400 : 날짜와 공연이름이 1개라도 null이거나 String type이 아닌 타입을 요청으로 받을 경우 400 에러(잘못된 요청)를 전달한다. 
401 : 사용자 이메일 정보가 DB에 없는 경우, 401 에러(인증 권한 없음)를 반환한다. 
409 : 요청에 대한 공연 좌석을 예약할 수 없는 경우(예약이 된), 실패 메세지와 함께 409 에러를 전달한다.
500 : DB 문제, 서버 연결 문제 발생 시 500 에러를 전달한다.

GET /api/performance/booking/email/{이메일}

parameter로 받은 이메일을 이용하여 본인이 예약한 공연 정보를 보여준다.

공연 좌석 정보 예약 조회

200 : 요청에 대한 일치하는 정보 조회 성공 시, 조회 성공 메세지와 함께 예약 정보를 전달한다.
400 : parameter가 이메일 형식이 아니거나 String type이 아닌 타입을 요청으로 받을 경우 400 에러(잘못된 요청)를 전달한다. 
401 : 사용자 이메일 정보가 DB에 없는 경우, 401 에러(인증 권한 없음)를 반환한다. 
404 : 요청에 대한 일치하는 정보 조회 실패 시, 조회 실패 메세지와 함께 404 에러를 전달한다.
500 : DB 문제, 서버 연결 문제 발생 시 500 에러를 전달한다.

System Level API

1. Controller Layer

/*
 * ApiController.java
 */ 

//이메일 등록
public ResponseEntity<T> addEmail(@RequestBody String email);

//받은 날짜 이후의 공연 정보들 보여주기
public ResponseEntity<T> showPerformanceInfo(@RequestParam(value = "date", required = true) Date date);

//받은 날짜와 공연 이름으로 해당 공연 좌석 정보 보여주기
public ResponseEntity<T> showPerformanceSeat(@RequestParam(value = "date", required = true) Date date, @RequestParam(value = "title", required = true) String title)

//공연 좌석 예약하기
public ResponseEntity<T> addBooking(@RequestBody BookingDto reqBooking)

//공연 예약 정보 확인하기
public ResponseEntity<T> showMyBooking(@PathVariable String email);

2. Service Layer

/*
 * UserService.java
 */
public User saveUser(User user);
public Optional<User> verifyEmail(String email);

/*
 * PerformanceService.java
 */
public List<Performance> getListByDate(Date date);
public List<Performance> getListByDateAndTitle(Date date, String title);

/*
 * BookingService.java
 */
public Booking saveBookging(BookingDto reqBooking);
public Optional<Booking> getMyBooking(String email);

3. Repository

/*
 * UserRepository.java
 */
Optional<User> findByEmail(String email);
User save(User user);

/*
 * PerformanceRepository.java
 */
List<Performance> findByDateGraterThenOrderBydateAsc(Date date);
List<Performance> findByDateConstainsAndTitleOrderByDateAsc(Date date, String title);
List<Performance> findAll();

/*
 * BookingRepository.java
 */
Optional<Booking> findByUser(User user);
Booking save(Booking booking);

4. Domain & Dto Layer

/*
 *  Entity
 */
public class User{
		private Long id;
		private String email;
}

public class Performance{
		private Long id;
		private String title;
		private Date date;
		private Long price;
		private String description;
}

public class Booking{
		private Long id;
		private User user;
		private Performance performance;
}

/*
 *  Dto
 */
public class BookingDto{
		private Date date;
		private String title;
		private String email;
}
Clone this wiki locally