-
Notifications
You must be signed in to change notification settings - Fork 1
Home
hyejung kim edited this page Dec 8, 2021
·
2 revisions
아래 문서는 notion에 작성한 API 설계를 복사한 내용입니다.
body로 받은 이메일을 사용자 정보에 등록한다.
등록된 이메일 정보는 공연 좌석 예약 시 사용된다.
201 : 이메일 등록 성공시, 등록에 성공했다는 메세지를 전달한다.
400 : String type이 아닌 parameter를 요청으로 받을 경우 400 에러(잘못된 요청)를 전달한다.
500 : DB 문제, 서버 연결 문제 발생 시 500 에러를 전달한다.
parameter로 받은 날짜 기준 이후의 공연 정보를 날짜 기준으로 오름차순 정렬하여 조회한다.
공연일이 지난 공연을 조회할 수 없으므로 예약도 불가하다.
공연은 '제목, 공연일, 가격, 상세정보'로 이루어져있다.
200 : 공연 정보 조회 성공 시, 공연 정보를 담아놓은 테이블의 모든 데이터를 조회하여 List형태로 전달한다.
400 : 오늘(2021-09-04) 이전의 날짜의 경우, 400 에러(잘못된 요청)을 전달한다.
404 : 공연 정보 조회 결과가 없을 경우, 404 에러(요청 정보 없음)을 전달한다.
500 : DB 문제, 서버 연결 문제 발생 시 500 에러를 전달한다.
parameter로 받은 날짜와 공연이름을 이용하여 해당 공연의 선택 가능한 좌석 정보를 날짜 기준으로 오름차순 조회한다.
등록된 이메일 정보는 공연 좌석 예약 시 사용된다.
200 : 요청에 대한 일치하는 정보 조회 성공 시, 조회 성공 메세지와 함께 좌석 여부를 전달한다.
400 : parameter 2개 중 1개라도 String type이 아닌 타입을 요청으로 받을 경우 400 에러(잘못된 요청)를 전달한다.
404 : 요청에 대한 일치하는 정보 조회 실패 시, 조회 실패 메세지와 함께 404 에러를 전달한다.
500 : DB 문제, 서버 연결 문제 발생 시 500 에러를 전달한다.
body로 받은 날짜와 공연이름, 이메일 정보를 이용하여 해당 공연의 좌석을 예약한다.
201 : 요청에 대한 공연 정보 좌석을 DB에 추가하고, 성공 메세지와 함께 예약한 좌석 정보를 전달한다.
400 : 날짜와 공연이름이 1개라도 null이거나 String type이 아닌 타입을 요청으로 받을 경우 400 에러(잘못된 요청)를 전달한다.
401 : 사용자 이메일 정보가 DB에 없는 경우, 401 에러(인증 권한 없음)를 반환한다.
409 : 요청에 대한 공연 좌석을 예약할 수 없는 경우(예약이 된), 실패 메세지와 함께 409 에러를 전달한다.
500 : DB 문제, 서버 연결 문제 발생 시 500 에러를 전달한다.
parameter로 받은 이메일을 이용하여 본인이 예약한 공연 정보를 보여준다.
200 : 요청에 대한 일치하는 정보 조회 성공 시, 조회 성공 메세지와 함께 예약 정보를 전달한다.
400 : parameter가 이메일 형식이 아니거나 String type이 아닌 타입을 요청으로 받을 경우 400 에러(잘못된 요청)를 전달한다.
401 : 사용자 이메일 정보가 DB에 없는 경우, 401 에러(인증 권한 없음)를 반환한다.
404 : 요청에 대한 일치하는 정보 조회 실패 시, 조회 실패 메세지와 함께 404 에러를 전달한다.
500 : DB 문제, 서버 연결 문제 발생 시 500 에러를 전달한다.
/*
* 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);
/*
* 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);
/*
* 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);
/*
* 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;
}
- RDBMS의 트랜잭션과 병행제어
- Spring/Spring Boot/Spring MVC
- Spring의 Transaction
- 동시성 문제
- Redis 란?
- Spring Boot 로그설정(logback)
- 빠르게 실패 vs 안전하게 실패
- 테스트 코드 작성 시 유의사항
- Unit Test에서 AssertThat을 사용
- Java Optional 바르게 쓰기
- java.util.Optional T 클래스
- @Validation 어노테이션
- @RequestParam Date 타입 받기
- Spring Data JPA 쿼리메소드
- [JUnit5] 기본 테스트 어노테이션
- redis 설치 및 redisson을 이용한 분산락 구현