Skip to content

[Release] Dev -> Prod 병합#101

Merged
soeun2537 merged 13 commits intoprodfrom
dev
Mar 4, 2026
Merged

[Release] Dev -> Prod 병합#101
soeun2537 merged 13 commits intoprodfrom
dev

Conversation

@soeun2537
Copy link
Member

#️⃣ 이슈 번호

ex) #이슈번호, #이슈번호


🛠️ 작업 내용

  • 구현한 기능을 작성해주세요.

🙇🏻 중점 리뷰 요청

  • 특히 확인이 필요한 부분, 고민했던 부분 등을 적어주세요.

📸 이미지 첨부 (Optional)

changuii and others added 12 commits January 24, 2026 17:47
…인 변경 (#66)

* feat: 모든 도메인 내 메서드 isFestivalIdEqualTo → isOrganizationIdEqualTo로 변경

* refactor: PlaceFavorite 삭제

* refactor: LostItem 도메인 + 컨트롤러 권한 검증 수정

* refactor: EventDate 도메인 + 컨트롤러 권한 검증 수정

* refactor: Event 도메인 + 컨트롤러 권한 검증 수정

* refactor: Announcement 도메인 + 컨트롤러 권한 검증 수정

* refactor: Council 도메인 삭제

* refactor: ImageStoreController 권한 검증 수정

* refactor: Lineup 도메인 + 컨트롤러 권한 검증 수정

* refactor: council -> organization 으로 인한 변경 사항

* refactor: PlaceAnnouncement 도메인 + 컨트롤러 권한 검증 수정

* refactor: Question 도메인 + 컨트롤러 권한 검증 수정

* refactor: TimeTag 도메인 + 컨트롤러 권한 검증 수정

* refactor: Festival, FestivalImage 도메인 + 컨트롤러 권한 검증 수정

* refactor: Place 도메인 + 컨트롤러 권한 검증 수정

* refactor: PlaceImage 도메인 + 컨트롤러 권한 검증 수정

* refactor: PlaceGeographyController 컨트롤러 권한 검증 수정

* refactor: Council -> Organization 시큐리티 코드 변경

* refactor: FestivalNotificationSubscriptionController 컨트롤러 권한 검증 수정

* docs: 스웨거 제목 수정

* refactor: Organization 도메인 + 컨트롤러 권한 검증 수정

* refactor: Council -> Organization으로 인한 Festival 쪽 응답 수정

* refactor: Festival 검색 API 및 Service 권한 로직 수정

* refactor: LostItemService 권한 로직 수정

* refactor: TimeTagService 권한 로직 수정

* refactor: QuestionService 권한 로직 수정

* refactor: LineupService 권한 로직 수정

* refactor: FestivalImageService 권한 로직 수정

* refactor: PlaceAnnouncementService 권한 로직 수정

* refactor: PlaceGeographyService 권한 로직 수정

* refactor: PlaceImageService 권한 로직 수정

* refactor: EventDateService 권한 로직 수정

* refactor: OrganizationService 권한 로직 수정

* refactor: AnnouncementService 권한 로직 수정

* refactor: PlaceService 권한 로직 수정

* test: Fixture 수정

* refactor: EventService 권한 로직 수정

* refactor: AnnouncementService 권한 로직 수정

* feat: flyway 스키마 추가

* test: 도메인 분리로 인한 테스트 수정

* [Refactor] festival 도메인 분리 과정에서 발생한 버그 수정 및 예외 메시지 변경 (#71)

* fix: organization에 속하는 place만 클론할 수 있도록 변경

* refactor: 모든 권한 예외 응답 메시지를 "접근 권한이 없습니다."로 통일

* fix: 파라미터 변수 이름이 organizationId가 아닌 festivalId로 작성되어있던 버그 수정

- 메서드 명도 festival -> organization으로 변경

* refactor: 불필요한 주석 삭제

* feat: 조직별 축제 리스트 조회 API 구현

* [Feat] Organizer, Staff, StaffAuthorize 추가 (#75)

* feat: Organizer 로그인 및 비밀번호 변경 추가

* feat: Organizer 생성 및 테스트 추가

* feat: Staff 생성 및 테스트 추가

* feat: OrganizationDetails를 AccountDetails로 변경

* refactor: 축제 이미지 컨트롤러 분리

* docs: 축제 관리자로 네이밍 변경

* refactor: 유추하지 못하도록 존재하지 않는 조직 관리자, 존재하지 않는 축제 관리자, 비밀번호 불일치 예외 메시지 통일

* docs: 권한 별, 용도 별로 Swagger 표시

* feat: 특정 축제의 지리 정보 수정 API 추가

* feat: Staff에 name 컬럼 추가

- SecurityConfig에 POST 화이트리스트 테스트 API를 Device로 변경, Staff 로그인에서 security 예외와, 로그인 실패 예외가 같아 변경

* test: EnumSource 권한 검증 테스트에서 권한을 사용하도록 변경

- Staff 권한 추가
- Staff의 Roles 테이블 제거
- StaffControllerTest 추가

* refactor: /organizer 엔드포인트 /organizers로 변경

* fix: 축제 생성 api에 STAFF 권한 제거

- 권한 테스트 추가

* feat: Staff username의 UNIQUE 제약조건 제거

- Staff에 organization과 N:1 제약조건 추가
- username, organization_id 복합 유니크 제약조건 추가

* feat: staff_roles 추가

* test: 잘못된 명명 규칙 수정

* refactor: staffId와 festivalId 노출 제거

* [Refactor] Festival 권한 정책을 주요 도메인 전반으로 확장 적용 (#76)

* refactor: festival 권한 정책을 주요 도메인 서비스 전반에 확장

* refactor: 불필요한 메서드 파라미터 제거

- 테스트를 프로덕션에 맞게 수정

* refactor: 불필요한 JpaRepository 메서드 제거

* refactor: 클래스 명 및 메서드 명 변경

- FestivalAccess -> Authorzation
- AccessCreate -> validateFestivalAccess

* refactor: Policy -> Resolver로 네이밍 변경

* feat: festivalImage id 리스트 검증 추가

* feat: PlaceImage id 리스트 검증 추가

* feat: Place id 리스트 검증 추가

* feat: TimeTag id 리스트 검증 추가

* feat: Question id 리스트 검증 추가

* chore: 주석 제거

* refactor: Id 추출을 Ids 추출과 통일해서 하나만 유지하도록 변경

* refactor: 불필요한 import 제거

* test: 불필요한 import 제거

* refactor: 권한 검증을 먼저 수행하도록 변경

* refactor: getAuthenticatedAccountDetails 메서드에서, Authentication null 검증 추가

* refactor: resolver가 없는 경우, 서버 에러로 명시

* test: 괸리자를 admin으로 명시

* test: 잘못된 변수명 수정

* test: 잘못된 변수명 수정

* feat: Staff 권한 수정 API 추가

* feat: Staff 생성 시, festival 접근 권한도 같이 설정

* feat: Staff 삭제 API 추가

* feat: Staff username, deleteAt UNIQUE 제약조건 변경

- 로그인시 organization_id 반환

* fix: 권한 검증 중, 조회된 festivalId가 없다면 예외가 발생

* chore: NULL 유니크 키 값 방지를 위해 NULL인 경우 고정값을 넣도록 수정

* chore: NULL 유니크 키 값 방지를 위해 NULL인 경우 고정값을 넣도록 수정

* refactor: AuthorizationService에서, 접근하려는 엔티티가 없다면 권한 검증 통과

* refactor: 검증 추가 및 변경

* refactor: staff 저장 stub 추가

* refactor: 중복 검사 제거

* refactor: 주석 제거

* refactor: 중복 사용자 예외 메시지 변경

* refactor: 스태프 -> 축제 관리자 예외 메시지 변경

* refactor: getOrganizationByOgranizationId

* refactor: getStaffByStaffId

* refactor: LinkedHashSet 제거

* refactor: 사용하지 않는 파라미터 제거

* test: 테스트 메서드 네이밍 통일

- 존재하지_않는_축제는_권한_검증_통과
- 권한_없는_축제는_권한_검증_실패
- 존재하지_않는_{엔티티}는_권한_검증_실패

* feat: organization id 추출 resolver 추가

* feat: AuthorizationService에 organization 접근 권한 검증 추가

- AccountDetails 테스트 추가

* feat: 축제 생성 권한 검증 로직 변경

* refactor: 조직의 축제 전체 조회 검증 로직 변경

* refactor: 축제 관리자 생성의 권한 검증 로직 변경

* refactor: 축제 관리자 삭제의 권한 검증 로직 변경

* refactor: 축제 관리자 권한 변경 로직의 권한 검증 로직 변경

* refactor: 조직 관리자 비밀번호 변경 로직의 권한 검증 로직 변경

* feat: AuthorizationService에 organization과 연관된 객체 검증 로직 추가

* refactor: Staff 삭제, 권한 수정 로직에 Staff 권한 로직을 변경

* refactor: staff 로그인 시, organizationId 없이 로그인하도록 변경

* test: 오타 수정

* test: actual을 result로 변경

* refactor: 불필요한 import 제거

* refactor: organizationId로 변경

* refactor: authentication도 403 예외를 던지도록 통일

* refactor: swagger 전역 변수 추가 및 organizationId 헤더 변경

* test: 네이밍 통일

* test: authority endpoint 명을 authorities로 변경

* fix: 잘못된 경로 수정

* test: organizationId, festivalId 헤더 생성을 AcceptanceTestSupport로 중복 제거

- 불필요하게 변수로 가지고있는 헤더도 바로 생성 후 사용하도록 변경

* test: 세미콜론 두개를 하나로 줄임

* refactor: 존재하지 않는 축제 관리자도, 접근 권한 없음로 응답

---------

Co-authored-by: soeun2537 <soeun2537@gmail.com>

* [Feat] 조직 관리자 API, 축제 관리자 API, 권한 검증 API, 계정 관리 조회 API 구현, 축제 수정 API 분리 (#77)

* feat: 민감 정보 마스킹 처리

* feat: api prefix 제거

* refactor: 폴뎌 경로 이동

* docs: SwaggerConfig 수정

* feat: 로그인 응답값에 organizationName 추가

* feat: 조직 관리자 이름 변경 API, 아이디 중복 API 구현

* test: Organizer 도메인 테스트 추가

* feat: flyway 스크립트 수정

* feat: 관리자 권한 검증 API, 계정 관리 조회 API 구현

* test: 관리자 권한 검증 API, 계정 관리 조회 API 테스트 추가

* refactor: 축제 지리 정보 수정 API 3개로 분리

* test: 축제 지리 정보 수정 API 3개로 분리 테스트 수정

* feat: 누락된 변경사항 반영

* feat: 누락된 어노테이션 추가

* refactor: 오타 수정

* test: 깨진 테스트 수정

* refactor: 미사용 메서드 삭제

* test: 오타, 깨지는 테스트 수정

* test: 검증 로직 수정

* refactor: 폴더 이동

* refactor: 관리자 권한 검증 도메인 변경

* test: 테스트 폴더 변경

* refactor: 로그인 응답 값 변경

* feat: 조직 정보 조회 API 구현, 중복 아이디 검증 로직 수정

* feat: flyway Organizer 유니크 제약 조건 추가

* refactor: 조직 관리자 아이디 검증 로직 변경

* refactor: 축제 관리자 아이디 검증 로직 변경

* feat: 조직 정보 조회 API 구현

* refactor: 오타 수정

* refactor: 유니크 제약 삭제

* test: 오타 삭제

* refactor: 선언 방식 변경

* feat: OperatorId 구현

* test: JwtTestHelper 수정

* refactor: Organizer PATCH API 권한 검증 로직 수정

* feat: JwtProvider ADMIN 관련 로직 추가

* feat: Staff 4개 API 구현

* test: Staff 4개 API 테스트 작성 및 타 테스트 로직 보완

* test: 오타 수정

* test: ADMIN 우회 로직 테스트 추가

* test: Fixture 줄바꿈

* test: 테스트 누락 사항 반영

* test: Fixture 사용하도록 변경

* test: StaffServiceTest 리팩터링

* test: 불필요한 RoleType 제거

* refactor: 불필요한 검증 로직 수정

* refactor: 불필요한 코드 삭제

* refactor: == null 비교 Objects.isNull로 변경

* test: 필드 수 검증 추가

* test: operatorId 할당 로직 변경

* test: jwtProvider 호출로 변경

* refactor: OperationId 비교 로직 수정

* refactor: 예외명 변경

* refactor: 아이디 중복 검사 응답 변경

* refactor: 함수 인자 변경

* refactor: 쿼리 deleted 삭제

* refactor: 조직 조회 STAFF 권한까지 가능하도록 변경

* refactor: 검증 로직 리팩터링

* refactor: null 검증 로직 변경

* refactor: polygon 구멍 좌표 개수 제한

* refactor: 축제 조회 권한 변경

* docs: Swagger명 변경

* feat: 축제 관리자들 조회에 권한 목록 추가, 단일 축제 관리자 API 구현

* test: getAllByOrganizationId 테스트 추가

* docs: 스웨거 수정

* feat: Organizer, Staff 길이 검증 추가

* feat: Organizer, Staff 비밀번호 바이트 검증 추가

* docs: 제목 변경

* test: 테스트명 변경

* test: 불필요한 모킹 제거

* refactor: AuthorizationServiceTest 추상화를 통해 메서드 합치기

* feat: flyway 스크립트 수정

* refactor: AuthorizationService 메서드 네이밍 변경

* refactor: OnlineDDL Lock, Algorithm 최소한으로 설정

- INPLACE, NONE

---------

Co-authored-by: changui <122252160+changuii@users.noreply.github.com>
* refactor: image path-prefix configuration 삭제

* refactor: 이미지 경로 관련 불필요한 코드 제거 및 테스트 정리

* chore: 컨테이너 실패 원인 분석

* chore: 다시 삭제

* chore: sudo 설정

* chore: 명시 지정

* fix: workflows ubuntu 버전 환경 고정

* chore: 피드백 수정

* Delete ~/Desktop/log/application.json

* fix: docker api version 명시

* ci: 스크립트 수정

* fix: docker 29 버전 대응 testcontainers 버전으로 업그레이드

---------

Co-authored-by: changui <122252160+changuii@users.noreply.github.com>
Co-authored-by: soeun2537 <soeun2537@gmail.com>
* fix: s3 접근 경로를 image path로 사용하도록 변경

* fix: path를 s3에 저장한 위치로 변경
* refactor: 예외 통일

* docs: Swagger 문서화 수정

* refactor: 예외 변경

* refactor: 예외 조립 방식 변경

* refactor: 변수명 변경

* test: 필요없는 변수 제거

* refactor: 예외명 통일

* refactor: 불필요한 import 제거

* test: 테스트 수정

* refactor: 예외명 명시적으로 변경
* feat: PlaceManager 생성

* feat: placeId를 이용해 PlaceManager 조회(key, expiresAt)

* feat: PlaceManager의 만료 일자를, 지난 날짜로 수정하여 만료시키는 기능 추가

* docs: Swagger 문서 변경

* feat: placeManager 로그인 추가

* refactor: PlaceManager 권한 검증을 연관 엔티티 기준으로 변경

* feat: 플레이스 관리자용 메인 플레이스 수정 API 추가

* fix: 플레이스 관리자 로그인에 비밀번호 검증이 없던 버그 수정

* fix: 도메인 내부 SQLDelete 쿼리 테이블 수정

* docs: PlaceManagerController Swagger Tag 추가

* fix: PlaceManagerCreateRsponse -> Response로 오타 수정

* refactor: expiresAt을 expirationDays로 변경

- expiresAt은 날짜처럼 느껴짐 -> 상대적 만료 일자로 변경

* fix: 만료 일자가 0일 이하인 경우 예외 발생

* fix: 중복 활성 플레이스 매니저 생성 검증 추가

* test: isEmptyOrNullString -> emptyOrNullString

- Deprecated 메서드 제거

* test: test 접미사 제거

* refactor: 빈 record 개행 추가

* test: 불필요한 placeId 변수 선언 제거

* test: response -> result 컨벤션 규칙 반영

* test: 응답 필드명 오타 수정

* fix: URL 경로 '/' 누락 수정

* test: response 필드 수 검증 추가

* test: response 필드 수 검증 추가

* refactor: PlaceManager -> PlaceAccess로 변경

* test: PlaceManager -> PlaceAccess로 변경

* refactor: DB 스키마 변경

* fix: 잘못 변경한 부분 수정

* refactor: 엔드포인트명 수정

* refactor: 글자 수 선언

* refactor: 클래스명 변경

* test: Helper 예외 타입 특정

* test: 예외 타입 특정

* test: 예외 타입 특정

* refactor: long -> int 수정

* refactor: 권한 축소

* refactor: 만료 일시 검증 수정

* refactor: 응답에 만료 일시 추가

* refactor: 응답에 만료 일시 버그 수정

* refactor: 접근 링크 검증 수정

* refactor: 로그인 응답 수정

* refactor: 로그인 접근 권한 없습니다로 예외 타입 변경

* refactor: 이미지 추가 권한 수정

* refactor: jpa 쿼리 수정, 메서드 인자 타입 수정

* feat: 만료된 링크 예외 처리

---------

Co-authored-by: 이소은 <soeun2537@gmail.com>
* refactor: 권한 선언 순서 변경

* docs: Swagger 엔드포인트명 수정

* docs: Swagger 엔드포인트명 수정
- 컨벤션 최신화
- 충돌하는 컨벤션 예외 조항들 추가
* refactor: AccountDetails를 분리한다.

- 각 ROLE별로 상속 관계로 분리한다.
- 공통 필드인 roles만 유지하고, 나머지는 하위 타입으로 이동시키고 동작은 AccountDetails에 정의한다.

* refactor: JwtAuthenticationFilter의 토큰 추출 책임을 분리하고 전략 패턴을 도입해 확장할 수 있도록 변경

* refactor: OperatorId를 제거

- OperatorId를 제거하고 현재, 접근중인 Account의 type은 AuthorizationService가 추출해서 검증하는 방식으로 변경

* refactor: 불필요한 switch 문 제거

* fix: OperatorCommandAccess에 PlaceAccess는 접근 불가한 규칙을 제거

* refactor: Admin과 PlaceAccess Details에서 username 지정

* test: DisplayNameGenerator 누락

* test: gitleaks 주석 추가

* test: 누락된 DisplayNameGeneration 추가

* docs: CLAUDE 지침 파일  추가

* refactor: 토큰 추출 과정 중에서, 값을 찾을 수 없는 경우 예외를 던지도록 변경

* feat: AccountDetails에 hasRole 추가

* refactor: supportedRole 네이밍을 getSupportedRole로 변경

* refactor: 토큰에 null 값이 존재하는 경우 예외처리

* refactor: AccountDetailsStrategy 네이밍을 AccountDetailsExtractStrategy로 변경

* test: 테스트케이스 보완

* fix: extract 전략 NPE 처리, 토큰 데이터 누락 예외 메시지 추가

* test: when 절의 테스트 대상 메서드 응답값은 result 변수명으로 통일

* refactor: Roles가 Claim에 없다면, 빈 컬렉션 반환
@soeun2537 soeun2537 requested a review from changuii March 4, 2026 13:44
@soeun2537 soeun2537 self-assigned this Mar 4, 2026
@coderabbitai
Copy link

coderabbitai bot commented Mar 4, 2026

Important

Review skipped

Too many files!

This PR contains 300 files, which is 150 over the limit of 150.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 079e225b-3976-40bc-86b5-f22c1374708f

📥 Commits

Reviewing files that changed from the base of the PR and between 7964ce1 and 0597974.

📒 Files selected for processing (300)
  • CLAUDE.md
  • build.gradle
  • code-style.md
  • src/main/java/com/daedan/festabook/announcement/controller/AnnouncementController.java
  • src/main/java/com/daedan/festabook/announcement/domain/Announcement.java
  • src/main/java/com/daedan/festabook/announcement/dto/AnnouncementRequest.java
  • src/main/java/com/daedan/festabook/announcement/service/AnnouncementService.java
  • src/main/java/com/daedan/festabook/authorization/controller/AuthorizationController.java
  • src/main/java/com/daedan/festabook/council/controller/CouncilController.java
  • src/main/java/com/daedan/festabook/council/domain/Council.java
  • src/main/java/com/daedan/festabook/council/dto/CouncilLoginResponse.java
  • src/main/java/com/daedan/festabook/council/dto/CouncilRequest.java
  • src/main/java/com/daedan/festabook/council/dto/CouncilResponse.java
  • src/main/java/com/daedan/festabook/council/dto/CouncilUpdateResponse.java
  • src/main/java/com/daedan/festabook/council/infrastructure/CouncilJpaRepository.java
  • src/main/java/com/daedan/festabook/council/service/CouncilService.java
  • src/main/java/com/daedan/festabook/device/controller/DeviceController.java
  • src/main/java/com/daedan/festabook/device/domain/Device.java
  • src/main/java/com/daedan/festabook/device/dto/DeviceRequest.java
  • src/main/java/com/daedan/festabook/device/service/DeviceService.java
  • src/main/java/com/daedan/festabook/event/controller/EventController.java
  • src/main/java/com/daedan/festabook/event/controller/EventDateController.java
  • src/main/java/com/daedan/festabook/event/domain/Event.java
  • src/main/java/com/daedan/festabook/event/domain/EventDate.java
  • src/main/java/com/daedan/festabook/event/dto/EventDateRequest.java
  • src/main/java/com/daedan/festabook/event/dto/EventRequest.java
  • src/main/java/com/daedan/festabook/event/dto/EventUpdateRequest.java
  • src/main/java/com/daedan/festabook/event/infrastructure/EventJpaRepository.java
  • src/main/java/com/daedan/festabook/event/service/EventDateService.java
  • src/main/java/com/daedan/festabook/event/service/EventService.java
  • src/main/java/com/daedan/festabook/festival/controller/AndroidFestivalNotificationSubscriptionController.java
  • src/main/java/com/daedan/festabook/festival/controller/FestivalController.java
  • src/main/java/com/daedan/festabook/festival/controller/FestivalImageController.java
  • src/main/java/com/daedan/festabook/festival/controller/FestivalNotificationSubscriptionController.java
  • src/main/java/com/daedan/festabook/festival/controller/IosFestivalNotificationSubscriptionController.java
  • src/main/java/com/daedan/festabook/festival/controller/TestFestivalNotificationSubscriptionController.java
  • src/main/java/com/daedan/festabook/festival/domain/Coordinate.java
  • src/main/java/com/daedan/festabook/festival/domain/Festival.java
  • src/main/java/com/daedan/festabook/festival/domain/FestivalImage.java
  • src/main/java/com/daedan/festabook/festival/domain/FestivalNotification.java
  • src/main/java/com/daedan/festabook/festival/dto/FestivalCreateRequest.java
  • src/main/java/com/daedan/festabook/festival/dto/FestivalCreateResponse.java
  • src/main/java/com/daedan/festabook/festival/dto/FestivalGeographyCenterCoordinateUpdateRequest.java
  • src/main/java/com/daedan/festabook/festival/dto/FestivalGeographyPolygonHoleBoundaryUpdateRequest.java
  • src/main/java/com/daedan/festabook/festival/dto/FestivalGeographyZoomUpdateRequest.java
  • src/main/java/com/daedan/festabook/festival/dto/FestivalNotificationReadResponse.java
  • src/main/java/com/daedan/festabook/festival/dto/FestivalResponse.java
  • src/main/java/com/daedan/festabook/festival/dto/FestivalResponses.java
  • src/main/java/com/daedan/festabook/festival/dto/FestivalSearchResponse.java
  • src/main/java/com/daedan/festabook/festival/dto/FestivalSearchResponses.java
  • src/main/java/com/daedan/festabook/festival/dto/FestivalUniversityResponses.java
  • src/main/java/com/daedan/festabook/festival/infrastructure/FestivalImageJpaRepository.java
  • src/main/java/com/daedan/festabook/festival/infrastructure/FestivalJpaRepository.java
  • src/main/java/com/daedan/festabook/festival/infrastructure/FestivalNotificationJpaRepository.java
  • src/main/java/com/daedan/festabook/festival/service/FestivalImageService.java
  • src/main/java/com/daedan/festabook/festival/service/FestivalNotificationService.java
  • src/main/java/com/daedan/festabook/festival/service/FestivalService.java
  • src/main/java/com/daedan/festabook/festival/service/TestFestivalNotificationService.java
  • src/main/java/com/daedan/festabook/global/argumentresolver/ActorArgumentResolver.java
  • src/main/java/com/daedan/festabook/global/argumentresolver/FestivalIdArgumentResolver.java
  • src/main/java/com/daedan/festabook/global/argumentresolver/OrganizationId.java
  • src/main/java/com/daedan/festabook/global/argumentresolver/OrganizationIdArgumentResolver.java
  • src/main/java/com/daedan/festabook/global/config/FirebaseAppConfig.java
  • src/main/java/com/daedan/festabook/global/config/SwaggerConfig.java
  • src/main/java/com/daedan/festabook/global/config/WebMvcConfig.java
  • src/main/java/com/daedan/festabook/global/domain/BaseEntity.java
  • src/main/java/com/daedan/festabook/global/exception/BadRequestException.java
  • src/main/java/com/daedan/festabook/global/exception/ConflictException.java
  • src/main/java/com/daedan/festabook/global/exception/DatabaseException.java
  • src/main/java/com/daedan/festabook/global/exception/ForbiddenException.java
  • src/main/java/com/daedan/festabook/global/exception/GlobalExceptionHandler.java
  • src/main/java/com/daedan/festabook/global/exception/InternalServerException.java
  • src/main/java/com/daedan/festabook/global/exception/NotFoundException.java
  • src/main/java/com/daedan/festabook/global/infrastructure/UUIDManager.java
  • src/main/java/com/daedan/festabook/global/logging/LocalLoggingFilter.java
  • src/main/java/com/daedan/festabook/global/logging/LoggingFilter.java
  • src/main/java/com/daedan/festabook/global/logging/TracingAspect.java
  • src/main/java/com/daedan/festabook/global/logging/dto/SecurityLog.java
  • src/main/java/com/daedan/festabook/global/security/authorization/AccountDetails.java
  • src/main/java/com/daedan/festabook/global/security/authorization/AccountDetailsExtractStrategy.java
  • src/main/java/com/daedan/festabook/global/security/authorization/AccountDetailsExtractor.java
  • src/main/java/com/daedan/festabook/global/security/authorization/Actor.java
  • src/main/java/com/daedan/festabook/global/security/authorization/AdminDetails.java
  • src/main/java/com/daedan/festabook/global/security/authorization/AdminDetailsExtractStrategy.java
  • src/main/java/com/daedan/festabook/global/security/authorization/OrganizerDetails.java
  • src/main/java/com/daedan/festabook/global/security/authorization/OrganizerDetailsExtractStrategy.java
  • src/main/java/com/daedan/festabook/global/security/authorization/PlaceAccessDetails.java
  • src/main/java/com/daedan/festabook/global/security/authorization/PlaceAccessDetailsExtractStrategy.java
  • src/main/java/com/daedan/festabook/global/security/authorization/StaffDetails.java
  • src/main/java/com/daedan/festabook/global/security/authorization/StaffDetailsExtractStrategy.java
  • src/main/java/com/daedan/festabook/global/security/config/CorsConfig.java
  • src/main/java/com/daedan/festabook/global/security/config/SecurityConfig.java
  • src/main/java/com/daedan/festabook/global/security/filter/JwtAuthenticationFilter.java
  • src/main/java/com/daedan/festabook/global/security/role/RoleType.java
  • src/main/java/com/daedan/festabook/global/security/util/JwtProvider.java
  • src/main/java/com/daedan/festabook/lineup/controller/LineupController.java
  • src/main/java/com/daedan/festabook/lineup/domain/Lineup.java
  • src/main/java/com/daedan/festabook/lineup/dto/LineupRequest.java
  • src/main/java/com/daedan/festabook/lineup/service/LineupService.java
  • src/main/java/com/daedan/festabook/lostitem/controller/LostItemController.java
  • src/main/java/com/daedan/festabook/lostitem/domain/LostItem.java
  • src/main/java/com/daedan/festabook/lostitem/dto/LostItemRequest.java
  • src/main/java/com/daedan/festabook/lostitem/service/LostItemService.java
  • src/main/java/com/daedan/festabook/notification/dto/NotificationSendRequest.java
  • src/main/java/com/daedan/festabook/notification/infrastructure/FcmNotificationManager.java
  • src/main/java/com/daedan/festabook/organization/controller/OrganizationController.java
  • src/main/java/com/daedan/festabook/organization/domain/Organization.java
  • src/main/java/com/daedan/festabook/organization/dto/OrganizationRequest.java
  • src/main/java/com/daedan/festabook/organization/dto/OrganizationResponse.java
  • src/main/java/com/daedan/festabook/organization/infrastructure/OrganizationJpaRepository.java
  • src/main/java/com/daedan/festabook/organization/service/OrganizationService.java
  • src/main/java/com/daedan/festabook/organizer/controller/OrganizerController.java
  • src/main/java/com/daedan/festabook/organizer/domain/Organizer.java
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerLoginRequest.java
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerLoginResponse.java
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerNameUpdateRequest.java
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerNameUpdateResponse.java
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerPasswordUpdateRequest.java
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerPasswordUpdateResponse.java
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerRequest.java
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerResponse.java
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerUsernameDuplicateResponse.java
  • src/main/java/com/daedan/festabook/organizer/infrastructure/OrganizerJpaRepository.java
  • src/main/java/com/daedan/festabook/organizer/service/OrganizerService.java
  • src/main/java/com/daedan/festabook/place/controller/PlaceAccessController.java
  • src/main/java/com/daedan/festabook/place/controller/PlaceAnnouncementController.java
  • src/main/java/com/daedan/festabook/place/controller/PlaceController.java
  • src/main/java/com/daedan/festabook/place/controller/PlaceFavoriteController.java
  • src/main/java/com/daedan/festabook/place/controller/PlaceGeographyController.java
  • src/main/java/com/daedan/festabook/place/controller/PlaceImageController.java
  • src/main/java/com/daedan/festabook/place/domain/Place.java
  • src/main/java/com/daedan/festabook/place/domain/PlaceAccess.java
  • src/main/java/com/daedan/festabook/place/domain/PlaceAnnouncement.java
  • src/main/java/com/daedan/festabook/place/domain/PlaceFavorite.java
  • src/main/java/com/daedan/festabook/place/domain/PlaceImage.java
  • src/main/java/com/daedan/festabook/place/dto/MainPlaceUpdateByPlaceAccessRequest.java
  • src/main/java/com/daedan/festabook/place/dto/MainPlaceUpdateByPlaceAccessResponse.java
  • src/main/java/com/daedan/festabook/place/dto/PlaceAccessCreateRequest.java
  • src/main/java/com/daedan/festabook/place/dto/PlaceAccessCreateResponse.java
  • src/main/java/com/daedan/festabook/place/dto/PlaceAccessLoginRequest.java
  • src/main/java/com/daedan/festabook/place/dto/PlaceAccessLoginResponse.java
  • src/main/java/com/daedan/festabook/place/dto/PlaceAccessResponse.java
  • src/main/java/com/daedan/festabook/place/dto/PlaceAnnouncementRequest.java
  • src/main/java/com/daedan/festabook/place/dto/PlaceCreateRequest.java
  • src/main/java/com/daedan/festabook/place/dto/PlaceFavoriteRequest.java
  • src/main/java/com/daedan/festabook/place/dto/PlaceFavoriteResponse.java
  • src/main/java/com/daedan/festabook/place/infrastructure/PlaceAccessJpaRepository.java
  • src/main/java/com/daedan/festabook/place/infrastructure/PlaceAnnouncementJpaRepository.java
  • src/main/java/com/daedan/festabook/place/infrastructure/PlaceFavoriteJpaRepository.java
  • src/main/java/com/daedan/festabook/place/infrastructure/PlaceImageJpaRepository.java
  • src/main/java/com/daedan/festabook/place/infrastructure/PlaceJpaRepository.java
  • src/main/java/com/daedan/festabook/place/service/PlaceAccessService.java
  • src/main/java/com/daedan/festabook/place/service/PlaceAnnouncementService.java
  • src/main/java/com/daedan/festabook/place/service/PlaceFavoriteService.java
  • src/main/java/com/daedan/festabook/place/service/PlaceGeographyService.java
  • src/main/java/com/daedan/festabook/place/service/PlaceImageService.java
  • src/main/java/com/daedan/festabook/place/service/PlaceService.java
  • src/main/java/com/daedan/festabook/question/controller/QuestionController.java
  • src/main/java/com/daedan/festabook/question/domain/Question.java
  • src/main/java/com/daedan/festabook/question/infrastructure/QuestionJpaRepository.java
  • src/main/java/com/daedan/festabook/question/service/QuestionService.java
  • src/main/java/com/daedan/festabook/staff/controller/StaffController.java
  • src/main/java/com/daedan/festabook/staff/domain/Staff.java
  • src/main/java/com/daedan/festabook/staff/domain/StaffAuthority.java
  • src/main/java/com/daedan/festabook/staff/dto/StaffAuthorityResponse.java
  • src/main/java/com/daedan/festabook/staff/dto/StaffAuthorityUpdateRequest.java
  • src/main/java/com/daedan/festabook/staff/dto/StaffLoginRequest.java
  • src/main/java/com/daedan/festabook/staff/dto/StaffLoginResponse.java
  • src/main/java/com/daedan/festabook/staff/dto/StaffNameUpdateRequest.java
  • src/main/java/com/daedan/festabook/staff/dto/StaffPasswordUpdateRequest.java
  • src/main/java/com/daedan/festabook/staff/dto/StaffRequest.java
  • src/main/java/com/daedan/festabook/staff/dto/StaffResponse.java
  • src/main/java/com/daedan/festabook/staff/dto/StaffResponses.java
  • src/main/java/com/daedan/festabook/staff/dto/StaffUsernameDuplicateResponse.java
  • src/main/java/com/daedan/festabook/staff/dto/StaffWithAuthoritiesResponse.java
  • src/main/java/com/daedan/festabook/staff/infrastructure/StaffAuthorityJpaRepository.java
  • src/main/java/com/daedan/festabook/staff/infrastructure/StaffJpaRepository.java
  • src/main/java/com/daedan/festabook/staff/service/StaffService.java
  • src/main/java/com/daedan/festabook/storage/controller/ImageStoreController.java
  • src/main/java/com/daedan/festabook/storage/infrastructure/LocalStorageManager.java
  • src/main/java/com/daedan/festabook/storage/infrastructure/S3StorageManager.java
  • src/main/java/com/daedan/festabook/storage/infrastructure/StoreFile.java
  • src/main/java/com/daedan/festabook/storage/service/ImageStoreService.java
  • src/main/java/com/daedan/festabook/timetag/controller/TimeTagController.java
  • src/main/java/com/daedan/festabook/timetag/domain/PlaceTimeTag.java
  • src/main/java/com/daedan/festabook/timetag/domain/TimeTag.java
  • src/main/java/com/daedan/festabook/timetag/infrastructure/PlaceTimeTagJpaRepository.java
  • src/main/java/com/daedan/festabook/timetag/service/TimeTagService.java
  • src/main/resources/application.yml
  • src/main/resources/db/migration/V12.0__create_organization.sql
  • src/main/resources/db/migration/V12.1__add_organization_id_on_festival.sql
  • src/main/resources/db/migration/V12.2__alter_university_name_nullable.sql
  • src/main/resources/db/migration/V13.0__create_organizer.sql
  • src/main/resources/db/migration/V13.1__create_organizer_roles.sql
  • src/main/resources/db/migration/V13.2__create_staff.sql
  • src/main/resources/db/migration/V13.3__create_staff_authority.sql
  • src/main/resources/db/migration/V13.4__create_staff_roles.sql
  • src/main/resources/db/migration/V14.0__create_place_access.sql
  • src/test/java/com/daedan/festabook/announcement/concurrency/AnnouncementConcurrencyTest.java
  • src/test/java/com/daedan/festabook/announcement/controller/AnnouncementControllerTest.java
  • src/test/java/com/daedan/festabook/announcement/domain/AnnouncementTest.java
  • src/test/java/com/daedan/festabook/announcement/infrastructure/AnnouncementJpaRepositoryTest.java
  • src/test/java/com/daedan/festabook/announcement/service/AnnouncementServiceTest.java
  • src/test/java/com/daedan/festabook/authorization/controller/AuthorizationControllerTest.java
  • src/test/java/com/daedan/festabook/council/controller/CouncilControllerTest.java
  • src/test/java/com/daedan/festabook/council/domain/CouncilFixture.java
  • src/test/java/com/daedan/festabook/council/domain/CouncilTest.java
  • src/test/java/com/daedan/festabook/council/dto/CouncilLoginRequestFixture.java
  • src/test/java/com/daedan/festabook/council/dto/CouncilRequestFixture.java
  • src/test/java/com/daedan/festabook/council/dto/CouncilUpdateRequestFixture.java
  • src/test/java/com/daedan/festabook/council/service/CouncilServiceTest.java
  • src/test/java/com/daedan/festabook/device/domain/DeviceTest.java
  • src/test/java/com/daedan/festabook/device/service/DeviceServiceTest.java
  • src/test/java/com/daedan/festabook/event/controller/EventControllerTest.java
  • src/test/java/com/daedan/festabook/event/controller/EventDateControllerTest.java
  • src/test/java/com/daedan/festabook/event/domain/EventDateTest.java
  • src/test/java/com/daedan/festabook/event/domain/EventTest.java
  • src/test/java/com/daedan/festabook/event/service/EventDateServiceTest.java
  • src/test/java/com/daedan/festabook/event/service/EventServiceTest.java
  • src/test/java/com/daedan/festabook/festival/concurrency/FestivalNotificationConcurrencyTest.java
  • src/test/java/com/daedan/festabook/festival/controller/AndroidFestivalNotificationSubscriptionControllerTest.java
  • src/test/java/com/daedan/festabook/festival/controller/FestivalControllerTest.java
  • src/test/java/com/daedan/festabook/festival/controller/FestivalImageControllerTest.java
  • src/test/java/com/daedan/festabook/festival/controller/FestivalNotificationSubscriptionControllerTest.java
  • src/test/java/com/daedan/festabook/festival/controller/IosFestivalNotificationSubscriptionControllerTest.java
  • src/test/java/com/daedan/festabook/festival/domain/CoordinateTest.java
  • src/test/java/com/daedan/festabook/festival/domain/FestivalFixture.java
  • src/test/java/com/daedan/festabook/festival/domain/FestivalImageTest.java
  • src/test/java/com/daedan/festabook/festival/domain/FestivalNotificationTest.java
  • src/test/java/com/daedan/festabook/festival/domain/FestivalTest.java
  • src/test/java/com/daedan/festabook/festival/dto/FestivalCreateRequestFixture.java
  • src/test/java/com/daedan/festabook/festival/dto/FestivalGeographyCenterCoordinateUpdateRequestFixture.java
  • src/test/java/com/daedan/festabook/festival/dto/FestivalGeographyPolygonHoleBoundaryUpdateRequestFixture.java
  • src/test/java/com/daedan/festabook/festival/dto/FestivalGeographyZoomUpdateRequestFixture.java
  • src/test/java/com/daedan/festabook/festival/infrastructure/FestivalNotificationJpaRepositoryTest.java
  • src/test/java/com/daedan/festabook/festival/service/FestivalImageServiceTest.java
  • src/test/java/com/daedan/festabook/festival/service/FestivalNotificationServiceTest.java
  • src/test/java/com/daedan/festabook/festival/service/FestivalServiceTest.java
  • src/test/java/com/daedan/festabook/global/argumentresolver/ActorArgumentResolverTest.java
  • src/test/java/com/daedan/festabook/global/argumentresolver/FestivalIdArgumentResolverTest.java
  • src/test/java/com/daedan/festabook/global/argumentresolver/OrganizationIdArgumentResolverTest.java
  • src/test/java/com/daedan/festabook/global/argumentresolver/TestController.java
  • src/test/java/com/daedan/festabook/global/config/TestSecurityConfig.java
  • src/test/java/com/daedan/festabook/global/config/WebMvcConfigTest.java
  • src/test/java/com/daedan/festabook/global/domain/BaseEntityTest.java
  • src/test/java/com/daedan/festabook/global/exception/ConflictExceptionTest.java
  • src/test/java/com/daedan/festabook/global/exception/ForbiddenExceptionTest.java
  • src/test/java/com/daedan/festabook/global/exception/GlobalExceptionHandlerTest.java
  • src/test/java/com/daedan/festabook/global/exception/NotFoundExceptionTest.java
  • src/test/java/com/daedan/festabook/global/infrastructure/UUIDManagerTest.java
  • src/test/java/com/daedan/festabook/global/security/JwtTestHelper.java
  • src/test/java/com/daedan/festabook/global/security/authorization/AccountDetailsExtractorTest.java
  • src/test/java/com/daedan/festabook/global/security/authorization/AccountDetailsFixture.java
  • src/test/java/com/daedan/festabook/global/security/authorization/AccountDetailsTest.java
  • src/test/java/com/daedan/festabook/global/security/authorization/ActorFixture.java
  • src/test/java/com/daedan/festabook/global/security/authorization/AdminDetailsExtractStrategyTest.java
  • src/test/java/com/daedan/festabook/global/security/authorization/AdminDetailsTest.java
  • src/test/java/com/daedan/festabook/global/security/authorization/OrganizerDetailsExtractStrategyTest.java
  • src/test/java/com/daedan/festabook/global/security/authorization/OrganizerDetailsTest.java
  • src/test/java/com/daedan/festabook/global/security/authorization/PlaceAccessDetailsExtractStrategyTest.java
  • src/test/java/com/daedan/festabook/global/security/authorization/PlaceAccessDetailsTest.java
  • src/test/java/com/daedan/festabook/global/security/authorization/StaffDetailsExtractStrategyTest.java
  • src/test/java/com/daedan/festabook/global/security/authorization/StaffDetailsTest.java
  • src/test/java/com/daedan/festabook/global/security/authorization/TestActor.java
  • src/test/java/com/daedan/festabook/global/security/config/SecurityConfigTest.java
  • src/test/java/com/daedan/festabook/global/security/filter/JwtAuthenticationFilterTest.java
  • src/test/java/com/daedan/festabook/global/security/util/JwtProviderTest.java
  • src/test/java/com/daedan/festabook/lineup/controller/LineupControllerTest.java
  • src/test/java/com/daedan/festabook/lineup/domain/LineupTest.java
  • src/test/java/com/daedan/festabook/lineup/infrastructure/LineupJpaRepositoryTest.java
  • src/test/java/com/daedan/festabook/lineup/service/LineupServiceTest.java
  • src/test/java/com/daedan/festabook/lostitem/controller/LostItemControllerTest.java
  • src/test/java/com/daedan/festabook/lostitem/domain/LostItemTest.java
  • src/test/java/com/daedan/festabook/lostitem/service/LostItemServiceTest.java
  • src/test/java/com/daedan/festabook/notification/dto/NotificationSendRequestTest.java
  • src/test/java/com/daedan/festabook/notification/infrastructure/FcmNotificationManagerTest.java
  • src/test/java/com/daedan/festabook/organization/controller/OrganizationControllerTest.java
  • src/test/java/com/daedan/festabook/organization/domain/OrganizationFixture.java
  • src/test/java/com/daedan/festabook/organization/domain/OrganizationTest.java
  • src/test/java/com/daedan/festabook/organization/dto/OrganizationRequestFixture.java
  • src/test/java/com/daedan/festabook/organization/service/OrganizationServiceTest.java
  • src/test/java/com/daedan/festabook/organizer/controller/OrganizerControllerTest.java
  • src/test/java/com/daedan/festabook/organizer/domain/OrganizerFixture.java
  • src/test/java/com/daedan/festabook/organizer/domain/OrganizerTest.java
  • src/test/java/com/daedan/festabook/organizer/dto/OrganizerLoginRequestFixture.java
  • src/test/java/com/daedan/festabook/organizer/dto/OrganizerNameUpdateRequestFixture.java
  • src/test/java/com/daedan/festabook/organizer/dto/OrganizerPasswordUpdateRequestFixture.java
  • src/test/java/com/daedan/festabook/organizer/dto/OrganizerRequestFixture.java
  • src/test/java/com/daedan/festabook/organizer/infrastructure/OrganizerJpaRepositoryTest.java
  • src/test/java/com/daedan/festabook/organizer/service/OrganizerServiceTest.java
  • src/test/java/com/daedan/festabook/place/controller/PlaceAccessControllerTest.java
  • src/test/java/com/daedan/festabook/place/controller/PlaceAnnouncementControllerTest.java
  • src/test/java/com/daedan/festabook/place/controller/PlaceControllerTest.java
  • src/test/java/com/daedan/festabook/place/controller/PlaceFavoriteControllerTest.java
  • src/test/java/com/daedan/festabook/place/controller/PlaceGeographyControllerTest.java
  • src/test/java/com/daedan/festabook/place/controller/PlaceImageControllerTest.java
  • src/test/java/com/daedan/festabook/place/domain/PlaceAccessFixture.java
  • src/test/java/com/daedan/festabook/place/domain/PlaceAccessTest.java
  • src/test/java/com/daedan/festabook/place/domain/PlaceAnnouncementTest.java
  • src/test/java/com/daedan/festabook/place/domain/PlaceFavoriteFixture.java

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@soeun2537 soeun2537 requested a review from taek2222 March 4, 2026 13:45
@soeun2537 soeun2537 changed the title [Release] Dev -> Prod [Release] DEV -> PROD Mar 4, 2026
@soeun2537 soeun2537 changed the title [Release] DEV -> PROD [Release] Dev -> Prod 병합 Mar 4, 2026
* refactor: 불필요 클래스 삭제

* refactor: 권한 전면 리팩터링

* refactor: 네이밍 변경

* refactor: 불필요 메서드 삭제

* refactor: 불필요 빈 등록 삭제

* refactor: 주요 도메인 권한 검증 구현

* refactor: 불필요한 메서드 삭제 및 피드백 반영

* fix: 검증 논리적 오류 수정

* refactor: 불필요 공백 제거

* docs: 컨벤션 엡데이트

* refactor: 메서드 네이밍 변경

* refactor: 예외 통일

* refactor: 메서드 통일

* test: 권한 검증 전면 리팩터링 테스트 수정

* docs: 코드 컨벤션 업데이트

* test: 권한 검증 주요 도메인 테스트 추가

* fix: 누락된 어노테이션 추가

* refactor: Announcement 권한 검증 로직 수정

* refactor: Event 권한 검증 로직 수정

* refactor: EventDate 권한 검증 로직 수정

* refactor: FestivalImage 권한 검증 로직 수정

* refactor: Lineup 권한 검증 로직 수정

* refactor: LostItem 권한 검증 로직 수정

* refactor: PlaceGeography 권한 검증 로직 수정

* refactor: Question 권한 검증 로직 수정

* refactor: TimeTag 권한 검증 로직 수정

* refactor: PlaceImage 권한 검증 로직 수정

* refactor: PlaceAnnouncement 권한 검증 로직 수정

* refactor: 미사용 메서드 삭제

* refactor: PlaceTimeTag 권한 검증 로직 수정

* refactor: EventDate 권한 검증 로직 수정

* refactor: 하위 도메인 권한 검증 로직 테스트 수정

* docs: 도메인 검증 로직 컨벤션 추가

* test: 주요 도메인 권한 검증 테스트 추가

* docs: 도메인 권한 검증 컨벤션 추가

* refactor: 불필요한 주석 삭제

* refactor: 하위 도메인 권한 검증 로직 수정

* docs: 도메인 권한 검증 컨벤션 추가

* test: 하위 도메인 권한 검증 테스트 추가

* fix: 테스트 깨지는 부분 수정

* test: 테스트 컨벤션 맞춰 수정

* docs: 컨벤션 엡데이트

* test: 테스트 컨벤션 맞춰 수정
@gemini-code-assist
Copy link

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

본 Pull Request는 코드 품질 향상, API 보안 강화, 문서 정비 및 테스트 코드 개선을 목표로 합니다. 코드 컨벤션 가이드 업데이트를 통해 AI Agent 및 자동 코드 리뷰의 효율성을 높이고, 의존성 업데이트를 통해 안정성을 확보합니다. 또한, 학생회 관련 기능 제거 및 권한 검증 로직 개선을 통해 코드 복잡성을 줄이고 API 보안을 강화합니다. 마지막으로, API 문서 개선 및 테스트 코드 개선을 통해 개발 생산성을 향상시킵니다.

Highlights

  • 코드 컨벤션 가이드 업데이트: AI Agent 및 자동 코드 리뷰를 위한 코드 컨벤션 가이드가 대폭 업데이트되었습니다. 새로운 규칙과 함께 기존 규칙이 개선되었으며, AI Agent가 따라야 할 지침이 추가되었습니다.
  • 의존성 업데이트: Testcontainers의 의존성이 2.0.2 버전으로 업데이트되었습니다.
  • 학생회 관련 기능 제거: 더 이상 사용되지 않는 학생회(Council) 관련 기능이 코드에서 제거되었습니다. 관련 컨트롤러, 도메인, DTO 및 인프라스트럭처 코드가 삭제되었습니다.
  • 권한 검증 로직 개선: API 접근 권한 검증 로직이 강화되었습니다. 기존의 Council 기반 권한 검증 방식이 Organization, Staff, PlaceAccess 기반으로 세분화되었으며, AuthorizationService를 통해 일관된 방식으로 관리됩니다.
  • API 문서 개선: Swagger 어노테이션 및 API 설명을 개선하여 API 문서의 가독성을 높였습니다. 특히, 권한별 접근 가능 여부를 명확히 표시하기 위해 이모지 접두사를 도입했습니다.
  • 예외 처리 방식 변경: BusinessException을 상속받는 커스텀 예외를 사용하여 예외 처리 방식을 개선했습니다. 또한, ResponseEntity 대신 @ResponseStatus를 사용하여 HTTP 상태 코드를 명시하도록 변경했습니다.
  • 테스트 코드 개선: 단위 테스트 및 통합 테스트 구조를 개선하고, Fixture 사용 범위를 명확히 했습니다. 또한, BDDMockito 패턴을 적용하여 테스트 코드의 가독성을 높였습니다.
Changelog
  • CLAUDE.md
    • 새로운 파일이 추가되었습니다. 이 파일은 @code-style.md를 참조합니다.
  • build.gradle
    • Testcontainers의 의존성 버전을 2.0.2로 업데이트했습니다.
  • code-style.md
    • 코드 컨벤션 가이드가 대폭 업데이트되었습니다. 새로운 규칙과 함께 기존 규칙이 개선되었으며, AI Agent가 따라야 할 지침이 추가되었습니다.
  • src/main/java/com/daedan/festabook/announcement/controller/AnnouncementController.java
    • AnnouncementController에서 사용되지 않는 import를 제거하고, 권한 설정 및 API 설명을 업데이트했습니다.
  • src/main/java/com/daedan/festabook/announcement/domain/Announcement.java
    • Announcement 도메인에서 BusinessException 대신 BadRequestException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/announcement/infrastructure/AnnouncementJpaRepository.java
    • AnnouncementJpaRepository에 findFestivalIdsByAnnouncementIds 메서드를 추가했습니다.
  • src/main/java/com/daedan/festabook/announcement/service/AnnouncementService.java
    • AnnouncementService에서 권한 검증 로직을 추가하고, 예외 처리 방식을 변경했습니다.
  • src/main/java/com/daedan/festabook/announcement/service/authorization/AnnouncementFestivalIdsResolver.java
    • AnnouncementFestivalIdsResolver를 추가하여 Announcement에서 Festival ID를 추출하는 로직을 구현했습니다.
  • src/main/java/com/daedan/festabook/authorization/controller/AuthorizationController.java
    • AuthorizationController를 추가하여 관리자 권한 검증 API를 제공합니다.
  • src/main/java/com/daedan/festabook/authorization/domain/FestivalIdsResolver.java
    • FestivalIdsResolver 인터페이스를 추가하여 Entity ID에서 Festival ID를 추출하는 로직을 정의합니다.
  • src/main/java/com/daedan/festabook/authorization/domain/OrganizationIdResolver.java
    • OrganizationIdResolver 인터페이스를 추가하여 Entity ID에서 Organization ID를 추출하는 로직을 정의합니다.
  • src/main/java/com/daedan/festabook/authorization/domain/PlaceIdsResolver.java
    • PlaceIdsResolver 인터페이스를 추가하여 Entity ID에서 Place ID를 추출하는 로직을 정의합니다.
  • src/main/java/com/daedan/festabook/authorization/service/AuthorizationService.java
    • AuthorizationService를 추가하여 API 접근 권한을 검증하는 로직을 구현했습니다.
  • src/main/java/com/daedan/festabook/council/controller/CouncilController.java
    • CouncilController를 제거했습니다.
  • src/main/java/com/daedan/festabook/council/domain/Council.java
    • Council 도메인을 제거했습니다.
  • src/main/java/com/daedan/festabook/council/dto/CouncilLoginResponse.java
    • CouncilLoginResponse DTO를 제거했습니다.
  • src/main/java/com/daedan/festabook/council/dto/CouncilRequest.java
    • CouncilRequest DTO를 제거했습니다.
  • src/main/java/com/daedan/festabook/council/dto/CouncilResponse.java
    • CouncilResponse DTO를 제거했습니다.
  • src/main/java/com/daedan/festabook/council/dto/CouncilUpdateResponse.java
    • CouncilUpdateResponse DTO를 제거했습니다.
  • src/main/java/com/daedan/festabook/council/infrastructure/CouncilJpaRepository.java
    • CouncilJpaRepository 인터페이스를 제거했습니다.
  • src/main/java/com/daedan/festabook/council/service/CouncilService.java
    • CouncilService를 제거했습니다.
  • src/main/java/com/daedan/festabook/device/controller/DeviceController.java
    • 디바이스 등록 및 업데이트 API의 설명을 업데이트했습니다.
  • src/main/java/com/daedan/festabook/device/domain/Device.java
    • Device 도메인에서 BusinessException 대신 BadRequestException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/device/service/DeviceService.java
    • DeviceService에서 BusinessException 대신 NotFoundException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/event/controller/EventController.java
    • EventController에서 사용되지 않는 import를 제거하고, 권한 설정을 업데이트했습니다.
  • src/main/java/com/daedan/festabook/event/controller/EventDateController.java
    • EventDateController에서 사용되지 않는 import를 제거하고, 권한 설정을 업데이트했습니다.
  • src/main/java/com/daedan/festabook/event/domain/Event.java
    • Event 도메인에서 BusinessException 대신 BadRequestException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/event/domain/EventDate.java
    • EventDate 도메인에서 BusinessException 대신 BadRequestException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/event/infrastructure/EventDateJpaRepository.java
    • EventDateJpaRepository에 findFestivalIdsByEventDateIds 메서드를 추가했습니다.
  • src/main/java/com/daedan/festabook/event/infrastructure/EventJpaRepository.java
    • EventJpaRepository에 findFestivalIdsByEventIds 메서드를 추가했습니다.
  • src/main/java/com/daedan/festabook/event/service/EventService.java
    • EventService에서 권한 검증 로직을 추가하고, 예외 처리 방식을 변경했습니다.
  • src/main/java/com/daedan/festabook/festival/controller/AndroidFestivalNotificationSubscriptionController.java
    • AndroidFestivalNotificationSubscriptionController의 Tag 이름과 Operation summary를 수정했습니다.
  • src/main/java/com/daedan/festabook/festival/controller/FestivalController.java
    • FestivalController에서 사용되지 않는 import를 제거하고, 권한 설정을 업데이트했습니다.
  • src/main/java/com/daedan/festabook/festival/controller/FestivalImageController.java
    • FestivalImageController를 추가하여 축제 이미지 관련 API를 관리합니다.
  • src/main/java/com/daedan/festabook/festival/controller/FestivalNotificationSubscriptionController.java
    • FestivalNotificationSubscriptionController의 Tag 이름과 Operation summary를 수정했습니다.
  • src/main/java/com/daedan/festabook/festival/controller/IosFestivalNotificationSubscriptionController.java
    • IosFestivalNotificationSubscriptionController의 Tag 이름과 Operation summary를 수정했습니다.
  • src/main/java/com/daedan/festabook/festival/controller/TestFestivalNotificationSubscriptionController.java
    • TestFestivalNotificationSubscriptionController의 Tag 이름과 Operation summary를 수정했습니다.
  • src/main/java/com/daedan/festabook/festival/domain/Coordinate.java
    • Coordinate 도메인에서 BusinessException 대신 BadRequestException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/festival/domain/Festival.java
    • Festival 도메인에서 BusinessException 대신 BadRequestException을 사용하도록 변경하고, 필드를 업데이트했습니다.
  • src/main/java/com/daedan/festabook/festival/infrastructure/FestivalImageJpaRepository.java
    • FestivalImageJpaRepository에 쿼리 메서드를 추가했습니다.
  • src/main/java/com/daedan/festabook/festival/infrastructure/FestivalJpaRepository.java
    • FestivalJpaRepository에 쿼리 메서드를 추가했습니다.
  • src/main/java/com/daedan/festabook/festival/infrastructure/FestivalNotificationJpaRepository.java
    • FestivalNotificationJpaRepository에서 사용되지 않는 쿼리 메서드를 제거했습니다.
  • src/main/java/com/daedan/festabook/festival/service/FestivalService.java
    • FestivalService에서 권한 검증 로직을 추가하고, 예외 처리 방식을 변경했습니다.
  • src/main/java/com/daedan/festabook/global/argumentresolver/FestivalIdArgumentResolver.java
    • FestivalIdArgumentResolver에서 BusinessException 대신 BadRequestException 및 NotFoundException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/global/config/FirebaseAppConfig.java
    • FirebaseAppConfig에서 BusinessException 대신 InternalServerException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/global/config/SwaggerConfig.java
    • Swagger 설정에 Organization ID 스키마를 추가하고, API 설명을 업데이트했습니다.
  • src/main/java/com/daedan/festabook/global/config/WebMvcConfig.java
    • WebMvcConfig에 OrganizationIdArgumentResolver를 추가했습니다.
  • src/main/java/com/daedan/festabook/global/exception/BadRequestException.java
    • BadRequestException을 구체 클래스로 변경했습니다.
  • src/main/java/com/daedan/festabook/global/exception/ConflictException.java
    • ConflictException 메시지를 업데이트했습니다.
  • src/main/java/com/daedan/festabook/global/exception/ForbiddenException.java
    • ForbiddenException 메시지를 업데이트했습니다.
  • src/main/java/com/daedan/festabook/global/logging/LocalLoggingFilter.java
    • LocalLoggingFilter에서 로깅 제외 경로 및 마스킹 경로를 업데이트했습니다.
  • src/main/java/com/daedan/festabook/global/logging/LoggingFilter.java
    • LoggingFilter에서 로깅 제외 경로 및 마스킹 경로를 업데이트했습니다.
  • src/main/java/com/daedan/festabook/global/security/authorization/AccountDetails.java
    • CouncilDetails를 AccountDetails로 변경하고, 권한 검증 메서드를 추가했습니다.
  • src/main/java/com/daedan/festabook/global/security/authorization/AccountDetailsExtractor.java
    • AccountDetailsExtractor를 추가하여 토큰에서 AccountDetails를 추출하는 로직을 구현했습니다.
  • src/main/java/com/daedan/festabook/global/security/authorization/AdminDetails.java
    • AdminDetails 클래스를 추가하여 관리자 권한을 처리합니다.
  • src/main/java/com/daedan/festabook/global/security/authorization/AdminDetailsExtractStrategy.java
    • AdminDetailsExtractStrategy 클래스를 추가하여 관리자 AccountDetails 추출 전략을 구현합니다.
  • src/main/java/com/daedan/festabook/global/security/authorization/OrganizerDetails.java
    • OrganizerDetails 클래스를 추가하여 조직 관리자 권한을 처리합니다.
  • src/main/java/com/daedan/festabook/global/security/authorization/OrganizerDetailsExtractStrategy.java
    • OrganizerDetailsExtractStrategy 클래스를 추가하여 조직 관리자 AccountDetails 추출 전략을 구현합니다.
  • src/main/java/com/daedan/festabook/global/security/authorization/PlaceAccessDetails.java
    • PlaceAccessDetails 클래스를 추가하여 플레이스 접근 권한을 처리합니다.
  • src/main/java/com/daedan/festabook/global/security/authorization/PlaceAccessDetailsExtractStrategy.java
    • PlaceAccessDetailsExtractStrategy 클래스를 추가하여 플레이스 접근 AccountDetails 추출 전략을 구현합니다.
  • src/main/java/com/daedan/festabook/global/security/authorization/StaffDetails.java
    • StaffDetails 클래스를 추가하여 축제 관리자 권한을 처리합니다.
  • src/main/java/com/daedan/festabook/global/security/authorization/StaffDetailsExtractStrategy.java
    • StaffDetailsExtractStrategy 클래스를 추가하여 축제 관리자 AccountDetails 추출 전략을 구현합니다.
  • src/main/java/com/daedan/festabook/global/security/config/SecurityConfig.java
    • SecurityConfig에서 Council 관련 설정을 제거하고, 새로운 권한 체계에 맞게 설정을 업데이트했습니다.
  • src/main/java/com/daedan/festabook/global/security/filter/JwtAuthenticationFilter.java
    • JwtAuthenticationFilter에서 AccountDetails 추출 로직을 변경하고, 권한 검증 방식을 업데이트했습니다.
  • src/main/java/com/daedan/festabook/global/security/role/RoleType.java
    • RoleType enum에 새로운 권한을 추가했습니다.
  • src/main/java/com/daedan/festabook/global/security/util/JwtProvider.java
    • JwtProvider에서 클레임 관련 메서드를 업데이트하고, 새로운 토큰 생성 메서드를 추가했습니다.
  • src/main/java/com/daedan/festabook/lostitem/controller/LostItemController.java
    • LostItemController에서 권한 설정을 업데이트했습니다.
  • src/main/java/com/daedan/festabook/lostitem/domain/LostItem.java
    • LostItem 도메인에서 BusinessException 대신 BadRequestException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/lostitem/infrastructure/LostItemJpaRepository.java
    • LostItemJpaRepository에 findFestivalIdsByLostItemIds 메서드를 추가했습니다.
  • src/main/java/com/daedan/festabook/notification/dto/NotificationSendRequest.java
    • NotificationSendRequest에서 BusinessException 대신 BadRequestException 및 InternalServerException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/notification/infrastructure/FcmNotificationManager.java
    • FcmNotificationManager에서 BusinessException 대신 InternalServerException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/organization/controller/OrganizationController.java
    • OrganizationController를 추가하여 조직 관련 API를 제공합니다.
  • src/main/java/com/daedan/festabook/organization/domain/Organization.java
    • Organization 도메인을 추가했습니다.
  • src/main/java/com/daedan/festabook/organization/dto/OrganizationRequest.java
    • OrganizationRequest DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/organization/dto/OrganizationResponse.java
    • OrganizationResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/organization/infrastructure/OrganizationJpaRepository.java
    • OrganizationJpaRepository 인터페이스를 추가했습니다.
  • src/main/java/com/daedan/festabook/organization/service/OrganizationService.java
    • OrganizationService를 추가하여 조직 관련 비즈니스 로직을 구현했습니다.
  • src/main/java/com/daedan/festabook/organizer/controller/OrganizerController.java
    • OrganizerController를 추가하여 조직 관리자 관련 API를 제공합니다.
  • src/main/java/com/daedan/festabook/organizer/domain/Organizer.java
    • Organizer 도메인을 추가했습니다.
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerLoginRequest.java
    • CouncilLoginRequest를 OrganizerLoginRequest로 이름을 변경했습니다.
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerLoginResponse.java
    • OrganizerLoginResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerNameUpdateRequest.java
    • OrganizerNameUpdateRequest DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerNameUpdateResponse.java
    • OrganizerNameUpdateResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerPasswordUpdateRequest.java
    • CouncilUpdateRequest를 OrganizerPasswordUpdateRequest로 이름을 변경했습니다.
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerRequest.java
    • OrganizerRequest DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerResponse.java
    • OrganizerResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/organizer/dto/OrganizerUsernameDuplicateResponse.java
    • OrganizerUsernameDuplicateResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/organizer/infrastructure/OrganizerJpaRepository.java
    • OrganizerJpaRepository 인터페이스를 추가했습니다.
  • src/main/java/com/daedan/festabook/place/controller/PlaceAccessController.java
    • PlaceAccessController를 추가하여 플레이스 접근 링크 관련 API를 제공합니다.
  • src/main/java/com/daedan/festabook/place/domain/PlaceAccess.java
    • PlaceAccess 도메인을 추가했습니다.
  • src/main/java/com/daedan/festabook/place/dto/MainPlaceUpdateByPlaceAccessRequest.java
    • MainPlaceUpdateByPlaceAccessRequest DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/place/dto/MainPlaceUpdateByPlaceAccessResponse.java
    • MainPlaceUpdateByPlaceAccessResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/place/dto/PlaceAccessCreateRequest.java
    • PlaceAccessCreateRequest DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/place/dto/PlaceAccessCreateResponse.java
    • PlaceAccessCreateResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/place/dto/PlaceAccessLoginResponse.java
    • PlaceAccessLoginResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/place/dto/PlaceAccessResponse.java
    • PlaceAccessResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/place/infrastructure/PlaceAccessJpaRepository.java
    • PlaceAccessJpaRepository 인터페이스를 추가했습니다.
  • src/main/java/com/daedan/festabook/place/service/PlaceAccessService.java
    • PlaceAccessService를 추가하여 플레이스 접근 링크 관련 비즈니스 로직을 구현했습니다.
  • src/main/java/com/daedan/festabook/place/service/authorization/PlaceFestivalIdsResolver.java
    • PlaceFestivalIdsResolver를 추가하여 Place에서 Festival ID를 추출하는 로직을 구현했습니다.
  • src/main/java/com/daedan/festabook/question/controller/QuestionController.java
    • QuestionController에서 권한 설정을 업데이트했습니다.
  • src/main/java/com/daedan/festabook/question/domain/Question.java
    • Question 도메인에서 BusinessException 대신 BadRequestException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/question/infrastructure/QuestionJpaRepository.java
    • QuestionJpaRepository에 findFestivalIdsByQuestionIds 메서드를 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/controller/StaffController.java
    • StaffController를 추가하여 축제 관리자 관련 API를 제공합니다.
  • src/main/java/com/daedan/festabook/staff/domain/Staff.java
    • Staff 도메인을 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/domain/StaffAuthority.java
    • StaffAuthority 도메인을 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/dto/StaffAuthorityResponse.java
    • StaffAuthorityResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/dto/StaffAuthorityUpdateRequest.java
    • StaffAuthorityUpdateRequest DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/dto/StaffLoginRequest.java
    • StaffLoginRequest DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/dto/StaffLoginResponse.java
    • StaffLoginResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/dto/StaffNameUpdateRequest.java
    • StaffNameUpdateRequest DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/dto/StaffPasswordUpdateRequest.java
    • StaffPasswordUpdateRequest DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/dto/StaffRequest.java
    • StaffRequest DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/dto/StaffResponse.java
    • StaffResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/dto/StaffResponses.java
    • StaffResponses DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/dto/StaffUsernameDuplicateResponse.java
    • StaffUsernameDuplicateResponse DTO를 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/infrastructure/StaffJpaRepository.java
    • StaffJpaRepository 인터페이스를 추가했습니다.
  • src/main/java/com/daedan/festabook/staff/service/StaffService.java
    • StaffService를 추가하여 축제 관리자 관련 비즈니스 로직을 구현했습니다.
  • src/main/java/com/daedan/festabook/staff/service/authorization/StaffOrganizationIdResolver.java
    • StaffOrganizationIdResolver를 추가하여 Staff에서 Organization ID를 추출하는 로직을 구현했습니다.
  • src/main/java/com/daedan/festabook/storage/controller/ImageStoreController.java
    • ImageStoreController에서 권한 설정을 업데이트했습니다.
  • src/main/java/com/daedan/festabook/storage/infrastructure/LocalStorageManager.java
    • LocalStorageManager에서 BusinessException 대신 InternalServerException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/storage/infrastructure/S3StorageManager.java
    • S3StorageManager에서 파일 URL 생성 로직을 수정했습니다.
  • src/main/java/com/daedan/festabook/storage/infrastructure/StoreFile.java
    • StoreFile에서 BusinessException 대신 BadRequestException 및 InternalServerException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/timetag/controller/TimeTagController.java
    • TimeTagController에서 권한 설정을 업데이트했습니다.
  • src/main/java/com/daedan/festabook/timetag/domain/TimeTag.java
    • TimeTag 도메인에서 BusinessException 대신 BadRequestException을 사용하도록 변경했습니다.
  • src/main/java/com/daedan/festabook/timetag/infrastructure/TimeTagJpaRepository.java
    • TimeTagJpaRepository에 findFestivalIdsByTimeTagIds 메서드를 추가했습니다.
  • src/main/java/com/daedan/festabook/timetag/service/TimeTagService.java
    • TimeTagService에서 권한 검증 로직을 추가하고, 예외 처리 방식을 변경했습니다.
  • src/main/resources/application.yml
    • application.yml에서 Context Path를 제거하고, CORS 설정을 업데이트했습니다.
  • src/main/resources/db/migration/V12.0__create_organization.sql
    • organization 테이블 생성
  • src/main/resources/db/migration/V12.1__add_organization_id_on_festival.sql
    • festival 테이블에 organization_id 컬럼 추가
  • src/main/resources/db/migration/V12.2__alter_university_name_nullable.sql
    • festival 테이블의 university_name 컬럼을 nullable로 변경
  • src/main/resources/db/migration/V13.0__create_organizer.sql
    • organizer 테이블 생성
  • src/main/resources/db/migration/V13.1__create_organizer_roles.sql
    • organizer_roles 테이블 생성
  • src/main/resources/db/migration/V13.2__create_staff.sql
    • staff 테이블 생성
  • src/main/resources/db/migration/V13.3__create_staff_authority.sql
    • staff_authority 테이블 생성
  • src/main/resources/db/migration/V13.4__create_staff_roles.sql
    • staff_roles 테이블 생성
  • src/main/resources/db/migration/V14.0__create_place_access.sql
    • place_access 테이블 생성
Activity
  • Testcontainers 의존성 버전 업데이트
  • 사용하지 않는 Council 관련 기능 제거
  • API 접근 권한 검증 로직 강화
  • API 문서 개선
  • 예외 처리 방식 변경
  • 테스트 코드 개선
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@sonarqubecloud
Copy link

sonarqubecloud bot commented Mar 4, 2026

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

이번 PR은 기존 Council 모델을 Organization, Organizer, Staff 계층 구조로 대체하여 더 견고하고 세분화된 새로운 권한 시스템을 도입하는 대규모 리팩토링으로 보입니다. AuthorizationServiceResolver 패턴을 도입하여 권한 검사를 중앙에서 관리하도록 변경한 점은 설계와 유지보수성 측면에서 큰 개선입니다. 전반적으로 코드가 훨씬 깔끔해졌고, 새로 정의된 상세한 스타일 가이드를 잘 따르고 있습니다. 제 리뷰는 코드의 일관성과 안정성을 더욱 높이기 위한 몇 가지 제안에 초점을 맞추었습니다.

Note: Security Review did not run due to the size of the PR.

I am having trouble creating individual review comments. Click here to see my feedback.

src/main/java/com/daedan/festabook/announcement/controller/AnnouncementController.java (54)

medium

code-style.md의 9.4. @Operation summary 권한 접두사 이모지 규칙에 따르면, 누구나 접근 가능한 API에는 (U+26AA)를 사용하도록 되어 있습니다. 현재 코드에서는 ⚪️ (U+26AA U+FE0F)가 사용되어 미세한 차이가 있습니다. 시각적으로는 비슷해 보일 수 있으나, 유니코드 값이 달라 잠재적인 파싱 오류를 방지하고 규칙의 일관성을 지키기 위해 가이드에 명시된 문자로 통일하는 것이 좋습니다.

    @Operation(summary = "⚪ 축제의 공지 전체 조회")
References
  1. Style guide section 9.4 specifies the emoji to be used for different authorization levels in @Operation summaries. For APIs accessible without authentication, the (U+26AA) emoji should be used. The current code uses a variant with a selector (⚪️), which is a minor deviation. (link)

src/main/java/com/daedan/festabook/authorization/service/AuthorizationService.java (7)

medium

code-style.md의 1.1. 공통 원칙에 따라 사용하지 않는 import는 제거해야 합니다. com.daedan.festabook.global.exception.BusinessException import가 현재 파일에서 사용되지 않고 있으므로 제거하여 코드를 더 깔끔하게 유지하는 것이 좋습니다.

References
  1. Style guide section 1.1 states that unused imports must be removed to improve code readability and avoid confusion. (link)

@soeun2537 soeun2537 merged commit 18be698 into prod Mar 4, 2026
6 of 7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants