Skip to content

feat: GET /festivals/{festivalId}/maps 지도 이미지 조회 API 구현#57

Open
seoyeoki wants to merge 2 commits intodevelopfrom
feat/56-festival-map-api
Open

feat: GET /festivals/{festivalId}/maps 지도 이미지 조회 API 구현#57
seoyeoki wants to merge 2 commits intodevelopfrom
feat/56-festival-map-api

Conversation

@seoyeoki
Copy link
Copy Markdown
Contributor

@seoyeoki seoyeoki commented Mar 27, 2026

Summary

  • GET /festivals/{festivalId}/maps 엔드포인트 구현 (JWT 인증 필수)
  • Festival 존재 여부 검증 후 지도 이미지 목록을 sequence 오름차순으로 반환
  • 인프라 관련 파일(Dockerfile, docker-compose*.yml 등) infra/ 디렉토리로 정리

Changes

feat

  • FestivalMapService 신규 생성 — festival 존재 검증 + 지도 목록 조회
  • FestivalMapRepositoryfindByFestivalIdOrderBySequenceAsc() 추가
  • FestivalMapController — 서비스 호출 연결
  • GeneralErrorCodeFESTIVAL_NOT_FOUND (404) 추가

chore

  • Dockerfile, .dockerignore, docker-compose*.yml, start-app.sh, trigger-ai-fix.sh, db/infra/ 이동
  • _deploy.yml 경로 업데이트

Test Plan

  • 유효한 JWT 토큰으로 요청 시 지도 목록 정상 반환
  • 토큰 없이 요청 시 401 반환
  • 존재하지 않는 festivalId 요청 시 FESTIVAL_NOT_FOUND 404 반환
  • 응답의 content 항목이 sequence 오름차순으로 정렬되어 있는지 확인

Closes #56

🤖 Generated with Claude Code

Summary by CodeRabbit

릴리스 노트

  • New Features

    • 축제 지도 조회 API 구현으로 사용자가 축제별 지도 정보를 순서대로 조회 가능
  • Chores

    • 인프라 구성 개선: Redis 캐시 및 전용 네트워크 추가
    • 축제 미발견 시 명확한 오류 메시지 제공
    • 자동 AI 수정 스크립트의 재시도 로직 강화

seoyeoki and others added 2 commits March 27, 2026 21:36
- Dockerfile, .dockerignore, docker-compose*.yml, start-app.sh, trigger-ai-fix.sh → infra/
- db/ 디렉토리 → infra/db/
- 기존 infra/docker-compose.yml(MySQL+Nginx) 통합 후 nginx-storage 서비스 추가
- _deploy.yml: Dockerfile 및 docker-compose.yml 경로 업데이트

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- FestivalMapService: festival 존재 검증 + sequence 오름차순 지도 목록 조회
- FestivalMapRepository: findByFestivalIdOrderBySequenceAsc() 추가
- FestivalMapController: 서비스 호출로 연결 (null → 실제 데이터)
- GeneralErrorCode: FESTIVAL_NOT_FOUND(404) 추가

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 27, 2026

📝 Walkthrough

개요

Docker Compose 구성을 루트에서 infra/ 디렉토리로 이동하며 서비스를 재구조화(MySQL, Redis, Spring Boot 앱 추가), 빌드 스크립트를 업데이트하고, 축제 지도 조회 API를 구현합니다.

변경사항

코호트 / 파일(들) 요약
인프라 재구성
docker-compose.yml, infra/docker-compose.yml, infra/Dockerfile, infra/trigger-ai-fix.sh
Docker Compose 구성을 infra/ 디렉토리로 이동하고 wagle-app, wagle-db, wagle-redis 서비스를 추가하며 전용 네트워크로 연결. Dockerfile에서 스크립트 복사 경로 업데이트. trigger-ai-fix.sh에 영구 재시도 카운터 및 강제 중단 로직 추가.
FestivalMap API 구현
src/main/java/com/waglewagle/server/domain/festivalMap/controller/FestivalMapController.java, src/main/java/com/waglewagle/server/domain/festivalMap/service/FestivalMapService.java, src/main/java/com/waglewagle/server/domain/festivalMap/repository/FestivalMapRepository.java, src/main/java/com/waglewagle/server/domain/festivalMap/dto/CongestionDTO.java, src/main/java/com/waglewagle/server/global/apiPayload/code/GeneralErrorCode.java
축제 지도 목록 조회 API 구현: 새로운 FestivalMapService 추가, 저장소에 findByFestivalIdOrderBySequenceAsc() 메서드 추가, 컨트롤러에서 실제 데이터 반환으로 변경, 축제 미발견 예외 처리 로직 추가.

시퀀스 다이어그램

sequenceDiagram
    participant Client
    participant Controller as FestivalMapController
    participant Service as FestivalMapService
    participant FestRepo as FestivalMapRepository
    participant FestRepo2 as FestivalRepository
    participant Database as Database

    Client->>Controller: GET /festivals/{festivalId}/maps
    Controller->>Service: getFestivalMaps(festivalId)
    Service->>FestRepo2: existsById(festivalId)
    FestRepo2->>Database: SELECT * FROM festival WHERE id=?
    Database-->>FestRepo2: Result
    alt Festival Not Found
        FestRepo2-->>Service: false
        Service-->>Controller: throw GeneralException(FESTIVAL_NOT_FOUND)
        Controller-->>Client: 404 에러 응답
    else Festival Found
        FestRepo2-->>Service: true
        Service->>FestRepo: findByFestivalIdOrderBySequenceAsc(festivalId)
        FestRepo->>Database: SELECT * FROM festival_map WHERE festival_id=? ORDER BY sequence
        Database-->>FestRepo: FestivalMap List
        FestRepo-->>Service: FestivalMap entities
        Service->>Service: Convert to FestivalMapInfo DTOs
        Service-->>Controller: List<FestivalMapInfo>
        Controller-->>Client: 200 성공 응답 (지도 목록)
    end
Loading

예상 코드 리뷰 시간

🎯 3 (보통) | ⏱️ ~20분

관련 가능성 있는 PR

🐰 지도들이 줄을 서서 / 순서대로 나타나고,
축제를 찾지 못하면 / 토끼처럼 빠르게 알려주네!
재시도는 다섯 번만, / 그 이상이면 멈춰 버려 🛑
도커 네트워크로 함께 춤을 춘다 ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning The PR implements the main API endpoint with service, repository, controller, error handling, and DTO classes required by issue #56, but lacks the explicit response DTO classes (FestivalMapListResponse, FestivalMapResponse, BoundsResponse) mentioned in the requirements. Add explicit response DTO classes (FestivalMapListResponse, FestivalMapResponse, BoundsResponse) as specified in issue #56 requirements to fully comply with the API contract.
Out of Scope Changes check ⚠️ Warning The PR includes infrastructure refactoring (moving Dockerfile, docker-compose files, and scripts into infra/ directory) which is mentioned in commit messages but not directly related to the core API implementation objective of issue #56. Separate infrastructure migration changes into a distinct PR to maintain focus on the core API feature implementation and simplify code review.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The pull request title clearly summarizes the main change: implementing the GET /festivals/{festivalId}/maps API for festival map image inquiry, which is the primary objective of this PR.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/56-festival-map-api

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.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@infra/docker-compose.yml`:
- Around line 29-31: The MySQL Docker service creates database MYSQL_DATABASE
(current key MYSQL_DATABASE: wagle) but the application JDBC URL (in
src/main/resources/application.yml) points to schema name "waglewagle", causing
startup failures; pick one canonical name and make both match: either change the
Docker env var MYSQL_DATABASE to "waglewagle" or update the JDBC URL in
application.yml to "wagle" (or centralize both to an env var), and ensure any
references (tests, migrations) use the chosen name so the container provides the
expected schema at startup.

In `@infra/trigger-ai-fix.sh`:
- Around line 28-33: When CURRENT_COUNT exceeds MAX_RETRIES the script currently
removes COUNTER_FILE then exits (exit 2), which allows the next run to reset to
attempt `#1`; instead preserve the counter or write a persistent stop flag so the
forced-stop state remains; modify the branch handling CURRENT_COUNT and
MAX_RETRIES (the if block around those variables and the rm -f "$COUNTER_FILE" /
exit 2 lines) to either not delete COUNTER_FILE or to create a new STOP_FLAG
file (e.g., STOP_FLAG path variable) and ensure the script’s startup logic
checks that STOP_FLAG before attempting retries so human intervention is
required to clear it.
- Around line 15-22: 현재 COUNTER_FILE을 읽고 증분한 뒤 덮어쓰는 작업(CURRENT_COUNT read -> +1
-> echo)은 락 없이 수행되어 동시성 문제를 일으키므로, COUNTER_FILE(또는 별도 lock 파일)을 대상으로 배타적 락을 획득한
후에 CURRENT_COUNT를 읽고 증가시키고 파일에 쓰는 전체 read-modify-write를 하나의 락 구역으로 감싸도록 수정하세요;
구체적으로 COUNTER_FILE과 CURRENT_COUNT 참조 지점을 찾아 flock을 사용해 배타적 잠금(flock -x 또는 파일
디스크립터 기반 락)을 얻은 다음 파일을 읽고 CURRENT_COUNT=$((CURRENT_COUNT+1))로 계산하고 덮어쓴 뒤 락을
해제하도록 구현합니다.
- Around line 87-99: Capture the AI agent's stdout/stderr into a variable when
invoking $AI_CLI_COMMAND (instead of discarding it) and check that captured
output for the sentinel string "MANUAL_INTERVENTION_REQUIRED"; only remove
COUNTER_FILE and print the success reset message if that sentinel is NOT present
and AI_EXIT_CODE is zero. If the sentinel is found, do not rm "$COUNTER_FILE",
print a clear message indicating manual intervention is required (including the
sentinel and exit code), and exit non‑zero so the caller knows this is not an
automatic success; reference the existing variables AI_EXIT_CODE, PROMPT_FILE,
COUNTER_FILE and the sentinel "MANUAL_INTERVENTION_REQUIRED" to locate where to
add the capture-and-check logic.

