https://github.com/f-lab-edu/ticket-reserve
티켓 예매 서비스
https://github.com/f-lab-edu/ticket-reserve
Last synced: 2 months ago
JSON representation
티켓 예매 서비스
- Host: GitHub
- URL: https://github.com/f-lab-edu/ticket-reserve
- Owner: f-lab-edu
- Created: 2024-04-20T15:07:48.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-15T14:48:52.000Z (5 months ago)
- Last Synced: 2025-04-23T01:12:13.530Z (2 months ago)
- Language: Java
- Size: 366 KB
- Stars: 5
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Ticket Reserve
영화 티켓을 예매할 수 있는 백엔드 서비스입니다.## Environment
* Java 17 : [OpenJDK 17](https://adoptium.net/temurin/releases/?version=17)
* Spring Boot 3.2.5
* MySQL 8.0.35## 주요 기능
* 회원 가입 : 사용자는 이메일을 사용하여 회원 가입할 수 있습니다.
* 영화 검색 및 조회 : 사용자가 원하는 영화를 검색하고 상세 정보를 확인할 수 있습니다.
* 티켓 예매 : 특정 영화의 상영시간에 해당하는 티켓을 예매할 수 있습니다. (결제 기능은 미구현)
* 관리자 기능 : 관리자는 영화관, 영화, 좌석, 상영시간표 정보를 등록하고 수정 및 삭제할 수 있습니다.## 주요 API 설명
### 1. 회원 가입 - `POST` /signup
* 이메일과 비밀번호를 입력값으로 받아 회원 가입을 처리합니다.
* 이미 가입한 이메일인 경우 400 상태코드와 함께 오류 메시지가 반환됩니다.
* 구현 코드 : [SignupController](https://github.com/f-lab-edu/ticket-reserve/blob/main/web/src/main/java/com/kjh/web/controller/SignupController.java)### 2. 로그인 - `POST` /signin
* 이메일과 비밀번호를 입력값으로 받아 정보가 일치할 경우 JWT 액세스 토큰을 반환합니다.
* 이메일 또는 비밀번호가 맞지 않을 경우 400 상태코드와 함께 오류 메시지가 반환됩니다.
* 구현 코드 : [SigninController](https://github.com/f-lab-edu/ticket-reserve/blob/main/web/src/main/java/com/kjh/web/controller/SigninController.java)### 3. 영화관 검색 - `GET` /theaters
* 페이지 번호, 페이지 크기, 영화관 이름, 주소를 받아 영화관 목록을 페이지 단위로 검색합니다.
* 구현 코드 : [TheaterController](https://github.com/f-lab-edu/ticket-reserve/blob/main/web/src/main/java/com/kjh/web/controller/TheaterController.java#L31)### 4. 영화 검색 - `GET` /movies
* 페이지 번호, 페이지 크기, 영화 제목, 상영일을 받아 영화 목록을 페이지 단위로 검색합니다.
* 구현 코드 : [MovieController](https://github.com/f-lab-edu/ticket-reserve/blob/main/web/src/main/java/com/kjh/web/controller/MovieController.java#L28)### 5. 상영시간표 검색 - `GET` /showtimes
* 페이지 번호, 페이지 크기, 영화관 아이디, 영화 아이디, 일자를 받아 상영시간표 목록을 페이지 단위로 검색합니다.
* 구현 코드 : [ShowtimeController](https://github.com/f-lab-edu/ticket-reserve/blob/main/web/src/main/java/com/kjh/web/controller/ShowtimeController.java#L37)### 6. 상영시간표 좌석 조회 - `GET` /showtimes/{id}/seats
* 상영시간표 아이디를 받아 해당 상영 일정에 대한 모든 좌석 목록을 조회합니다.
* 구현 코드 : [ShowtimeController](https://github.com/f-lab-edu/ticket-reserve/blob/main/web/src/main/java/com/kjh/web/controller/ShowtimeController.java#L50)### 7. 영화 예매 - `POST` /reservations
* 상영시간표 아이디와 좌석 아이디를 입력값으로 받아 해당 상영 일정의 좌석을 예매합니다.
* 좌석이 이미 예매된 경우 400 상태코드와 함께 오류 메시지가 반환됩니다.
* 예매 성공 시 예매 상세 정보가 사용자의 이메일로 발송됩니다.
* 낙관적 락을 적용하여 여러 명이 동일한 좌석을 예매할 때 생기는 동시성 문제를 해결하였습니다.
* AWS SQS를 사용하여 메일 발송 큐에 메시지를 전송하고, SES를 사용해 메일 발송을 처리하였습니다.
* 구현 코드 : [ReservationController](https://github.com/f-lab-edu/ticket-reserve/blob/main/web/src/main/java/com/kjh/web/controller/ReservationController.java#L26), [ReservationService](https://github.com/f-lab-edu/ticket-reserve/blob/main/core/src/main/java/com/kjh/core/service/ReservationService.java#L40)
* 테스트 코드 : [PostTests](https://github.com/f-lab-edu/ticket-reserve/blob/main/web/src/test/java/com/kjh/web/reservation/PostTests.java#L109)## ERD
