Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
296 commits
Select commit Hold shift + click to select a range
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
bd3c656
[REFACTOR]: PaymentService 외부 API 호출 로직 분리
zerochani Jan 31, 2026
e98b7bf
Merge branch 'main' into develop
CokaNuri Jan 31, 2026
5945b0d
[FIX]: 결제 승인 API 예외 발생 시 결제 실패 상태 미반영 버그 수정
zerochani Jan 31, 2026
f395a4d
[FIX] : QClass 관련 빌드 에러 수정
CokaNuri Jan 31, 2026
278f5e7
[FIX]: TossPaymentService 결제 취소 요청 URI 생성 방식 개선
zerochani Jan 31, 2026
fd48817
[FIX]: TossPaymentService RestClient 주입 모호성 해결
zerochani Jan 31, 2026
429f91e
Merge pull request #91 from Eatsfine/feature/payment
zerochani Jan 31, 2026
9586ebe
[REFACTOR]: 가게 테이블 생성 시 이미지 업로드 로직 추가 (#93)
sonjunkyu Feb 2, 2026
84ced95
[FEAT] Toss Payments Webhook 연동 및 상태 동기화 로직 구현 (#95)
zerochani Feb 4, 2026
eb3220e
Create .coderabbit.yaml (#97)
SungMinju Feb 4, 2026
4e709a7
[FEAT] Member&Auth 구현 완료 (#96)
SungMinju Feb 4, 2026
6f2dbff
[FIX]: 테스트 환경 설정 및 의존성 주입 오류로 인한 빌드 실패 수정
zerochani Feb 5, 2026
74b9d67
[TEST]: 보안필터를 활성화하거나 @WithMockUser 등으로 보안 동작을 검증하는 케이스를 추가
zerochani Feb 5, 2026
c1e7030
Merge pull request #99 from Eatsfine/dev2
zerochani Feb 5, 2026
15b0d64
[FEAT]: Spring Security 기반 사장 권한 RBAC 적용 (#102)
twodo0 Feb 6, 2026
dd0329a
[FEAT]: 1:1 문의 등록 API 구현
zerochani Feb 6, 2026
cd9d791
[TEST]: 1:1 문의 등록 API 컨트롤러 테스트 추가
zerochani Feb 6, 2026
7f6d26d
[CONFIG]: 1:1 문의 API 보안 허용 설정
zerochani Feb 6, 2026
2287aff
[FEAT]: ApiResponse로 응답 통일하기
zerochani Feb 6, 2026
1d48fdf
[FEAT]: 문자열 길이 제약 추가
zerochani Feb 6, 2026
352dc1a
[FEAT]: DTO 유효성 검증 실패 테스트 케이스 추가
zerochani Feb 6, 2026
07659dd
Merge pull request #104 from Eatsfine/feature/inquiry
zerochani Feb 6, 2026
e38117a
Merge branch 'main' into develop
zerochani Feb 6, 2026
88af538
[FIX]: StoreTableCommandServiceImpl 중복 에러 해결
twodo0 Feb 6, 2026
f4c8e23
[FIX]: StoreCommandServiceImpl 중복 에러 해결
twodo0 Feb 6, 2026
1e9f253
[Feat] (구글/카카오) 소셜 로그인 구현 및 회원 탈퇴 로직 보완 (#110)
SungMinju Feb 7, 2026
6003fcb
Merge remote-tracking branch 'origin/main' into develop
zerochani Feb 7, 2026
2cd4c13
[FEAT]: test/application.yml 에도 설정 추가
zerochani Feb 7, 2026
f87b28b
Merge pull request #115 from Eatsfine/feature/bug1
zerochani Feb 7, 2026
c31ce87
[FEAT]: 내 가게 관리 페이지 조회 API에 사장 권한 RBAC 적용 (#117)
sonjunkyu Feb 7, 2026
6c01d63
[FEAT]: Store, StoreTable 도메인 전체 접근 허용 URI 설정 (#118)
twodo0 Feb 7, 2026
df7a282
[FEAT]: 가게 상세조회 응답에 depositRate 추가
twodo0 Feb 8, 2026
b0c9a6e
Merge branch 'main' into develop
twodo0 Feb 8, 2026
15dfdfe
[FEAT]: 숫자로 depositRate 응답 나가도록 수정
twodo0 Feb 8, 2026
eb7bef7
Merge branch 'main' into develop
twodo0 Feb 8, 2026
d3d9d23
[FEAT] 사장 예약 관리 API 개발 및 기존 예약 API 리팩토링 (#120)
CokaNuri Feb 8, 2026
c1f5fa3
[FEAT]: 패스워드 수정 API 구현 (#119)
SungMinju Feb 8, 2026
f544f98
[Refactor] setSecure 동적 설정 (#124)
SungMinju Feb 8, 2026
fc27035
Merge branch 'main' into develop
SungMinju Feb 8, 2026
5d8ee2f
[FIX]: VerifyOwnerDto 에러 수정
twodo0 Feb 9, 2026
5aa6b22
[FIX]: 비회원 1:1 문의 등록 시 401 에러 해결
zerochani Feb 11, 2026
05d1c8b
Merge pull request #127 from Eatsfine/feature/inquiry1
zerochani Feb 11, 2026
9a2ae15
[Fix] 사용자 프로필 이미지 오류 수정 (#130)
SungMinju Feb 11, 2026
e68c6fa
Merge branch 'main' into develop
SungMinju Feb 11, 2026
7fa07ad
[FEAT]: 프론트 배포주소 및 로컬 CORS 허용
zerochani Feb 12, 2026
656236b
Merge branch 'main' into develop
zerochani Feb 12, 2026
48d9dd5
[FEATURE]: 가게 심야 영업 허용 및 예약-브레이크타임 충돌 방어 로직 구현 (#128)
twodo0 Feb 12, 2026
6129508
[REFACTOR]: TableLayout 엔티티 컬럼 및 테이블 배치도 재생성 시 미래 예약 검증 로직 추가 (#132)
sonjunkyu Feb 12, 2026
81940b9
[Debug] 회원탈퇴 외래키 제약으로 인한 오류 & 프로필 이미지 url 반환 코드 수정 (#133)
SungMinju Feb 12, 2026
3ebd37a
[FEAT]: 마이페이지에서의 내 가게 리스트 조회 API 추가 (#135)
twodo0 Feb 12, 2026
fe84009
Merge branch 'main' into develop
twodo0 Feb 12, 2026
33e9284
Update CustomOAuth2FailureHandler.java
SungMinju Feb 12, 2026
bbca5db
Update CustomOAuth2SuccessHandler.java
SungMinju Feb 12, 2026
3f6847c
Update AuthCookieProvider.java
SungMinju Feb 12, 2026
bdfad23
[FIX]: 불필요 도커이미지 제거 명령어 배포 스크립트에 추가
zerochani Feb 12, 2026
efd8476
Merge pull request #137 from Eatsfine/feature/ci-cd
zerochani Feb 12, 2026
83db327
Merge branch 'main' into develop
SungMinju Feb 12, 2026
1609074
Update README.md
SungMinju Feb 12, 2026
6a791aa
Update README.md
SungMinju Feb 12, 2026
86f4806
Update README.md
SungMinju Feb 12, 2026
a2300ee
[DOCS]: 내 담당 역할 작성
zerochani Feb 12, 2026
c586afe
[DOCS]: 영도/이도영 담당 역할 작성
twodo0 Feb 12, 2026
a87cb41
Update README.md
SungMinju Feb 12, 2026
2fc7895
Update README.md
CokaNuri Feb 12, 2026
1be6928
[DOCS]: 준/손준규 담당 역할 작성
sonjunkyu Feb 12, 2026
e7c5297
[FIX]: 배치도 재생성 시 Unique 제약 조건 오류 해결 (#139)
sonjunkyu Feb 14, 2026
5921ec5
[REFACTOR]: 메뉴 선택 없이 예약했을 때 메시지 던지도록 수정 (#140)
twodo0 Feb 14, 2026
080ab7c
[REFACTOR]: 사업자 인증 시 대표자 이름을 별도로 입력받도록 수정 (#143)
twodo0 Feb 18, 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
6 changes: 3 additions & 3 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,14 @@ jobs:
set -e
cd /home/ec2-user/deploy

# 불필요한 도커 이미지 및 컨테이너 정리
docker system prune -a -f || true

Comment on lines +85 to +87
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

docker system prune -a -f-a 플래그가 과도하게 공격적이며, 실행 위치도 최적이 아닙니다.

두 가지 문제가 있습니다.

1. -a 플래그 — 다른 서비스 이미지 제거 위험

docker system prune -a -f 는 실행 중인 컨테이너에 연결된 이미지를 제외하고 모든 미사용 이미지를 삭제합니다. EC2 호스트에 다른 Docker 서비스(예: nginx, DB 등)가 존재하고 해당 컨테이너가 배포 시점에 잠시라도 중지되어 있다면, 해당 서비스의 이미지가 영구적으로 삭제됩니다.

불필요한 레이어(dangling 이미지)만 제거하려면 -a 없이 사용하거나 docker image prune -f 로 범위를 제한하는 것이 안전합니다.

2. 실행 위치 — 현재 배포의 구 이미지가 정리되지 않음

현재 실행 순서:

  1. docker system prune -a -f ← 컨테이너가 아직 실행 중이므로 eatsfine-be:latest 이미지는 보호됨
  2. docker pull ← 새 이미지가 latest 태그를 가져가고, 구 이미지는 dangling 상태가 됨
  3. docker compose down / up -d

즉, 이번 배포에서 생긴 dangling 구 이미지는 이미 prune이 끝난 뒤 발생하기 때문에 다음 배포 때까지 디스크에 남습니다. 이전 방식(docker compose down 이후 prune)이 오히려 같은 사이클 내에서 구 이미지를 정리하는 데 더 효과적이었습니다.

아래와 같이 수정하면 두 문제를 모두 완화할 수 있습니다.

🛠️ 제안된 수정안
           docker pull ${{ secrets.DOCKERHUB_USERNAME }}/eatsfine-be:latest
         
           docker compose down
+
+          # 불필요한 dangling 이미지 및 중지된 컨테이너 정리 (다른 서비스 이미지는 유지)
+          docker system prune -f || true
+
           docker compose up -d
         
           docker ps
-          # 불필요한 도커 이미지 및 컨테이너 정리
-          docker system prune -a -f || true
-
           docker pull ${{ secrets.DOCKERHUB_USERNAME }}/eatsfine-be:latest
  • -a 제거: dangling 이미지만 삭제하여 다른 서비스 이미지를 보호합니다.
  • docker compose down 이후로 이동: 구 이미지가 dangling 상태가 된 직후 같은 사이클 내에서 정리됩니다.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/deploy.yml around lines 85 - 87, Replace the aggressive
global prune command `docker system prune -a -f` with a safer, scoped prune and
move it after the compose teardown: remove the `-a` flag (or use `docker image
prune -f`) so only dangling images are removed, and relocate the prune step to
run after `docker compose down`/after `docker pull` so the just-replaced old
image becomes dangling and is cleaned within the same deployment cycle; update
the workflow to call the scoped prune command at that later point (reference the
existing `docker system prune -a -f`, `docker image prune -f`, `docker pull`,
and `docker compose down`/`up -d` steps).

docker pull ${{ secrets.DOCKERHUB_USERNAME }}/eatsfine-be:latest

docker compose down
docker compose up -d

# 불필요한 도커 이미지 및 컨테이너 정리
docker image prune -f

docker ps
EOF
- name: GitHub Actions - SSH 및 컨테이너 실제 포트 접근 권한 제거
Expand Down
259 changes: 257 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,257 @@
# BE
Eatsfine-BackEnd
# 🍽️ Eatsfine BE

**Eatsfine 백엔드 레포지토리입니다.**

🖇️**Service URL**
https://www.eatsfine.co.kr

📚**API Documentation**
https://eatsfine.co.kr/swagger-ui/index.html

- Language: **Java 21**
- Framework: **Spring Boot 3.4.1**
- Database: **MySQL 8.0**, **Redis**
- ORM: **Spring Data JPA**, **QueryDSL 5.1.0**
- Security: **Spring Security**, **OAuth2 Client**, **JWT**
- Cloud & Infra: **AWS S3**, **Docker**, **GitHub Actions**
- Build Tool: **Gradle**

## 🔥 Git Commit Convention (커밋 규칙)

효율적인 협업을 위해 다음과 같은 커밋 메세지 규칙을 사용합니다.

**type은 대문자로 통일합니다.**

| 커밋 타입 | 설명 |
| ------------- | ------------------------------ |
| 🎉 `FEAT` | 새로운 기능 추가 |
| 🐛 `FIX` | 버그/오류 수정 |
| 🛠 `CHORE` | 코드/내부 파일/설정 수정 |
| 📝 `DOCS` | 문서 수정 (README 등) |
| 🔄 `REFACTOR` | 코드 리팩토링 (기능 변경 없음) |
| 🧪 `TEST` | 테스트 코드 추가/수정 |
| 🎨 `STYLE` | 스타일 변경(포맷, 세미콜론 등) |

💻 **예시**

```bash
git commit -m "[FEAT]: 예약 생성 API 구현"
git commit -m "[FIX]: OAuth2 로그인 리다이렉트 오류 수정"
git commit -m "[CHORE]: SecurityConfig CORS 설정 변경"
```

## 📁 폴더 구조

<details>
<summary>폴더 구조 펼치기/접기</summary>

```plaintext
src/main/java/com/eatsfine/eatsfine/
├── domain/ # 도메인별 비즈니스 로직
│ ├── booking/ # 예약 관리
│ ├── businesshours/ # 영업시간 관리
│ ├── businessnumber/ # 사업자번호 검증
│ ├── image/ # 이미지 처리
│ ├── inquiry/ # 문의 관리
│ ├── menu/ # 메뉴 관리
│ ├── payment/ # 결제 시스템
│ ├── region/ # 지역 관리
│ ├── store/ # 식당 정보 관리
│ ├── storetable/ # 식당 테이블 관리
│ ├── table_layout/ # 테이블 배치도
│ ├── tableblock/ # 테이블 블록 관리
│ ├── tableimage/ # 테이블 이미지
│ ├── term/ # 약관 관리
│ └── user/ # 사용자(회원) 관리
└── global/ # 전역 설정 및 공통 모듈
├── annotation/ # 커스텀 어노테이션
├── apiPayload/ # 공통 응답/예외 처리 (ApiResponse)
├── auth/ # 보안/인증 로직 (CustomHandler 등)
├── common/ # 공통 유틸리티
├── config/ # 설정 파일 (Security, Swagger, QueryDSL 등)
├── controller/ # 공통 컨트롤러 (HealthCheck)
├── resolver/ # Argument Resolver
├── s3/ # AWS S3 연동
└── validator/ # 커스텀 검증기
```
</details>
Comment on lines +77 to +78
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

코드 블록 전후 빈 줄 누락 (MD031).

Lines 77–78과 Lines 245–246에서 닫는 코드 펜스(```) 바로 다음에 </details> 태그가 오고 있어 Markdown 렌더링 시 경고가 발생합니다. 코드 블록 뒤에 빈 줄을 추가하세요.

📝 수정 제안
``` (Lines 77–78 및 Lines 245–246 모두 동일하게 적용)

Also applies to: 245-246

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 77-77: Fenced code blocks should be surrounded by blank lines

(MD031, blanks-around-fences)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` around lines 77 - 78, Add a blank line between closing code fences
and the closing details tag where a code fence (` ``` `) is immediately followed
by `</details>` to satisfy MD031; locate the two occurrences where ` ``` ` is
directly adjacent to `</details>` (both near the earlier and later blocks) and
insert a single empty line after each closing fence so the sequence becomes `
``` `, blank line, then `</details>`.



Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

후행 공백 제거 필요 (MD009).

Line 80에 불필요한 후행 공백이 1개 존재합니다. 해당 줄의 공백을 제거하거나 줄바꿈 의도라면 2칸으로 통일하세요.

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 80-80: Trailing spaces
Expected: 0 or 2; Actual: 1

(MD009, no-trailing-spaces)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` at line 80, README.md 파일의 해당 줄에 후행 공백(스페이스 한 칸)이 남아 있으니 해당 줄의 끝에서
불필요한 공백을 삭제하거나 줄바꿈 의도라면 후행 공백을 2칸으로 통일해 수정하세요.

## 🌿 Branch

- main : 배포/최종 안정 브랜치 **(직접 push 금지)**
- develop: 개발 통합 브랜치 (기본 작업 브랜치)
- 작업 브랜치 네이밍:
- `feat/booking-api`
- `fix/oauth-login`
- `chore/swagger-config`
- `refactor/payment-service`

## 🎯 작업 루틴

기본 브랜치는 develop

작업은 항상 `develop`에서 브랜치를 따서 진행하고, PR은 develop으로 올립니다.

### 1. 작업 시작 전 (최신화)

```bash
git checkout develop
git pull --rebase origin develop
```

### 2. 작업 브랜치 생성

```bash
git checkout -b feat/featureName
```

### 3. 작업 후 커밋 & 푸시

```bash
git add . # 필요하면 git add file명 으로 특정 파일만 추가해도 됨
git commit -m "feat: 자세한 내용 적기"
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

커밋 예시 형식이 프로젝트 규칙과 다릅니다.

Line 114의 예시 "feat: 자세한 내용 적기"는 소문자에 대괄호가 없는 형식이지만, 커밋 규칙 섹션(Lines 38–40)에서는 [FEAT]: 예약 생성 API 구현 형식을 사용합니다. 문서 내 일관성을 위해 통일이 필요합니다.

📝 수정 제안
-git commit -m "feat: 자세한 내용 적기"
+git commit -m "[FEAT]: 자세한 내용 적기"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
git commit -m "feat: 자세한 내용 적기"
git commit -m "[FEAT]: 자세한 내용 적기"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` at line 114, Update the commit example git commit -m "feat: 자세한 내용
적기" to match the project's commit rule format by replacing it with the bracketed
uppercase style used elsewhere (e.g. git commit -m "[FEAT]: 자세한 내용 적기"),
ensuring the casing and bracket punctuation match the existing example "[FEAT]:
예약 생성 API 구현" so the README shows a consistent commit message convention.

git push -u origin feat/featureName
```

### 4. PR 생성

- feat/<featureName> → develop 로 PR 생성
- PR 본문에 Closes #이슈번호 작성해서 merge 시 이슈가 자동으로 닫히도록 설정

```md
Closes #이슈번호
```

### 5. 리뷰 & 머지

- 최소 2명 승인 후 merge
- main은 배포/최종용 브랜치이기에 **직접 push 금지**

## 🔒 보안

- `application.yml` 및 민감정보는 절대 커밋 금지
- 공유가 필요한 환경변수는 `application-local.yml` 등을 통해 관리하거나 노션/슬랙을 통해 공유합니다.

## 👥 팀 규칙

- **작업 시작전 develop 최신화: git pull --rebase origin develop**
- PR은 가능한 작게 쪼개서 올리기
- PR에 작업 요약 + 테스트 결과 포함하기
- 충돌 발생 시 브랜치에서 먼저 해결 후 PR 업데이트

## 🛠️ 팀원 정보 ##
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

ATX-closed 헤딩 스타일 사용 (MD003).

Line 144의 ## 🛠️ 팀원 정보 ##는 trailing ##가 붙은 ATX-closed 형식입니다. 나머지 헤딩은 모두 ATX 형식이므로 통일이 필요합니다.

📝 수정 제안
-## 🛠️ 팀원 정보 ##
+## 🛠️ 팀원 정보
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## 🛠️ 팀원 정보 ##
## 🛠️ 팀원 정보
🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 144-144: Heading style
Expected: atx; Actual: atx_closed

(MD003, heading-style)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` at line 144, The heading "## 🛠️ 팀원 정보 ##" uses ATX-closed style
(trailing "##") while the rest of the document uses ATX style; remove the
trailing "##" so it becomes "## 🛠️ 팀원 정보" to match the other headings and MD003
rules.


| 이름 | 주요 담당 업무 |
| --------- |-----------------------------------------------------|
| 민토리 / 성민주 | 회원/인증, JWT 등 공통 보안 설정, 공통 응답 + 예외 처리 |
| 앤디 / 박영찬 | CI/CD, 토스 페이먼츠 결제 위젯 연동, 1:1 문의 |
| 영도 / 이도영 | 식당 도메인, OpenAPI 활용 사업자 인증, RBAC 기반 권한 제어, AWS S3 연동 |
| 준 / 손준규 | 식당 배치도, 테이블 CRUD 개발 및 테이블별 예약 가능 시간대 관리 |
| 누리 / 정준영 | 예약 도메인 개발, 결제 프로세스와 연동 |


## 💡 시작 방법

### 1. Clone & Install

```bash
git clone https://github.com/Eatsfine/BE.git
cd eatsfine-be
./gradlew clean build
Comment on lines +160 to +162
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

cd eatsfine-be 경로명이 실제 클론 결과와 일치하지 않습니다.

git clone https://github.com/Eatsfine/BE.git 실행 시 생성되는 디렉토리명은 BE입니다. eatsfine-be로 이동하려 하면 명령이 실패합니다.

📝 수정 제안
 git clone https://github.com/Eatsfine/BE.git
-cd eatsfine-be
+cd BE
 ./gradlew clean build
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
git clone https://github.com/Eatsfine/BE.git
cd eatsfine-be
./gradlew clean build
git clone https://github.com/Eatsfine/BE.git
cd BE
./gradlew clean build
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` around lines 160 - 162, README contains a wrong directory name
after cloning: the diff shows "git clone https://github.com/Eatsfine/BE.git"
followed by "cd eatsfine-be", but the clone creates a "BE" folder. Update the
README to either change "cd eatsfine-be" to "cd BE" or modify the clone command
to "git clone https://github.com/Eatsfine/BE.git eatsfine-be" so the directory
names match; ensure both the "git clone" and "cd" lines are consistent.

```

### 2. Environment Values

DB 접속 정보 및 외부 API 키 등은 환경변수 또는 로컬 설정 파일로 관리합니다.
`src/main/resources/application-local.yml`을 생성하여 필요한 설정을 추가하세요.

<details>
<summary>폴더 구조 펼치기/접기</summary>
Comment on lines +170 to +171
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

<details> 요약 레이블이 내용과 맞지 않습니다.

Line 171의 요약 텍스트가 "폴더 구조 펼치기/접기"로 되어 있으나, 내부 내용은 application-local.yml YAML 설정 예시입니다.

📝 수정 제안
-  <summary>폴더 구조 펼치기/접기</summary>
+  <summary>application-local.yml 예시 펼치기/접기</summary>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<details>
<summary>폴더 구조 펼치기/접기</summary>
<details>
<summary>application-local.yml 예시 펼치기/접기</summary>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@README.md` around lines 170 - 171, The <details> block's <summary> currently
reads "폴더 구조 펼치기/접기" but its content is an application-local.yml YAML example;
update the <summary> text inside the <details> tag to accurately describe the
content (e.g., "application-local.yml 예시" or "YAML 설정 예시") so the summary
matches the enclosed configuration snippet and improves clarity.


```yaml
server:
port: 8080
profile: local

spring:
config:
activate:
on-profile: local
datasource:
url: jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}?useSSL=false&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&serverTimezone=Asia/Seoul
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
driver-class-name: com.mysql.cj.jdbc.Driver
data:
redis:
host: ${REDIS_HOST}
port: ${REDIS_PORT}
jpa:
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
format_sql: true
security:
oauth2:
client:
registration:
google:
client-id: ${GOOGLE_CLIENT_ID}
client-secret: ${GOOGLE_CLIENT_SECRET}
scope:
- email
- profile
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
kakao:
client-id: ${KAKAO_CLIENT_ID}
client-secret: ${KAKAO_CLIENT_SECRET}
scope:
- profile_nickname
- profile_image
- account_email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-name: Kakao
provider: kakao
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/v2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
kakao:
authorization-uri: https://kauth.kakao.com/oauth/authorize
token-uri: https://kauth.kakao.com/oauth/token
user-info-uri: https://kapi.kakao.com/v2/user/me
user-name-attribute: id

payment:
toss:
widget-secret-key: ${TOSS_WIDGET_SECRET_KEY}

cloud:
aws:
region: ${AWS_REGION}
s3:
bucket: ${AWS_S3_BUCKET}
base-url: ${AWS_S3_BASE_URL}

jwt:
secret: ${SECRET_KEY}
```
</details>

### 3. Run

```bash
./gradlew bootRun
```

### 4. API Docs (Swagger)

서버 실행 후 아래 주소로 접속하여 API 명세를 확인할 수 있습니다.
- Local: http://localhost:8080/swagger-ui/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@

import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.RequestParam;
Expand Down Expand Up @@ -36,12 +38,12 @@ public record CreateBookingDTO(
@NotNull @Min(1) Integer partySize,
@NotNull List<Long> tableIds,
@NotNull boolean isSplitAccepted,
@NotNull List<MenuOrderDto> menuItems
@Valid @NotEmpty(message = "예약 시 메뉴 선택은 필수입니다.") List<MenuOrderDto> menuItems
){}

public record MenuOrderDto(
@NotNull Long menuId,
@NotNull @Min(1) Integer quantity
@NotNull @Min(value = 1, message = "최소 1개 이상 주문해야 합니다.") Integer quantity
){}

public record PaymentConfirmDTO(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
package com.eatsfine.eatsfine.domain.businessnumber.dto;

import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;
import lombok.Builder;

public class BusinessNumberReqDto {

@Builder
public record BusinessNumberDto(

@Schema(description = "이름", example = "홍길동")
@NotBlank(message = "이름은 필수입니다.")
@Size(min = 2, max = 20, message = "이름은 2자 이상 20자 이내여야 합니다.")
String name,
Comment on lines +14 to +17
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

name 필드에 문자 유형 제한 @Pattern 추가 권장

@Size(min = 2, max = 20)은 길이만 검증하므로 "1234567"과 같은 숫자 문자열이나 특수문자 조합도 유효한 이름으로 통과됩니다. 대표자 성명은 한글 또는 영문으로만 구성되어야 하므로 아래처럼 @Pattern을 추가하세요.

✏️ 제안 수정
+           `@Pattern`(regexp = "^[가-힣a-zA-Z\\s]{2,20}$", message = "이름은 한글 또는 영문만 입력 가능합니다.")
            `@Size`(min = 2, max = 20, message = "이름은 2자 이상 20자 이내여야 합니다.")
            String name,

As per coding guidelines, 입력 검증 및 보안 항목 — "@Valid, Bean Validation 등을 통한 입력값 검증이 되어 있는지" 확인 요망.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
@Schema(description = "이름", example = "홍길동")
@NotBlank(message = "이름은 필수입니다.")
@Size(min = 2, max = 20, message = "이름은 2자 이상 20자 이내여야 합니다.")
String name,
`@Schema`(description = "이름", example = "홍길동")
`@NotBlank`(message = "이름은 필수입니다.")
`@Pattern`(regexp = "^[가-힣a-zA-Z\\s]{2,20}$", message = "이름은 한글 또는 영문만 입력 가능합니다.")
`@Size`(min = 2, max = 20, message = "이름은 2자 이상 20자 이내여야 합니다.")
String name,
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@src/main/java/com/eatsfine/eatsfine/domain/businessnumber/dto/BusinessNumberReqDto.java`
around lines 14 - 17, The name field in BusinessNumberReqDto currently only
checks length and blankness, so update the 'name' field validation by adding a
`@Pattern` annotation (e.g., allow only Korean and English letters and optional
spaces) to reject numeric/special-character inputs; add a clear message like
"이름은 한글 또는 영문만 허용됩니다." and ensure the annotation is placed alongside `@NotBlank`
and `@Size` on the 'name' field to enforce the restriction.


@NotBlank(message = "사업자번호는 필수입니다.")
@Pattern(regexp = "^[0-9]{10}$", message = "사업자번호는 숫자 10자리여야 합니다.")
String businessNumber,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public StoreResDto.StoreCreateDto createStore(StoreReqDto.StoreCreateDto dto, St
businessNumberValidator.validate(
dto.businessNumberDto().businessNumber(),
dto.businessNumberDto().startDate(),
user.getName());
dto.businessNumberDto().name());
Comment on lines 55 to +58
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

dto.businessNumberDto().name() 변경은 일관성 있음 — 단, @Transactional 내 외부 API 호출 주의

Line 58의 변경(dto.businessNumberDto().name())은 UserServiceImpl.verifyOwner의 변경과 일관되며 코드 자체는 올바릅니다. 단, 동일한 보안 고려사항(user.getName() → DTO 입력값 사용으로 인한 인증 신뢰 약화)이 여기서도 동일하게 적용됩니다.

추가로, StoreCommandServiceImpl에 클래스 레벨 @Transactional이 적용되어 있어 businessNumberValidator.validate() (외부 HTTP API 호출로 추정)이 트랜잭션 내에서 실행됩니다. 외부 API 응답이 지연될 경우 DB 커넥션이 그대로 점유되어 커넥션 풀 고갈로 이어질 수 있습니다.

💡 개선 방향 예시
// 외부 API 검증을 트랜잭션 시작 전에 수행하도록 분리
// Option: `@Transactional`(propagation = Propagation.REQUIRES_NEW) 별도 메서드, 
// 또는 createStore 내에서 validate() 후 트랜잭션 시작
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@src/main/java/com/eatsfine/eatsfine/domain/store/service/StoreCommandServiceImpl.java`
around lines 55 - 58, The change calling
businessNumberValidator.validate(dto.businessNumberDto().businessNumber(),
dto.businessNumberDto().startDate(), dto.businessNumberDto().name()) is
functionally fine but introduces two issues: it trusts a client-supplied name
(same concern as UserServiceImpl.verifyOwner change) and it executes an
external-validation call inside a class-level `@Transactional` method
(StoreCommandServiceImpl) which can hold DB connections during slow HTTP calls.
Fix by using the authenticated server-side name (e.g., the current User
principal / user.getName()) instead of dto.businessNumberDto().name() when
asserting ownership, and move the businessNumberValidator.validate(...) out of
the transactional boundary—either call it before entering the `@Transactional`
createStore flow or put it in a separate method with Propagation.REQUIRES_NEW to
ensure external HTTP validation does not run inside the transaction.


log.info("사업자 번호 검증 성공: {}", dto.businessNumberDto().businessNumber());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,10 @@ public TableLayoutResDto.LayoutDetailDto createLayout(
throw new TableLayoutException(TableLayoutErrorStatus._CANNOT_DELETE_LAYOUT_WITH_FUTURE_BOOKINGS);
}

// 미래 예약이 없으면 배치도 비활성화 후 재생성
// 미래 예약이 없으면 배치도와 속해있는 테이블 삭제 (soft delete)
tableLayoutRepository.delete(existingLayout.get());

tableLayoutRepository.flush();
}

// 새 배치도 생성
Expand Down
Loading