Skip to content

feat: 평면도(부스 좌표) 관리 기능 - #26

Closed
hyun326 wants to merge 3 commits into
devfrom
feature/booth-management
Closed

hyun326 wants to merge 3 commits into
devfrom
feature/booth-management

Conversation

@hyun326

@hyun326 hyun326 commented Aug 5, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • 행사장 평면도(VenueMap)·부스 좌표(BoothMapPosition) 백엔드 API 신규 구현 (/events/{eventId}/venue-maps...) — 엔티티/DB 스키마는 있었지만 API가 없던 부분을 채움
  • OrganizerAdmin "평면도 관리" 탭에 실제 이미지 업로드 + 드래그로 부스 좌표 지정하는 화면 연동 (정적 placeholder 대체)
  • 모집 공고 상세(/recruitments/:id)에 게시된 평면도와 부스 핀을 공개 노출, 부스 목록/핀 클릭 시 서로 하이라이트
  • 리뷰 중 발견한 버그 수정: 좌표 재저장 시 Hibernate flush 순서로 인한 unique 제약 위반(500), 중복 boothId 요청 미검증, 드래그 이벤트 리스너 언마운트 시 미정리, 부스 100개 초과 행사의 팔레트 누락
  • 로컬 Windows 환경에서 MinIO 기본 포트(9000/9001)가 Windows 예약 포트 범위와 충돌하는 문제 발견 → docker-compose의 MinIO 포트를 다른 서비스처럼 환경변수로 오버라이드 가능하게 변경 (기본값 유지, 동작 변화 없음)

Test plan

  • ./gradlew compileJava compileTestJava 통과 (Testcontainers는 로컬 Docker 환경 제약으로 직접 실행은 못 함, 신규 VenueMapControllerTest 포함)
  • npm run build (FE) 통과
  • 로컬에서 이미지 업로드 → 드래그로 좌표 지정 → 저장 → 게시 전체 플로우 브라우저로 직접 확인
  • /recruitments/:id에서 게시된 평면도 핀 클릭 및 부스 목록 클릭 시 상호 하이라이트 확인
  • 리뷰어: 스테이징에서 MinIO/S3 실제 버킷 연동 재확인 권장

🤖 Generated with Claude Code

Summary by CodeRabbit

  • 새 기능
    • 행사별 평면도를 업로드하고 목록을 조회할 수 있습니다.
    • 평면도를 게시·삭제하고, 게시된 평면도를 외부에 공개할 수 있습니다.
    • 평면도에 부스 위치를 추가하거나 드래그하여 수정할 수 있습니다.
    • 부스 위치가 평면도에 핀으로 표시되며, 핀과 부스 목록을 선택해 서로 강조할 수 있습니다.
  • 개선
    • 입력값과 파일 정보를 검증하고, 권한에 따른 관리 기능 접근을 지원합니다.
    • 평면도 및 부스 위치 처리 중 발생하는 오류를 화면에 안내합니다.

cfu344-png and others added 3 commits August 5, 2026 16:11
VenueMap/BoothMapPosition 엔티티는 있었지만 API가 없던 부분을 채운다.
Repository/Service/Controller/DTO를 BoothController 컨벤션에 맞춰 신규
작성하고, OrganizerAdmin의 평면도 관리 탭을 실제 업로드+드래그 좌표
지정이 되는 FloorplanManagementPanel로 교체했다.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
- 좌표 저장 시 중복 boothId 요청을 400으로 명확히 거부 (기존엔 DB unique
  제약 위반으로 처리되지 않은 500이 발생했음)
- 평면도 편집 패널의 드래그 이벤트 리스너를 언마운트 시 정리
- 부스가 100개를 넘는 행사도 팔레트에 전부 뜨도록 관리자 패널의 부스 목록을
  전체 페이지 순회로 변경
- RecruitmentDetail(/recruitments/:id) 공개 화면에 게시된 평면도와 부스
  핀을 노출하고, 부스 목록/핀 클릭 시 서로 하이라이트되도록 연동
- 로컬 Windows 환경에서 MinIO 기본 포트(9000/9001)가 예약 범위와 충돌하는
  문제를 겪어, docker-compose의 MinIO 포트를 다른 서비스처럼 환경변수로
  오버라이드 가능하게 변경 (기본값은 그대로 유지)

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 5, 2026 •

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 63ad340d-f9e7-4750-8760-6b539a11daaa

📥 Commits

Reviewing files that changed from the base of the PR and between a98e078 and 2f1e991.

📒 Files selected for processing (16)
  • BE/src/main/java/com/min/edu/booth/controller/VenueMapController.java
  • BE/src/main/java/com/min/edu/booth/domain/VenueMap.java
  • BE/src/main/java/com/min/edu/booth/dto/BoothMapPositionResponseDto.java
  • BE/src/main/java/com/min/edu/booth/dto/BoothMapPositionUpsertRequestDto.java
  • BE/src/main/java/com/min/edu/booth/dto/VenueMapCreateRequestDto.java
  • BE/src/main/java/com/min/edu/booth/dto/VenueMapResponseDto.java
  • BE/src/main/java/com/min/edu/booth/repository/BoothMapPositionRepository.java
  • BE/src/main/java/com/min/edu/booth/repository/VenueMapRepository.java
  • BE/src/main/java/com/min/edu/booth/service/VenueMapService.java
  • BE/src/test/java/com/min/edu/booth/controller/VenueMapControllerTest.java
  • FE/src/api/fileApi.js
  • FE/src/api/venueMapApi.js
  • FE/src/components/FloorplanManagementPanel.jsx
  • FE/src/pages/OrganizerAdmin.jsx
  • FE/src/pages/RecruitmentDetail.jsx
  • docker-compose.yml

Walkthrough

행사 평면도의 백엔드 API와 저장 로직을 추가했습니다. 관리자 화면에서 이미지 업로드와 부스 좌표 편집을 지원합니다. 모집 상세 화면에서 게시된 평면도와 부스 핀을 표시합니다. MinIO 호스트 포트도 환경변수로 설정할 수 있습니다.

Changes

행사 평면도 기능

Layer / File(s) Summary
평면도 계약과 저장소
BE/src/main/java/com/min/edu/booth/domain/VenueMap.java, BE/src/main/java/com/min/edu/booth/dto/*Map*Dto.java, BE/src/main/java/com/min/edu/booth/repository/*MapRepository.java
평면도 상태 전환 메서드와 생성·좌표 요청 검증을 추가했습니다. 평면도와 부스 위치의 조회·삭제 저장소를 추가했습니다.
평면도 서비스 흐름
BE/src/main/java/com/min/edu/booth/service/VenueMapService.java
행사 관리자 권한과 파일 접근을 검증합니다. 평면도 생성, 게시, 삭제, 부스 위치 일괄 저장, 응답 변환을 처리합니다.
REST API와 통합 검증
BE/src/main/java/com/min/edu/booth/controller/VenueMapController.java, BE/src/test/java/com/min/edu/booth/controller/VenueMapControllerTest.java
평면도 목록·공개 조회·생성·게시·삭제·좌표 저장 엔드포인트를 추가했습니다. 권한과 게시 상태별 동작을 통합 테스트로 검증합니다.
관리자 평면도 편집 UI
FE/src/api/fileApi.js, FE/src/api/venueMapApi.js, FE/src/components/FloorplanManagementPanel.jsx, FE/src/pages/OrganizerAdmin.jsx
파일 업로드와 평면도 API를 연결했습니다. 이미지 크기 검증, 부스 핀 배치, 드래그 좌표 수정, 게시·삭제·저장을 제공합니다.
공개 평면도 표시
FE/src/pages/RecruitmentDetail.jsx
공개 모집 평면도를 조회하고 이미지 위에 부스 핀을 표시합니다. 핀과 부스 목록의 선택 및 강조 상태를 동기화합니다.

MinIO 포트 설정

Layer / File(s) Summary
MinIO 호스트 포트 바인딩
docker-compose.yml
MinIO API와 콘솔의 호스트 포트를 환경변수로 설정합니다. 기본값은 9000과 9001입니다.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  actor 관리자
  participant FloorplanManagementPanel
  participant venueMapApi
  participant VenueMapController
  participant VenueMapService
  participant FileService

  관리자->>FloorplanManagementPanel: 이미지와 평면도 정보 입력
  FloorplanManagementPanel->>FileService: 이미지 파일 업로드
  FileService-->>FloorplanManagementPanel: imageFileId 반환
  FloorplanManagementPanel->>venueMapApi: 평면도 생성 요청
  venueMapApi->>VenueMapController: 행사 평면도 생성 API 호출
  VenueMapController->>VenueMapService: 인증 정보와 요청 DTO 전달
  VenueMapService-->>VenueMapController: 생성된 평면도 반환
  VenueMapController-->>venueMapApi: ApiResponse 반환
  venueMapApi-->>FloorplanManagementPanel: 평면도 데이터 반환
  관리자->>FloorplanManagementPanel: 게시 또는 좌표 저장
  FloorplanManagementPanel->>venueMapApi: 게시·좌표 저장 API 호출
  venueMapApi->>VenueMapController: 상태 또는 위치 변경 요청
  VenueMapController->>VenueMapService: 게시 또는 위치 저장 처리
Loading

Possibly related PRs

  • half-fifty/eventoday#21: 기존 Booth 엔티티와 API를 사용해 평면도 위치를 연결하고 표시합니다.
✨ 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 feature/booth-management

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

@hyun326

hyun326 commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator Author

PR 템플릿 형식으로 다시 올리기 위해 닫습니다.

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.

2 participants