Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
279 commits
Select commit Hold shift + click to select a range
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
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
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 @@ -2,6 +2,7 @@

import com.eatsfine.eatsfine.domain.booking.entity.Booking;
import com.eatsfine.eatsfine.domain.booking.enums.BookingStatus;
import com.eatsfine.eatsfine.domain.store.entity.Store;
import com.eatsfine.eatsfine.domain.user.entity.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
Expand Down Expand Up @@ -78,4 +79,54 @@ List<Booking> findActiveBookingsByTableAndDate(
* @return 만료된 예약 리스트
*/
List<Booking> findAllByStatusAndCreatedAtBefore(BookingStatus status, LocalDateTime threshold);


/**
* 특정 식당의 브레이크 타임과 겹치는 가장 늦은 예약 날짜를 조회합니다.
* @param adjustedBreakStart 브레이크 시작 시간에서 식당의 예약 간격(bookingIntervalMinutes)을 뺀 시간
*/
@Query("select max(b.bookingDate) from Booking b " +
"where b.store.id = :storeId " +
"and b.status IN (com.eatsfine.eatsfine.domain.booking.enums.BookingStatus.CONFIRMED, com.eatsfine.eatsfine.domain.booking.enums.BookingStatus.PENDING) " +
"and b.bookingDate >= CURRENT_DATE " +
"and (" +
" (b.bookingTime >= :breakStart and b.bookingTime < :breakEnd) " + // 1. 브레이크 타임 내 시작
" OR " +
" (:adjustedBreakStart < :breakStart and b.bookingTime >= :adjustedBreakStart and b.bookingTime < :breakStart) " + // 2. 일반적인 경우 (낮)
" OR " +
" (:adjustedBreakStart > :breakStart and (b.bookingTime >= :adjustedBreakStart or b.bookingTime < :breakStart)) " + // 3. 자정 넘어가는 경우 (밤)
")"
)
Optional<LocalDate> findLastConflictingDate(
@Param("storeId") Long storeId,
@Param("breakStart") LocalTime breakStart,
@Param("breakEnd") LocalTime breakEnd,
@Param("adjustedBreakStart") LocalTime adjustedBreakStart
);

@Query("SELECT DISTINCT bt.storeTable.id FROM BookingTable bt " +
"JOIN bt.booking b " +
"WHERE bt.storeTable.id IN :tableIds " +
"AND (b.bookingDate > :currentDate " +
" OR (b.bookingDate = :currentDate AND b.bookingTime >= :currentTime)) " +
"AND b.status IN ('CONFIRMED', 'PENDING')")
List<Long> findTableIdsWithFutureBookings(
@Param("tableIds") List<Long> tableIds,
@Param("currentDate") LocalDate currentDate,
@Param("currentTime") LocalTime currentTime
);
@Query("select count(b) from Booking b " +
"where b.store = :store " +
"and b.status in (com.eatsfine.eatsfine.domain.booking.enums.BookingStatus.CONFIRMED, " +
"com.eatsfine.eatsfine.domain.booking.enums.BookingStatus.PENDING, " +
"com.eatsfine.eatsfine.domain.booking.enums.BookingStatus.COMPLETED)")
Long countActiveBookings(@Param("store") Store store);

@Query("select b.store.id, count(b) from Booking b " +
"where b.store in :stores " +
"and b.status in (com.eatsfine.eatsfine.domain.booking.enums.BookingStatus.CONFIRMED, " +
"com.eatsfine.eatsfine.domain.booking.enums.BookingStatus.PENDING, " +
"com.eatsfine.eatsfine.domain.booking.enums.BookingStatus.COMPLETED) " +
"group by b.store.id")
List<Object[]> countActiveBookingsByStores(@Param("stores") List<Store> stores);
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.springframework.web.bind.annotation.*;

import java.security.Principal;
import java.time.LocalDate;

@Tag(name = "BusinessHours", description = "영업시간 관련 API")
@RequestMapping("/api/v1")
Expand Down Expand Up @@ -51,6 +52,14 @@ public ApiResponse<BusinessHoursResDto.UpdateBreakTimeDto> updateBreakTime(
@RequestBody BusinessHoursReqDto.UpdateBreakTimeDto dto,
@CurrentUser User user
){
BusinessHoursResDto.UpdateBreakTimeDto result = businessHoursCommandService.updateBreakTime(storeId, dto, user.getUsername());

// 1. 날짜가 미래라면 DELAYED(지연) 코드 반환
if (result.effectiveDate().isAfter(LocalDate.now())) {
return ApiResponse.of(
BusinessHoursSuccessStatus._UPDATE_BREAKTIME_DELAYED,
result);
}
return ApiResponse.of(
BusinessHoursSuccessStatus._UPDATE_BREAKTIME_SUCCESS,
businessHoursCommandService.updateBreakTime(storeId, dto, user.getUsername())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.eatsfine.eatsfine.domain.businesshours.dto.BusinessHoursResDto;
import com.eatsfine.eatsfine.domain.businesshours.entity.BusinessHours;

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

public class BusinessHoursConverter {
Expand Down Expand Up @@ -49,11 +50,12 @@ public static BusinessHoursResDto.UpdateBusinessHoursDto toUpdateBusinessHoursDt
.build();
}

public static BusinessHoursResDto.UpdateBreakTimeDto toUpdateBreakTimeDto(Long storeId, BusinessHoursReqDto.UpdateBreakTimeDto dto) {
public static BusinessHoursResDto.UpdateBreakTimeDto toUpdateBreakTimeDto(Long storeId, BusinessHoursReqDto.UpdateBreakTimeDto dto, LocalDate effectiveDate) {
return BusinessHoursResDto.UpdateBreakTimeDto.builder()
.storeId(storeId)
.breakStartTime(dto.breakStartTime())
.breakEndTime(dto.breakEndTime())
.effectiveDate(effectiveDate)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.eatsfine.eatsfine.domain.businesshours.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
Expand All @@ -15,14 +16,18 @@ public class BusinessHoursReqDto {
public record Summary(

@NotNull(message = "요일은 필수입니다.")
@Schema(description = "요일", example = "MONDAY")
DayOfWeek day,

@Schema(description = "영업 시작 시간", type = "string", example = "09:00")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
LocalTime openTime,

@Schema(description = "영업 종료 시간", type = "string", example = "22:00")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
LocalTime closeTime,

@Schema(description = "휴무 여부", example = "false")
boolean isClosed
){}

Expand All @@ -36,10 +41,12 @@ public record UpdateBusinessHoursDto(
public record UpdateBreakTimeDto(

@NotNull(message = "브레이크타임 시작 시간은 필수입니다.")
@Schema(description = "브레이크 시작 시간", type = "string", example = "15:00")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
LocalTime breakStartTime,

@NotNull(message = "브레이크타임 종료 시간은 필수입니다.")
@Schema(description = "브레이크 종료 시간", type = "string", example = "17:00")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
LocalTime breakEndTime
){}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.eatsfine.eatsfine.domain.businesshours.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Builder;

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

Expand Down Expand Up @@ -38,6 +40,9 @@ public record UpdateBreakTimeDto(
LocalTime breakStartTime,

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
LocalTime breakEndTime
LocalTime breakEndTime,

@JsonIgnore
LocalDate effectiveDate
){}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import lombok.*;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalTime;

@Entity
Expand Down Expand Up @@ -39,25 +40,66 @@ public class BusinessHours extends BaseEntity {
@Column(name = "break_end_time")
private LocalTime breakEndTime;

@Column(name = "new_break_start_time")
private LocalTime newBreakStartTime;

@Column(name = "new_break_end_time")
private LocalTime newBreakEndTime;

@Column(name = "effective_date")
private LocalDate effectiveDate;

// 휴일 여부 (특정 요일 고정 휴무)
@Builder.Default
@Column(name = "is_closed", nullable = false)
private boolean isClosed = false;

public void assignStore(Store store){
public void assignStore(Store store) {
this.store = store;
}

// 영업시간 변경
public void update(LocalTime open, LocalTime close, boolean isClosed){
public void update(LocalTime open, LocalTime close, boolean isClosed) {
this.openTime = open;
this.closeTime = close;
this.isClosed = isClosed;
}

// 브레이크타임 변경
public void updateBreakTime(LocalTime breakStart, LocalTime breakEnd){
this.breakStartTime = breakStart;
this.breakEndTime = breakEnd;
public void updateBreakTime(LocalTime startTime, LocalTime endTime, LocalDate effectiveDate) {
// 오늘(혹은 과거) 날짜라면 -> 즉시 반영
if (effectiveDate == null || !effectiveDate.isAfter(LocalDate.now())) {
this.breakStartTime = startTime;
this.breakEndTime = endTime;
// 대기 중인 데이터 초기화
this.newBreakStartTime = null;
this.newBreakEndTime = null;
this.effectiveDate = null;
}
// 미래 날짜라면 -> 대기열에 저장
else {
this.newBreakStartTime = startTime;
this.newBreakEndTime = endTime;
this.effectiveDate = effectiveDate;
}
}

// 대기열 -> 실제 반영 (스케줄러 호출)
public void applyPendingBreakTime() {
if (this.newBreakStartTime != null && this.newBreakEndTime != null) {
this.breakStartTime = newBreakStartTime;
this.breakEndTime = newBreakEndTime;

// 반영 후 대기열 비우기
this.newBreakStartTime = null;
this.newBreakEndTime = null;
this.effectiveDate = null;
}
}

public void clearPendingBreakTime() {
this.newBreakStartTime = null;
this.newBreakEndTime = null;
this.effectiveDate = null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@
import org.springframework.data.jpa.repository.JpaRepository;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;

public interface BusinessHoursRepository extends JpaRepository<BusinessHours, Long> {
Optional<BusinessHours> findByStoreAndDayOfWeek(Store store, DayOfWeek dayOfWeek);
List<BusinessHours> findAllByEffectiveDateLessThanEqualAndEffectiveDateIsNotNull(LocalDate date);
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.eatsfine.eatsfine.domain.businesshours.service;

import com.eatsfine.eatsfine.domain.booking.repository.BookingRepository;
import com.eatsfine.eatsfine.domain.businesshours.converter.BusinessHoursConverter;
import com.eatsfine.eatsfine.domain.businesshours.dto.BusinessHoursReqDto;
import com.eatsfine.eatsfine.domain.businesshours.dto.BusinessHoursResDto;
import com.eatsfine.eatsfine.domain.businesshours.entity.BusinessHours;
import com.eatsfine.eatsfine.domain.businesshours.exception.BusinessHoursException;
import com.eatsfine.eatsfine.domain.businesshours.status.BusinessHoursErrorStatus;
import com.eatsfine.eatsfine.domain.businesshours.validator.BreakTimeValidator;
import com.eatsfine.eatsfine.domain.businesshours.validator.BusinessHoursValidator;
import com.eatsfine.eatsfine.domain.store.entity.Store;
Expand All @@ -12,16 +15,23 @@
import com.eatsfine.eatsfine.domain.store.status.StoreErrorStatus;
import com.eatsfine.eatsfine.domain.store.validator.StoreValidator;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

@Service
@Transactional
@RequiredArgsConstructor
@Slf4j
public class BusinessHoursCommandServiceImpl implements BusinessHoursCommandService {

private final StoreRepository storeRepository;
private final StoreValidator storeValidator;
private final BookingRepository bookingRepository;

@Override
public BusinessHoursResDto.UpdateBusinessHoursDto updateBusinessHours(
Expand Down Expand Up @@ -59,17 +69,52 @@ public BusinessHoursResDto.UpdateBreakTimeDto updateBreakTime(

Store store = storeValidator.validateStoreOwner(storeId, email);


for(BusinessHours bh : store.getBusinessHours()) {
if(bh.isClosed()) continue;
BreakTimeValidator.validateBreakTime(bh.getOpenTime(), bh.getCloseTime(), dto.breakStartTime(), dto.breakEndTime());
try {
BreakTimeValidator.validateBreakTime(bh.getOpenTime(), bh.getCloseTime(), dto.breakStartTime(), dto.breakEndTime());
} catch (BusinessHoursException e) {
log.error("브레이크 타임 검증 실패 - 요일: {}, 영업시간: {}~{}, 브레이크: {}~{}",
bh.getDayOfWeek(), bh.getOpenTime(), bh.getCloseTime(),
dto.breakStartTime(), dto.breakEndTime());
throw e;
}
}

// 브레이크 타임 해제 요청인 경우 (두 시간 모두 null)
if (dto.breakStartTime() == null && dto.breakEndTime() == null) {
for(BusinessHours bh : store.getBusinessHours()) {
bh.updateBreakTime(null, null, LocalDate.now());
}
return BusinessHoursConverter.toUpdateBreakTimeDto(storeId, dto, null);

}

// 한쪽만 null인 비정상 요청 방어
if (dto.breakStartTime() == null || dto.breakEndTime() == null) {
throw new BusinessHoursException(BusinessHoursErrorStatus._INVALID_BREAK_TIME);
}

LocalTime adjustedBreakStart = dto.breakStartTime().minusMinutes(store.getBookingIntervalMinutes());

// 1. 예약 충돌 확인
Optional<LocalDate> lastConflictDate = bookingRepository.findLastConflictingDate(
storeId, dto.breakStartTime(), dto.breakEndTime(), adjustedBreakStart
);
LocalDate effectiveDate;

effectiveDate = lastConflictDate.map(
localDate -> localDate.plusDays(1)) // 예약이 있으면 그 다음날 부터
.orElseGet(LocalDate::now); // 예약 없으면 오늘부터


store.getBusinessHours().forEach(s -> {
if(!s.isClosed()) {
s.updateBreakTime(dto.breakStartTime(), dto.breakEndTime());
s.updateBreakTime(dto.breakStartTime(), dto.breakEndTime(), effectiveDate);
}
});

return BusinessHoursConverter.toUpdateBreakTimeDto(storeId, dto);
return BusinessHoursConverter.toUpdateBreakTimeDto(storeId, dto, effectiveDate);
}
}
Loading