In
`@src/main/java/com/waglewagle/server/domain/festivalMap/repository/FestivalMapRepository.java`:
- Line 9: The derived query method in FestivalMapRepository uses a non-existent
property festivalId, causing PropertyReferenceException; rename the repository
method from findByFestivalIdOrderBySequenceAsc to
findByFestival_IdOrderBySequenceAsc and update any callers (notably the service
method in FestivalMapService that invokes findByFestivalIdOrderBySequenceAsc) to
call the new method name so Spring can resolve the nested property via the
festival relationship.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: b058b886-1755-472b-b586-99e84f83939f

📥 Commits

Reviewing files that changed from the base of the PR and between ce721ea and d6f06bf.

⛔ Files ignored due to path filters (1)
  • .github/workflows/_deploy.yml is excluded by !**/.github/**
📒 Files selected for processing (12)
  • docker-compose.yml
  • infra/.dockerignore
  • infra/Dockerfile
  • infra/docker-compose-local.yml
  • infra/docker-compose.yml
  • infra/start-app.sh
  • infra/trigger-ai-fix.sh
  • src/main/java/com/waglewagle/server/domain/festivalMap/controller/FestivalMapController.java
  • src/main/java/com/waglewagle/server/domain/festivalMap/dto/CongestionDTO.java
  • src/main/java/com/waglewagle/server/domain/festivalMap/repository/FestivalMapRepository.java
  • src/main/java/com/waglewagle/server/domain/festivalMap/service/FestivalMapService.java
  • src/main/java/com/waglewagle/server/global/apiPayload/code/GeneralErrorCode.java
💤 Files with no reviewable changes (2)
  • src/main/java/com/waglewagle/server/domain/festivalMap/dto/CongestionDTO.java
  • docker-compose.yml

Comment on lines 29 to +31
environment:
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
MYSQL_DATABASE: "${DB_NAME}"
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-root}
MYSQL_DATABASE: wagle
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

MySQL 초기 스키마명을 애플리케이션 설정과 맞춰 주세요.

Line 31에서는 wagle만 생성하지만, src/main/resources/application.yml:4-6의 JDBC URL은 waglewagle에 접속합니다. 새 볼륨으로 올리면 스키마가 없어 애플리케이션이 바로 기동 실패합니다. 둘 중 한쪽 이름을 통일해야 합니다.

수정 예시
-      MYSQL_DATABASE: wagle
+      MYSQL_DATABASE: waglewagle
📝 Committable suggestion

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

Suggested change
environment:
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
MYSQL_DATABASE: "${DB_NAME}"
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-root}
MYSQL_DATABASE: wagle
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-root}
MYSQL_DATABASE: waglewagle
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@infra/docker-compose.yml` around lines 29 - 31, The MySQL Docker service
creates database MYSQL_DATABASE (current key MYSQL_DATABASE: wagle) but the
application JDBC URL (in src/main/resources/application.yml) points to schema
name "waglewagle", causing startup failures; pick one canonical name and make
both match: either change the Docker env var MYSQL_DATABASE to "waglewagle" or
update the JDBC URL in application.yml to "wagle" (or centralize both to an env
var), and ensure any references (tests, migrations) use the chosen name so the
container provides the expected schema at startup.

Comment on lines +15 to +22
if [ -f "$COUNTER_FILE" ]; then
CURRENT_COUNT=$(cat "$COUNTER_FILE")
else
CURRENT_COUNT=0
fi

CURRENT_COUNT=$((CURRENT_COUNT + 1))
echo "$CURRENT_COUNT" > "$COUNTER_FILE"
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

파일 카운터 갱신이 락 없이 수행됩니다.

Line 16-22의 cat -> +1 -> echo read-modify-write가 보호되지 않아, 두 웹훅이 동시에 들어오면 증가분이 유실되거나 카운트가 꼬일 수 있습니다. 파일 카운터를 계속 쓸 거라면 읽기/쓰기/삭제를 같은 락으로 감싸야 합니다.

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

In `@infra/trigger-ai-fix.sh` around lines 15 - 22, 현재 COUNTER_FILE을 읽고 증분한 뒤 덮어쓰는
작업(CURRENT_COUNT read -> +1 -> echo)은 락 없이 수행되어 동시성 문제를 일으키므로, COUNTER_FILE(또는
별도 lock 파일)을 대상으로 배타적 락을 획득한 후에 CURRENT_COUNT를 읽고 증가시키고 파일에 쓰는 전체
read-modify-write를 하나의 락 구역으로 감싸도록 수정하세요; 구체적으로 COUNTER_FILE과 CURRENT_COUNT 참조
지점을 찾아 flock을 사용해 배타적 잠금(flock -x 또는 파일 디스크립터 기반 락)을 얻은 다음 파일을 읽고
CURRENT_COUNT=$((CURRENT_COUNT+1))로 계산하고 덮어쓴 뒤 락을 해제하도록 구현합니다.

Comment on lines +28 to +33
# 파일 카운터 기준 최대 재시도 초과 시 강제 중단 (AI API 실패 포함 모든 실패 케이스 대응)
if [ "$CURRENT_COUNT" -gt "$MAX_RETRIES" ]; then
echo "🚨 [강제 중단] ${MAX_RETRIES}회 연속 복구 실패 (API 크레딧 소진 등 포함). 휴먼 개입이 필요합니다."
rm -f "$COUNTER_FILE"
exit 2
fi
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

강제 중단 직전에 카운터를 삭제하면 보호 장치가 바로 해제됩니다.

Line 31에서 카운터를 지운 뒤 종료하면 다음 호출은 다시 1회차로 시작합니다. 지금 로직은 "최대 횟수 초과 시 휴먼 개입 전까지 중단"이 아니라 "해당 호출만 건너뛰고 곧바로 다시 재시도"가 됩니다. 강제 중단 상태를 유지하려면 카운터를 남기거나 별도 stop flag를 기록해야 합니다.

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

In `@infra/trigger-ai-fix.sh` around lines 28 - 33, When CURRENT_COUNT exceeds
MAX_RETRIES the script currently removes COUNTER_FILE then exits (exit 2), which
allows the next run to reset to attempt `#1`; instead preserve the counter or
write a persistent stop flag so the forced-stop state remains; modify the branch
handling CURRENT_COUNT and MAX_RETRIES (the if block around those variables and
the rm -f "$COUNTER_FILE" / exit 2 lines) to either not delete COUNTER_FILE or
to create a new STOP_FLAG file (e.g., STOP_FLAG path variable) and ensure the
script’s startup logic checks that STOP_FLAG before attempting retries so human
intervention is required to clear it.

Comment on lines 87 to +99
$AI_CLI_COMMAND "$(cat "$PROMPT_FILE")"
AI_EXIT_CODE=$?

rm "$PROMPT_FILE"
echo ">> AI 에이전트 실행이 완료되었습니다."

if [ $AI_EXIT_CODE -ne 0 ]; then
echo "❌ AI 에이전트 실행 실패 (exit code: $AI_EXIT_CODE). 카운터 유지 후 종료합니다."
exit 1
fi

# AI 성공 시 카운터 리셋
rm -f "$COUNTER_FILE"
echo "✅ AI 에이전트 실행 완료. 카운터를 리셋합니다."
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

AI의 수동 개입 신호를 성공으로 취급하지 마세요.

프롬프트는 수정 불가한 인프라/권한 오류에서 MANUAL_INTERVENTION_REQUIRED를 출력하라고 지시하지만, 현재는 exit code만 보고 Line 98에서 카운터를 리셋합니다. 그러면 사람이 개입해야 하는 장애도 다음 호출에서 다시 1회차가 되어 반복됩니다. 성공 리셋 전에 이 sentinel을 별도로 감지해야 합니다.

수정 예시
 echo ">> AI 에이전트를 실행합니다..."
-$AI_CLI_COMMAND "$(cat "$PROMPT_FILE")"
-AI_EXIT_CODE=$?
+AI_OUTPUT=$($AI_CLI_COMMAND "$(cat "$PROMPT_FILE")" 2>&1)
+AI_EXIT_CODE=$?
+printf '%s\n' "$AI_OUTPUT"

 rm "$PROMPT_FILE"

-if [ $AI_EXIT_CODE -ne 0 ]; then
+if [ "$AI_EXIT_CODE" -ne 0 ]; then
   echo "❌ AI 에이전트 실행 실패 (exit code: $AI_EXIT_CODE). 카운터 유지 후 종료합니다."
   exit 1
 fi
+
+if printf '%s\n' "$AI_OUTPUT" | grep -q 'MANUAL_INTERVENTION_REQUIRED'; then
+  echo "🚨 수동 개입이 필요한 장애입니다. 카운터를 유지한 채 종료합니다."
+  exit 2
+fi

 # AI 성공 시 카운터 리셋
 rm -f "$COUNTER_FILE"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@infra/trigger-ai-fix.sh` around lines 87 - 99, Capture the AI agent's
stdout/stderr into a variable when invoking $AI_CLI_COMMAND (instead of
discarding it) and check that captured output for the sentinel string
"MANUAL_INTERVENTION_REQUIRED"; only remove COUNTER_FILE and print the success
reset message if that sentinel is NOT present and AI_EXIT_CODE is zero. If the
sentinel is found, do not rm "$COUNTER_FILE", print a clear message indicating
manual intervention is required (including the sentinel and exit code), and exit
non‑zero so the caller knows this is not an automatic success; reference the
existing variables AI_EXIT_CODE, PROMPT_FILE, COUNTER_FILE and the sentinel
"MANUAL_INTERVENTION_REQUIRED" to locate where to add the capture-and-check
logic.

import java.util.List;

public interface FestivalMapRepository extends JpaRepository<FestivalMap, Long> {
List<FestivalMap> findByFestivalIdOrderBySequenceAsc(Long festivalId);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify that FestivalMap has association field `festival` (not `festivalId`)
# and locate derived query methods using incorrect/correct property path.

rg -n --type=java -C3 'class FestivalMap|private Festival festival|private .*festivalId|findByFestivalIdOrderBySequenceAsc|findByFestival_IdOrderBySequenceAsc'

Repository: wagle-project/wagle-server

Length of output: 7261


Spring Data 파생 메서드명이 부트스트랩 시점에 PropertyReferenceException을 발생시킵니다.

FestivalMap 엔티티에는 festivalId 필드가 없고 festival 필드(관계 객체)만 존재하므로, 메서드명을 findByFestival_IdOrderBySequenceAsc로 수정해야 합니다. 서비스(FestivalMapService.java 27행)도 함께 변경되어야 합니다.

수정안
 public interface FestivalMapRepository extends JpaRepository<FestivalMap, Long> {
-    List<FestivalMap> findByFestivalIdOrderBySequenceAsc(Long festivalId);
+    List<FestivalMap> findByFestival_IdOrderBySequenceAsc(Long festivalId);
 }
📝 Committable suggestion

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

Suggested change
List<FestivalMap> findByFestivalIdOrderBySequenceAsc(Long festivalId);
List<FestivalMap> findByFestival_IdOrderBySequenceAsc(Long festivalId);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@src/main/java/com/waglewagle/server/domain/festivalMap/repository/FestivalMapRepository.java`
at line 9, The derived query method in FestivalMapRepository uses a non-existent
property festivalId, causing PropertyReferenceException; rename the repository
method from findByFestivalIdOrderBySequenceAsc to
findByFestival_IdOrderBySequenceAsc and update any callers (notably the service
method in FestivalMapService that invokes findByFestivalIdOrderBySequenceAsc) to
call the new method name so Spring can resolve the nested property via the
festival relationship.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant