Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
230 commits
Select commit Hold shift + click to select a range
c775e89
Initial commit
zerochani Dec 31, 2025
1c1bf1e
[CHORE]: CI 스크립트 작성
zerochani Dec 31, 2025
b03c0ea
Merge pull request #1 from Eatsfine/feature/ci
zerochani Dec 31, 2025
805bb39
[CHORE]: CI 배포 프로필 구성
zerochani Dec 31, 2025
87a6e29
Merge pull request #2 from Eatsfine/feature/ci
zerochani Jan 1, 2026
5087c22
[FEAT]: HealthCheck API 구현 및 테스트 추가
zerochani Jan 1, 2026
c8a6f0d
Merge pull request #3 from Eatsfine/feature/ci
zerochani Jan 1, 2026
e711e34
[FEAT]: Docker 빌드 환경 구성
zerochani Jan 1, 2026
b360eed
Merge pull request #4 from Eatsfine/feature/ci
zerochani Jan 1, 2026
cc0b0d3
[FEAT]: CD 배포 파이프라인 구성
zerochani Jan 1, 2026
1e0ee9c
Merge pull request #5 from Eatsfine/feature/ci
zerochani Jan 1, 2026
39ada89
[FIX]: 도커 이미지 풀링 및 컨테이너 실행 부분 수정
zerochani Jan 1, 2026
3c36b70
Merge pull request #6 from Eatsfine/feature/ci
zerochani Jan 1, 2026
1089ffc
[FIX]: 헬스체크 실패 방지를 위한 앱 기동 대기 추가
zerochani Jan 1, 2026
315712f
Merge pull request #7 from Eatsfine/feature/ci
zerochani Jan 1, 2026
f231ea5
[FIX]: invalid duration 문자열 추가
zerochani Jan 1, 2026
4b991f9
Merge pull request #8 from Eatsfine/feature/ci
zerochani Jan 1, 2026
a6190bb
[FEAT]: 의존성 추가
zerochani Jan 2, 2026
9a281f6
Merge pull request #9 from Eatsfine/feature/ci
zerochani Jan 2, 2026
b588dfb
[FIX]: 대문자를 소문자로 변경
zerochani Jan 2, 2026
b06b146
Merge pull request #10 from Eatsfine/feature/ci
zerochani Jan 2, 2026
a2d6394
[FIX]: 경로 대소문자 에러 수정
zerochani Jan 2, 2026
016240d
Merge pull request #11 from Eatsfine/feature/ci
zerochani Jan 2, 2026
e4c8d2f
[FIX]: CI 파이프라인 수정
zerochani Jan 2, 2026
72088e4
Merge pull request #12 from Eatsfine/feature/ci
zerochani Jan 2, 2026
99bb4c3
[FIX]: CI 파이프라인 원래대로 다시 수정
zerochani Jan 2, 2026
65d56b3
Merge pull request #13 from Eatsfine/feature/ci
zerochani Jan 2, 2026
a5fdad4
[FIX]: 스크립트 수정
zerochani Jan 2, 2026
b8e4f6b
Merge pull request #14 from Eatsfine/feature/ci
zerochani Jan 2, 2026
5bf122d
[FIX]: 도커파일 수정
zerochani Jan 2, 2026
48533fb
Merge pull request #15 from Eatsfine/feature/ci
zerochani Jan 2, 2026
64080bf
[FIX]: 도커파일 수정
zerochani Jan 2, 2026
42e42d6
Merge pull request #16 from Eatsfine/feature/ci
zerochani Jan 2, 2026
31d402b
[chore] 빌드 및 패키지 설정 변경
SungMinju Jan 4, 2026
8c7980b
[chore] 빌드 및 패키지 설정 변경
SungMinju Jan 5, 2026
dbeadb2
[chore] 빌드 및 패키지 설정 변경
SungMinju Jan 5, 2026
2f9eaa3
[chore] 빌드 및 패키지 설정 변경
SungMinju Jan 5, 2026
4eef7b5
Merge pull request #20 from Eatsfine/refactor/directory_structure
SungMinju Jan 5, 2026
fc6f6dd
[FEAT]: 로컬 개발 환경 구성을 위한 Docker Compose 및 설정 추가
zerochani Jan 7, 2026
68a72fb
[FEAT]: BaseEntity 추가
CokaNuri Jan 7, 2026
a83521f
[FEAT]: 예약 도메인 엔티티(Booking) 기본 설정
CokaNuri Jan 7, 2026
a8480c4
[FIX]: Entity에 식별자 추가
CokaNuri Jan 7, 2026
4d46bda
[FIX]: 불필요한 import문 제거
CokaNuri Jan 7, 2026
7110667
Merge pull request #21 from Eatsfine/feature/ci
zerochani Jan 7, 2026
d0a8f2a
Merge pull request #22 from Eatsfine/feature/booking-setup
CokaNuri Jan 8, 2026
b7648d2
[FEAT]: BusinessHours 요일 enum 정의
twodo0 Jan 7, 2026
4294675
[FEAT]: BusinessHours 엔티티 초기 세팅
twodo0 Jan 7, 2026
b83fc84
[FEAT]: Region 엔티티 설계
twodo0 Jan 7, 2026
d6dc73a
[FEAT]: TableImage 엔티티 초기 세팅
twodo0 Jan 7, 2026
d5a90b3
[REFACTOR]: BusinessHours isClosed 필드를 isHoliday로 변경
twodo0 Jan 8, 2026
4860615
[REFACTOR]: BusinessHours Store 연관관계 적용 및 BaseEntity 상속
twodo0 Jan 8, 2026
499b92f
[FEAT]: 가게 승인 상태 enum 추가
twodo0 Jan 8, 2026
b7f43e8
[FEAT]: 가게 카테고리 enum 추가
twodo0 Jan 8, 2026
69cff59
[FEAT]: Store 엔티티 설계
twodo0 Jan 8, 2026
bdd3dcf
[REFACTOR]: TableImage Store 연관관계 적용 및 BaseEntity 상속
twodo0 Jan 8, 2026
d7bf7b0
[FEAT]: StoreRepository 세팅
twodo0 Jan 8, 2026
cff7e89
[FEAT]: TableImageRepository 세팅
twodo0 Jan 8, 2026
073a21d
[FEAT]: BusinessHoursRepository 세팅
twodo0 Jan 8, 2026
20ca6d2
[FEAT]: RegionRepository 세팅
twodo0 Jan 8, 2026
4e815fa
[CHORE]: yml 파일 수정
CokaNuri Jan 8, 2026
ab2e1ea
[REFACTOR]: Store와 BusinessHours 양방향 연관관계 및 편의 메서드 추가
twodo0 Jan 8, 2026
a6d71ef
[FIX]: StoreTable 연관관계 주석처리
twodo0 Jan 8, 2026
60f6178
[REFACTOR]: Store와 TableImage 양방향 연관관계 및 편의 메서드 추가
twodo0 Jan 9, 2026
d565be2
[REFACTOR]: Store-TableImage 양방향 연관관계 삭제 편의 메서드 추가 및 생명주기 관리 설정
twodo0 Jan 9, 2026
36f7def
Merge pull request #24 from Eatsfine/feature/store-setup
twodo0 Jan 9, 2026
9b777c4
[REFACTOR]: ApiResponse 실패 응답을 BaseErrorCode 기반으로 통합
twodo0 Jan 10, 2026
3a40d70
[FEAT]: HTTPS 적용 및 NGINX Blue-Green 무중단 배포 전환 로직 수정
zerochani Jan 10, 2026
0b5b503
[FEAT]: HTTPS 적용 및 NGINX Blue-Green 무중단 배포 전환 로직 수정
zerochani Jan 10, 2026
41d4f09
Merge pull request #27 from Eatsfine/feature/https
zerochani Jan 11, 2026
5919a88
충돌 해결
CokaNuri Jan 11, 2026
1ab6644
Merge pull request #25 from Eatsfine/refactor/api-response
twodo0 Jan 11, 2026
df78ea4
ApiResponse 수정
CokaNuri Jan 11, 2026
48125a9
[FEAT] 예약 가능 시간대 및 테이블 조회 DTO 개발
CokaNuri Jan 11, 2026
ad456fd
[FEAT] 예약 가능 시간대,테이블 조회 컨트롤러 개발 및 스웨거 설정
CokaNuri Jan 11, 2026
54d3710
[FEAT] BookingTable 엔티티 개발
CokaNuri Jan 11, 2026
a32cd60
[FIX] Booking 엔티티 수정 (BookingTable 연관관계 고려)
CokaNuri Jan 11, 2026
46eb507
[FEAT] BookingRepository- findReservedTableIds 메서드 구현
CokaNuri Jan 11, 2026
a90a8a1
[FIX] Store 엔티티 businessHours,tableImages 필드에 @Builder.Default 애노테이션 추가
CokaNuri Jan 11, 2026
6d541f0
[FEAT] StoreTable 엔티티 기본 설정
CokaNuri Jan 11, 2026
4afc999
[FEAT] 예약 가능 시간 조회 시 '나눠 앉기' 동의 여부 로직 추가
CokaNuri Jan 11, 2026
4fbe5a8
[FEAT] 테이블 유형 enum 추가
CokaNuri Jan 11, 2026
30ae5a3
[FEAT] TableLayout 엔티티 기본 설정 및 Store, StoreTable 연관관계 수정
CokaNuri Jan 11, 2026
e5725e4
[FEAT] BusinessHours의 DayofWeek을 커스텀 enum이 아닌java.time 으로 변경
CokaNuri Jan 11, 2026
7abe68a
[FIX] BusinessHours의 DayofWeek @Enumerated추가
CokaNuri Jan 11, 2026
4422093
[FIX] rows 필드 db에서 오류 -> lows로 수정
CokaNuri Jan 11, 2026
ba066f3
[FEAT] GET /api/v1/stores/{storeId}/bookings/available-times 구현
CokaNuri Jan 11, 2026
bac7d3c
[FEAT] GeneralException 구현
CokaNuri Jan 11, 2026
97f49ef
[FIX] 로컬 개발 환경에서 https->http 사용
CokaNuri Jan 11, 2026
03153e2
[FEAT] User 엔티티 기본 설정
CokaNuri Jan 11, 2026
d0a576b
[FEAT]: 식당 상세 조회 DTO 및 BusinessHours 변환 로직 추가
twodo0 Jan 10, 2026
c22438e
[FEAT]: StoreSuccessStatus, StoreErrorStatus 추가
twodo0 Jan 10, 2026
8efbbf5
[FEAT]: GeneralException(프로젝트 exception) 세팅
twodo0 Jan 10, 2026
2076181
[FEAT]: StoreException 세팅
twodo0 Jan 10, 2026
3601032
[FEAT]: 식당 상세 조회 API (Controller/Service) 구현
twodo0 Jan 10, 2026
ba7fa01
[FEAT]: 전역 예외 핸들러(GeneralExceptionAdvice) 구현
twodo0 Jan 10, 2026
f17b1ed
[REFACTOR]: BusinessHours 응답 DTO 및 컨버터 휴무 처리 단순화
twodo0 Jan 11, 2026
b179f6b
[FEAT] 예약 시간대 설정 후 테이블 조회 DTO 개발
CokaNuri Jan 11, 2026
14435a5
[FEAT] StoreTable에 Table의 위치 필드 추가
CokaNuri Jan 11, 2026
af98092
[FEAT] 시간대 설정 후 예약 가능한 테이블 조회 서비스 구현
CokaNuri Jan 11, 2026
d3824bd
[FEAT] 테이블 분리 허용 여부에 따라 테이블 조회 로직 수정
CokaNuri Jan 11, 2026
771651a
[FEAT] GET /api/v1/stores/{storeId}/bookings/available-tables 구현
CokaNuri Jan 11, 2026
2189d8b
[CHORE] Swagger 버전 변경 2.3.0 -> 2.8.1
CokaNuri Jan 11, 2026
3c7685b
[FEAT] BookingException 및 ErrorStatus 추가
CokaNuri Jan 11, 2026
3a2acd6
[FEAT] 에러 핸들러 구현
CokaNuri Jan 11, 2026
5f75ce1
[FEAT] BookingController에 BookingException 포함
CokaNuri Jan 11, 2026
60ef2cc
예전 테스트 코드 제거
CokaNuri Jan 11, 2026
11bbf45
[REFACTOR] : BookingErrorStatus를 공통 ErrorStatus에서 Booking 도메인으로 분리
CokaNuri Jan 11, 2026
460b82c
[REFACTOR]: 전역 예외 핸들러 제거
twodo0 Jan 11, 2026
1a2ef36
[REFACTOR]: BusinessHoursResDto.summary 응답 시간 포맷(HH:mm) 적용
twodo0 Jan 11, 2026
e0f0c7c
[REFACTOR]: BusinessHours 응답 DTO isClosed로 필드명 변경
twodo0 Jan 11, 2026
f8b0d1d
Merge pull request #28 from Eatsfine/feature/store-detail
twodo0 Jan 12, 2026
0a73ef8
Merge branch 'develop' into feature/booking-available-check
CokaNuri Jan 12, 2026
17b86af
충돌 해결
CokaNuri Jan 12, 2026
186b979
GeneralException 충돌 해결
CokaNuri Jan 12, 2026
165b19b
Merge pull request #29 from Eatsfine/feature/booking-available-check
SungMinju Jan 12, 2026
e29373e
[FIX]: NGINX Blue-Green 자동 전환 배포 로직 수정
zerochani Jan 12, 2026
d8ad454
Merge pull request #30 from Eatsfine/feature/https
zerochani Jan 12, 2026
181bba0
[FIX]: NGINX Blue-Green 자동 전환 배포 로직 수정 (다시 복구)
zerochani Jan 12, 2026
ee69559
Merge pull request #31 from Eatsfine/feature/https
zerochani Jan 12, 2026
5064cce
Update database password in application-local.yml
CokaNuri Jan 12, 2026
7c8fb80
[FEAT] : 예약 생성 DTO 개발
CokaNuri Jan 12, 2026
99b5233
[FIX]: NGINX Blue-Green 존재 여부 확인 후 stop 하도록 로직 수정
zerochani Jan 12, 2026
3155f47
[REFACTOR] : 예약 조회 DTO, 컨트롤러 구조 변경
CokaNuri Jan 12, 2026
237c2f9
Merge pull request #32 from Eatsfine/feature/https
zerochani Jan 12, 2026
80cba3f
[FEAT] : BookingErrorStatus 추가
CokaNuri Jan 12, 2026
3edd7a9
[FEAT] : CreateBookingDTO에 isSplitAccepted 필드 추가
CokaNuri Jan 12, 2026
529a552
[FEAT] : createdAt JPA 자동 설정 가능하게 애노테이션 추가
CokaNuri Jan 12, 2026
1d0acb7
[FEAT] : 비관적 락 적용해 테이블 조회하는 메서드 개발
CokaNuri Jan 12, 2026
19e542e
[FIX] : Post 방식 API ModelAttribute->RequestBody 변경
CokaNuri Jan 12, 2026
4717113
[FIX] : boolingTables 필드에 @Builder.Default 애노테이션 추가
CokaNuri Jan 12, 2026
0c155ad
[FEAT] : 예약 생성 비즈니스 로직 개발
CokaNuri Jan 12, 2026
10b2682
[FIX]: 배포 대상 판단 로직을 nginx upstream 기준으로 수정
zerochani Jan 12, 2026
6d06836
Merge pull request #33 from Eatsfine/feature/https
zerochani Jan 12, 2026
dd596c0
[FIX]: deploy.yml 로직 약간수정
zerochani Jan 12, 2026
5f333b3
Merge pull request #34 from Eatsfine/feature/https
zerochani Jan 12, 2026
ed49ff0
[FIX]: 기존으로 복구 및 로그 추가
zerochani Jan 12, 2026
e080e75
Merge pull request #35 from Eatsfine/feature/https
zerochani Jan 12, 2026
1839046
[FIX]: 기존으로 복구
zerochani Jan 12, 2026
94faf09
Merge pull request #36 from Eatsfine/feature/https
zerochani Jan 12, 2026
ae36c10
[FIX]: 배포 스크립트 Nginx 리로드 경로
zerochani Jan 12, 2026
a6f9e71
Merge pull request #37 from Eatsfine/feature/https
zerochani Jan 12, 2026
5333ee7
[FIX]: HTTPS 환경에서 깨지던 blue-green 배포 판단 로직 수정
zerochani Jan 12, 2026
19e6c43
Merge pull request #38 from Eatsfine/feature/https
zerochani Jan 12, 2026
73d45fa
[FIX]: 로직 순서 수정
zerochani Jan 12, 2026
db46b05
Merge pull request #39 from Eatsfine/feature/https
zerochani Jan 12, 2026
b73fe13
[FIX]: 로직 순서 수정
zerochani Jan 12, 2026
405ee87
Merge pull request #40 from Eatsfine/feature/https
zerochani Jan 12, 2026
50fe3bb
[FIX]: 코드 약간 수정
zerochani Jan 12, 2026
3f3cf6a
Merge pull request #41 from Eatsfine/feature/https
zerochani Jan 12, 2026
c63b64e
[FIX]: 코드 약간 수정
zerochani Jan 12, 2026
b2ccaa9
Merge pull request #42 from Eatsfine/feature/https
zerochani Jan 12, 2026
964c100
[FIX]: 코드 약간 수정
zerochani Jan 12, 2026
358a2a6
Merge pull request #43 from Eatsfine/feature/https
zerochani Jan 12, 2026
d406aed
[FIX]: 코드 약간 수정
zerochani Jan 12, 2026
9e65802
Merge pull request #44 from Eatsfine/feature/https
zerochani Jan 12, 2026
0cc15af
[FIX]: 코드 약간 수정
zerochani Jan 12, 2026
a36a456
Merge pull request #45 from Eatsfine/feature/https
zerochani Jan 12, 2026
034d59a
[BUILD]: QueryDSL 설정 추가 (.gitignore, build.gradle)
twodo0 Jan 14, 2026
dde9022
Merge pull request #46 from Eatsfine/build/querydsl-config
twodo0 Jan 14, 2026
68b751a
Merge branch 'develop' into feature/booking-create
CokaNuri Jan 14, 2026
30128b5
[CHORE] : DB_PASSWORD 환경변수로 관리
CokaNuri Jan 14, 2026
49605db
[FEAT] : UserRepository 임시 사용
CokaNuri Jan 14, 2026
c50801d
[FEAT] : BookingErrorStatus 추가
CokaNuri Jan 14, 2026
cd5cc8b
[FEAT] : 결제 요청 관련 DTO 개발
CokaNuri Jan 14, 2026
4a261c9
[FEAT] : StoreErrorStatus 추가
CokaNuri Jan 14, 2026
988ffd7
[REFACTOR] : Swagger 테스트용 @ParameterObject 애노테이션 추가
CokaNuri Jan 14, 2026
aca5023
[REFACTOR] : 영업시간 정보 없을 시 예외 처리 로직 추가
CokaNuri Jan 14, 2026
824aa85
[FEAT] : Booking 엔티티에 depositAmount 필드 추가 및 confirm 메서드 추가
CokaNuri Jan 14, 2026
e0f5e63
[FIX] : 예약 상태가 PENDING 혹은 CONFIRMED인 테이블을 조회하도록 수정
CokaNuri Jan 14, 2026
a3e0385
[FEAT] : 결제 완료 처리 API 개발
CokaNuri Jan 14, 2026
ab20a8e
[FIX] : JpaAuditing 설정 변경
CokaNuri Jan 14, 2026
0c3ace4
[FEAT] Swagger 운영 도메인 등록
zerochani Jan 14, 2026
6503e81
Merge pull request #47 from Eatsfine/feature/booking-create
CokaNuri Jan 15, 2026
fa36abc
[FEAT]: 결제 요청 API 구현 및 Booking 연동
zerochani Jan 15, 2026
8213aae
[FEAT]: 가게 등록 및 Region 예외 추가
twodo0 Jan 12, 2026
d785902
[REFACTOR]: Store 엔티티 초기 구조 보정
twodo0 Jan 12, 2026
4d018d9
[FEAT]: StoreConverter 추가
twodo0 Jan 12, 2026
d7ef215
[FEAT]: Store/Region 성공 상태 코드 추가
twodo0 Jan 12, 2026
d8cd5e1
[FEAT]: 가게 등록 및 영업시간 요청 처리
twodo0 Jan 12, 2026
70ae0d6
[FEAT]: 영업시간 검증 및 예외처리
twodo0 Jan 12, 2026
19229b0
[REFACTOR]: 영업시간 및 이미지 필드 수정
twodo0 Jan 12, 2026
ba65145
[FEAT]: 가게 검색 기본 구조 추가
twodo0 Jan 12, 2026
a2eaf70
[FEAT]: QueryDSL 기반 가게 검색 구현
twodo0 Jan 13, 2026
b3248b4
[FEAT]: 실시간 영업 여부 체크 로직 구현
twodo0 Jan 13, 2026
b16474c
[FEAT]: 가게 검색에 키워드 검색, 지역 필터 기능 추가
twodo0 Jan 14, 2026
75cceb2
[FEAT]: 가게별 예약금 로직 추가
twodo0 Jan 15, 2026
df092c2
Merge pull request #48 from Eatsfine/feature/store-create-read
twodo0 Jan 15, 2026
a8600d3
[FEAT]: 가게 테이블(StoreTable) 도메인 엔티티 설계 (#51)
sonjunkyu Jan 16, 2026
9550479
Merge pull request #50 from Eatsfine/feature/payment
zerochani Jan 17, 2026
dc981b6
[FIX]: 간편결제만 놔두기
zerochani Jan 17, 2026
171348c
[FEAT]: 토스페이먼츠 결제위젯 연동 및 승인 프로세스 구현
zerochani Jan 17, 2026
19a42d2
[FEAT]: 독립적인 테스트 환경 구성을 위한 H2 DB 및 설정 추가해서 빌드 실패 해결
zerochani Jan 17, 2026
1062914
[FIX]: username 삭제
zerochani Jan 18, 2026
3108c2a
Feature/payment (#54)
zerochani Jan 19, 2026
9499e14
[FEAT]: 식당 기본 정보, 영업시간 수정, 브레이크타임 설정 API 개발 (#55)
twodo0 Jan 19, 2026
08eebc6
[FEAT]: 결제 승인 결과(성공/실패) 처리
zerochani Jan 20, 2026
c9d6a8c
[REFACTOR]: Payment 예외 처리 리팩토링
zerochani Jan 20, 2026
35be75b
[FEAT]: 결제 취소(환불) API 구현
zerochani Jan 20, 2026
3db6f18
[FEAT]: 결제 내역 조회 및 상세 조회 API 구현
zerochani Jan 20, 2026
732cbb8
[FEAT]: 테이블 배치도 생성, 조회 API 구현 (#56)
sonjunkyu Jan 20, 2026
1ec6d26
[FEAT]: 가게 이미지, 테이블 이미지(S3) 업로드/조회/삭제 기능 구현 (#61)
twodo0 Jan 21, 2026
7905e85
[FEAT]: 가게 테이블 생성 API 구현 (#62)
sonjunkyu Jan 21, 2026
e817808
[FIX]: 무중단 배포 구조 스크립트에서 단일 컨테이너 배포 구조 스크립트로 변경
zerochani Jan 22, 2026
50b2f21
Merge pull request #65 from Eatsfine/feature/infra
zerochani Jan 22, 2026
f09b36d
[FIX]: EC2 SSH 배포 방식 수정 및 GitHub Actions 안정화
zerochani Jan 22, 2026
d94dc1d
Merge pull request #66 from Eatsfine/feature/infra
zerochani Jan 22, 2026
e57580f
[FIX]: GitHub Actions SSH 포트 임시 오픈/회수 로직 정리
zerochani Jan 22, 2026
7df4de9
Merge pull request #67 from Eatsfine/feature/infra
zerochani Jan 22, 2026
82fb935
Merge branch 'develop' into feature/payment
zerochani Jan 22, 2026
7d00784
[FIX]: 배포 워크플로우 main으로 변경
zerochani Jan 23, 2026
a78d369
Merge pull request #71 from Eatsfine/feature/infra
zerochani Jan 23, 2026
32df4a3
Merge pull request #68 from Eatsfine/feature/payment
zerochani Jan 23, 2026
6e18973
[CHORE]: 불필요 도커 이미지 및 컨테이너 정리
zerochani Jan 24, 2026
64487d9
Merge pull request #74 from Eatsfine/feature/infra
zerochani Jan 24, 2026
09ad692
[FEAT]: 테이블 예약 시간대 목록 조회, 관리 API 구현 (#69)
sonjunkyu Jan 24, 2026
27654a5
[FEAT]: 가게 등록 시 사업자번호 검증 추가 및 Region 엔티티 구조 변경 (#75)
twodo0 Jan 24, 2026
19517c2
[CHORE]: 멈춰있는 컨테이너 전부 삭제 명령어 제거
zerochani Jan 26, 2026
8be0ee5
Merge pull request #78 from Eatsfine/feature/infra
zerochani Jan 26, 2026
04de332
Merge branch 'main' into develop
zerochani Jan 26, 2026
c37c8b0
[FEAT]: DTO 분리 및 필드명 변경
zerochani Jan 27, 2026
eb03b8b
[REFACTOR]: 결제 승인 로직 개선 및 DTO 적용
zerochani Jan 27, 2026
5ee8eba
[REFACTOR]: / 붙여줌
zerochani Jan 27, 2026
350c98c
[FEAT]: 메뉴 엔티티 설계 (#82)
twodo0 Jan 28, 2026
9466286
[FEAT]: 가게 테이블 상세 조회/수정/삭제 API 구현 (#77)
sonjunkyu Jan 28, 2026
d1865b7
Merge pull request #80 from Eatsfine/feature/payment
zerochani Jan 30, 2026
3e99e07
가게 개별 테이블 이미지 등록/삭제 API 구현 (#83)
sonjunkyu Jan 30, 2026
6e01492
[FEAT] : 예약 취소 API 개발 / 마이페이지 예약 조회 API 개발 (#85)
CokaNuri Jan 30, 2026
635014d
[FEAT]: 메뉴 관리 CRUD 구현 및 S3 수명주기 추가 (#87)
twodo0 Jan 30, 2026
e98b7bf
Merge branch 'main' into develop
CokaNuri Jan 31, 2026
f395a4d
[FIX] : QClass 관련 빌드 에러 수정
CokaNuri Jan 31, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.eatsfine.eatsfine.domain.booking.dto.response.BookingResponseDTO;
import com.eatsfine.eatsfine.domain.booking.service.BookingCommandService;
import com.eatsfine.eatsfine.domain.booking.service.BookingQueryService;
import com.eatsfine.eatsfine.domain.booking.status.BookingSuccessStatus;
import com.eatsfine.eatsfine.domain.user.entity.User;
import com.eatsfine.eatsfine.domain.user.repository.UserRepository;
import com.eatsfine.eatsfine.global.apiPayload.ApiResponse;
Expand Down Expand Up @@ -50,7 +51,7 @@ public ApiResponse<BookingResponseDTO.AvailableTableListDTO> getAvailableTables(

@Operation(summary = "예약 생성" ,
description = "가게,날짜,시간,인원,테이블 정보를 입력받아 예약을 생성합니다.")
@PostMapping("stores/{storeId}/bookings")
@PostMapping("/stores/{storeId}/bookings")
public ApiResponse<BookingResponseDTO.CreateBookingResultDTO> createBooking(
@PathVariable Long storeId,
@RequestBody @Valid BookingRequestDTO.CreateBookingDTO dto
Expand All @@ -60,15 +61,42 @@ public ApiResponse<BookingResponseDTO.CreateBookingResultDTO> createBooking(
return ApiResponse.onSuccess(bookingCommandService.createBooking(user, storeId, dto));
}

@Operation(summary = "결제 완료 처리",
description = "결제 완료 후 결제 정보를 입력받아 예약 상태를 업데이트합니다.")
@PatchMapping("/bookings/{bookingId}/payments-confirm")
public ApiResponse<BookingResponseDTO.ConfirmPaymentResultDTO> confirmPayment(
@PathVariable Long bookingId,
@RequestBody @Valid BookingRequestDTO.PaymentConfirmDTO dto
) {
//불필요한 api 삭제
// @Operation(summary = "예약 완료 처리",
// description = "결제 완료 후 결제 정보를 입력받아 예약 상태를 업데이트합니다. 주의) 외부에서 이 API를 호출하지 않고 " +
// "POST /api/v1/payments/confirm API 호출 후 내부적으로 이 API의 로직을 실행합니다.")
// @PatchMapping("/bookings/{bookingId}/payments-confirm")
// public ApiResponse<BookingResponseDTO.ConfirmPaymentResultDTO> confirmPayment(
// @PathVariable Long bookingId,
// @RequestBody @Valid BookingRequestDTO.PaymentConfirmDTO dto
// ) {
//
// return ApiResponse.onSuccess(bookingCommandService.confirmPayment(bookingId,dto));
// }

return ApiResponse.onSuccess(bookingCommandService.confirmPayment(bookingId,dto));
@Operation(summary = "예약 취소",
description = "예약을 취소하고 환불을 진행합니다.")
@PatchMapping("/bookings/{bookingId}/cancel")
public ApiResponse<BookingResponseDTO.CancelBookingResultDTO> cancelBooking(
@PathVariable Long bookingId,
@RequestBody @Valid BookingRequestDTO.CancelBookingDTO dto
) {
return ApiResponse.of(BookingSuccessStatus._BOOKING_CANCELED,
bookingCommandService.cancelBooking(bookingId, dto));
}


@Operation(summary = "예약 내역 조회",
description = "마이페이지에서 나의 예약 내역을 조회합니다.")
@GetMapping("/users/bookings")
public ApiResponse<BookingResponseDTO.BookingPreviewListDTO> getMyBookings(
@RequestParam(name = "status", required = false) String status,
@RequestParam(name = "page", defaultValue = "1") Integer page
) {
User user = userRepository.findById(1L).orElseThrow(); // 임시로 임의의 유저 사용

// 서비스 호출 시 page - 1을 넘겨서 0-based index로 맞춰줍니다.
return ApiResponse.of(BookingSuccessStatus._BOOKING_FOUND,
bookingQueryService.getBookingList(user, status, page-1));
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,32 @@
package com.eatsfine.eatsfine.domain.booking.converter;

import com.eatsfine.eatsfine.domain.booking.dto.response.BookingResponseDTO;
import com.eatsfine.eatsfine.domain.booking.entity.Booking;
import com.eatsfine.eatsfine.domain.payment.dto.response.PaymentResponseDTO;
import com.eatsfine.eatsfine.domain.store.entity.Store;

import java.math.BigDecimal;
import java.util.List;

public class BookingConverter {

public static BookingResponseDTO.CreateBookingResultDTO toCreateBookingResultDTO(
Booking booking, Store store, BigDecimal totalDeposit,
List<BookingResponseDTO.BookingResultTableDTO> resultTableDTOS,
PaymentResponseDTO.PaymentRequestResultDTO paymentInfo) {

return BookingResponseDTO.CreateBookingResultDTO.builder()
.bookingId(booking.getId())
.storeName(store.getStoreName())
.date(booking.getBookingDate())
.time(booking.getBookingTime())
.partySize(booking.getPartySize())
.status(booking.getStatus().name())
.totalDeposit(totalDeposit)
.createdAt(booking.getCreatedAt())
.tables(resultTableDTOS)
.paymentId(paymentInfo.paymentId())
.orderId(paymentInfo.orderId())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,23 @@ public record CreateBookingDTO(
@NotNull @DateTimeFormat(pattern = "HH:mm") LocalTime time,
@NotNull @Min(1) Integer partySize,
@NotNull List<Long> tableIds,
@NotNull boolean isSplitAccepted
@NotNull boolean isSplitAccepted,
@NotNull List<MenuOrderDto> menuItems
){}

public record MenuOrderDto(
@NotNull Long menuId,
@NotNull @Min(1) Integer quantity
){}

public record PaymentConfirmDTO(
@NotBlank String paymentKey, //결제 고유 키
@NotNull Integer amount //실제 결제 금액
){}

public record CancelBookingDTO(
@NotBlank String reason //예약 취소 사유

){}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.eatsfine.eatsfine.domain.booking.dto.response;

import com.eatsfine.eatsfine.domain.booking.enums.BookingStatus;
import lombok.Builder;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
Expand Down Expand Up @@ -42,9 +44,11 @@ public record CreateBookingResultDTO(
LocalDate date,
LocalTime time,
Integer partySize,
Integer totalDeposit,
BigDecimal totalDeposit,
List<BookingResultTableDTO> tables,
LocalDateTime createdAt // 예약 생성 시간
LocalDateTime createdAt, // 예약 생성 시간
Long paymentId, // 결제 ID
String orderId // 주문 ID
){}

@Builder
Expand All @@ -61,6 +65,40 @@ public record ConfirmPaymentResultDTO(
Long bookingId,
String status, // CONFIRMED
String paymentKey, // PG사 결제 키
Integer amount // 최종 결제 금액
BigDecimal amount // 최종 결제 금액
){}

@Builder
public record CancelBookingResultDTO(
Long bookingId,
String status, // CANCELED
String cancelReason, // 취소 사유
LocalDateTime canceledAt, // 취소 시간
BigDecimal refundAmount // 환불 금액
){}

@Builder
public record BookingPreviewListDTO(
List<BookingPreviewDTO> bookingList,
Integer listSize,
Integer totalPage,
Long totalElements,
Boolean isFirst,
Boolean isLast

){}

@Builder
public record BookingPreviewDTO(
Long bookingId,
String storeName,
String storeAddress,
LocalDate bookingDate,
LocalTime bookingTime,
Integer partySize,
String tableNumbers,
BigDecimal amount,
String paymentMethod,
String status
){}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package com.eatsfine.eatsfine.domain.booking.entity;

import com.eatsfine.eatsfine.domain.booking.entity.mapping.BookingMenu;
import com.eatsfine.eatsfine.domain.booking.entity.mapping.BookingTable;
import com.eatsfine.eatsfine.domain.booking.enums.BookingStatus;
import com.eatsfine.eatsfine.domain.payment.entity.Payment;
import com.eatsfine.eatsfine.domain.payment.enums.PaymentStatus;
import com.eatsfine.eatsfine.domain.payment.exception.PaymentException;
import com.eatsfine.eatsfine.domain.payment.status.PaymentErrorStatus;
import com.eatsfine.eatsfine.domain.store.entity.Store;
import com.eatsfine.eatsfine.domain.storetable.entity.StoreTable;
import com.eatsfine.eatsfine.domain.user.entity.User;
import com.eatsfine.eatsfine.global.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.*;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.ArrayList;
Expand Down Expand Up @@ -60,8 +65,20 @@ public class Booking extends BaseEntity {
private LocalTime bookingTime;

@Enumerated(EnumType.STRING)
@Column(name = "status", length = 20, nullable = false)
private BookingStatus status;

@Builder.Default
@OneToMany(mappedBy = "booking", cascade = CascadeType.ALL, orphanRemoval = true)
private List<BookingMenu> bookingMenus = new ArrayList<>();

public void addBookingMenu(BookingMenu bookingMenu) {
this.bookingMenus.add(bookingMenu);
if (bookingMenu.getBooking() != this) {
bookingMenu.confirmBooking(this);
}
}

public void addBookingTable(StoreTable storeTable) {
BookingTable bookingTable = BookingTable.builder()
.booking(this)
Expand All @@ -70,10 +87,30 @@ public void addBookingTable(StoreTable storeTable) {
this.bookingTables.add(bookingTable);
}

private Integer depositAmount;
private BigDecimal depositAmount;

private String cancelReason;

public void confirm() {
this.status = BookingStatus.CONFIRMED;
}

public void cancel(String cancelReason)
{
this.status = BookingStatus.CANCELED;
this.cancelReason = cancelReason;
}

//예약과 관련된 결제 중 결제 완료된 결제키 조회
public String getSuccessPaymentKey() {
return this.payments.stream()
.filter(p -> p.getPaymentStatus() == PaymentStatus.COMPLETED)
.map(Payment::getPaymentKey)
.findFirst()
.orElseThrow(() -> new PaymentException(PaymentErrorStatus._PAYMENT_NOT_FOUND));
}

public void setDepositAmount(BigDecimal totalDeposit) {
this.depositAmount = totalDeposit;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.eatsfine.eatsfine.domain.booking.entity.mapping;

import com.eatsfine.eatsfine.domain.booking.entity.Booking;
import com.eatsfine.eatsfine.domain.menu.entity.Menu;
import jakarta.persistence.*;
import lombok.*;

import java.math.BigDecimal;

@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Getter
@Builder
public class BookingMenu {

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private Integer quantity;

private BigDecimal price;

@ManyToOne(fetch = FetchType.LAZY)
private Booking booking;

@ManyToOne(fetch = FetchType.LAZY)
private Menu menu;

public void confirmBooking(Booking booking) {
this.booking = booking;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

public enum BookingStatus {

PENDING, CONFIRMED, COMPLETED, CANCELLED, NOSHOW
PENDING, CONFIRMED, COMPLETED, CANCELED, NOSHOW
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
package com.eatsfine.eatsfine.domain.booking.repository;

import com.eatsfine.eatsfine.domain.booking.entity.Booking;
import com.eatsfine.eatsfine.domain.booking.enums.BookingStatus;
import com.eatsfine.eatsfine.domain.user.entity.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.query.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.time.LocalDate;
import java.time.LocalTime;
import java.util.List;

@Repository
public interface BookingRepository extends JpaRepository<Booking, Long> {


Expand All @@ -34,4 +40,19 @@ public interface BookingRepository extends JpaRepository<Booking, Long> {
"AND b.bookingTime = :time " +
"AND b.status IN ('CONFIRMED', 'PENDING')")
boolean existsBookingByTableAndDateTime(@Param("tableId") Long tableId, @Param("date") LocalDate date, @Param("time") LocalTime time);


// 1. 특정 유저의 모든 예약을 최신순으로 페이징 조회
@Query("select b from Booking b join fetch b.store where b.user = :user")
Page<Booking> findAllByUser(@Param("user") User user, Pageable pageable);

@Query("Select b from Booking b join fetch b.store where b.user = :user and b.status = :status")
Page<Booking> findAllByUserAndStatus(@Param("user") User user, @Param("status") BookingStatus status, Pageable pageable);
@Query("SELECT COUNT(bt) > 0 FROM BookingTable bt " +
"JOIN bt.booking b " +
"WHERE bt.storeTable.id = :tableId " +
"AND (b.bookingDate > :currentDate " +
" OR (b.bookingDate = :currentDate AND b.bookingTime >= :currentTime)) " +
"AND b.status IN ('CONFIRMED', 'PENDING')")
boolean existsFutureBookingByTable(@Param("tableId") Long tableId, @Param("currentDate") LocalDate currentDate, @Param("currentTime") LocalTime currentTime);
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,7 @@ public interface BookingCommandService {
BookingResponseDTO.CreateBookingResultDTO createBooking(User user, Long storeId, BookingRequestDTO.CreateBookingDTO dto);

BookingResponseDTO.ConfirmPaymentResultDTO confirmPayment(Long BookingId, BookingRequestDTO.PaymentConfirmDTO dto);

BookingResponseDTO.CancelBookingResultDTO cancelBooking(Long bookingId, BookingRequestDTO.CancelBookingDTO dto);

}
Loading