Skip to content

feat(super-admin): 공연장 관리 기능 구현 (Sprint 6)#432

Merged
hexdrinker merged 25 commits into
developfrom
feat/super-admin-concert-hall
Jun 22, 2026
Merged

feat(super-admin): 공연장 관리 기능 구현 (Sprint 6)#432
hexdrinker merged 25 commits into
developfrom
feat/super-admin-concert-hall

Conversation

@hexdrinker

Copy link
Copy Markdown
Collaborator

개요

슈퍼 어드민에 공연장 관리 기능을 신규 구현합니다. Figma(Boolti Vol.2 / Sprint 6)와 dev Swagger(슈퍼 어드민 공연장 API)를 기준으로 작업했습니다.

주요 작업

홈 / 목록

  • 홈에 공연 | 공연장 탭 분리 (?tab= 쿼리파람)
  • 공연장 목록(검색·카드 그리드·페이지네이션) + 생성 다이얼로그
  • 공연장 생성 직후 노출 처리(visibility=true)

공연장 상세 (사이드 내비 3탭)

  • /concert-hall/:hallId/{info,rental,data} 라우팅 + 전용 사이드 내비
  • 공연장 정보 탭: 대표 이미지/갤러리 업로드, 카카오(Daum) 주소 찾기, 인근 지하철역(호선 컬러 뱃지·검색 모달), 문의처(전화/이메일 검증), 편의시설(디자인 아이콘) — 저장 시 PUT /concert-halls/{id} + 지하철역 저장
  • 대관 정보 탭: 대관 방법/시간/부가세(드롭다운)/대관료·시간당 추가요금·유료옵션 동적 행/수용 인원/특이사항 — PUT·GET /concert-halls/{id}/rental 연동
  • 데이터 연결 탭: 공연 목록(정렬·페이지네이션), 추가 모달(직접 입력 포스터 업로드 / 불티 ID 검증 후 연결), 공연명 확인 삭제

API 레이어 (@boolti/api)

  • 슈퍼 어드민 공연장 타입·queryKey·쿼리/뮤테이션 훅 추가
  • 백엔드 변경 추적: 정보/대관 상세 조회 분리, manual 포스터 필수화, 이미지 업로드(presigned), visibility/삭제 엔드포인트 정합

기타 수정

  • 로그인 후 즉시 화면 전환(비반응형 가드 우회) + 로그인 중 로딩 표시
  • 주요 액션 버튼을 @boolti/ui 버튼으로 통일

검증

  • yarn type-check, yarn lint (super-admin + @boolti/api) 통과
  • 테스트 러너 미설정(레포 컨벤션)

남은 항목 / 참고

  • DELETE /concert-halls/{id}(공연장 삭제)는 디자인상 UI가 없어 미연결 (훅만 준비)
  • 노출/미노출 전환 토글 UI는 정책 확정 후 진행 예정 (생성 시 노출은 반영됨)
  • 이미지 썸네일은 현재 원본 URL 재사용

🤖 Generated with Claude Code

hexdrinker and others added 24 commits June 10, 2026 18:04
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
공연장 정보 탭은 인근 지하철역 검색·추가·삭제·저장(PUT)을 지원하고,
저장 API가 미제공인 나머지 필드와 대관 정보 탭은 읽기 전용으로 표시한다.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
공연 데이터 목록(정렬·페이지네이션)과 추가 모달(직접 입력, 불티 공연 ID
검증 후 연결), 공연명 일치 확인 삭제 팝업을 포함한다.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
기존 공연 목록을 ShowListTab으로 추출하고 ?tab= 쿼리파람 기반 탭을
추가한다. 공연장 탭은 검색/카드 그리드/페이지네이션과 생성 다이얼로그
(생성 후 상세 이동)를 제공한다.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
읽기 전용 화면을 Figma 정책 스펙대로 편집 가능한 폼으로 재구현한다.

- 대관 시간: 숫자 입력(기본 0) + 엔지니어 휴식 포함 체크, 노출 조건 안내
- 부가세: VAT 포함/별도 상호배타 체크박스 (해제 시 미선택 3상태)
- 대관료: 분류 8종 셀렉트 + 금액 + 기본 대관료 노출 라디오(1개) 동적 행
- 시간당 추가 요금: 분류 5종 셀렉트 + 금액 동적 행
- 수용 인원: 좌석/스탠딩 숫자 입력, 유료 옵션·특이사항: 삭제 가능 동적 행
- 저장 API 미제공으로 저장하기는 비활성 + 안내 Alert 유지

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 직접 입력: 기본 포스터 이미지 에셋 추가 + 변경하기(로컬 미리보기),
  외부 홍보 링크 필드, 필수값 입력 시에만 추가하기 활성화
- 불티 공연 ID: 연결하기/추가하기 상태 전환(Default→Filled→검증 성공
  초록 문구→에러), 에러 응답 type별 메시지 분기
  (SHOW_DATA_NOT_FOUND / SHOW_ALREADY_LINKED_TO_CONCERT_HALL / 그 외)
- 버튼을 @boolti/ui Button으로 교체, 인풋-버튼 행 높이 정렬(44px)
- 포스터/홍보 링크는 API 미지원으로 페이로드에서 제외

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
입력이 있으면 삭제하기를 활성화하고 클릭 시점에 공연명 일치를
검사한다. 미일치 시 에러 표시, 입력 수정 시 해제. 버튼은
@boolti/ui Button으로 교체.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
10개 이하(1페이지)일 때 페이지네이션을 숨기고, 노출 시 하단 중앙에
배치한다.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
disabled 상태에서도 툴팁이 동작하도록 span으로 감싼다.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 대표 이미지/사진: 점선 업로드 박스, 모서리에 걸친 삭제 버튼, 사진은
  다중 선택·최신 좌측 노출·최대 20장(도달 시 업로드 박스 숨김)·가로 스크롤
- 공연장 주소: 카카오 우편번호 모달(도로명 직접 입력 불가, 닫힘 후
  상세주소 포커스 — afterClose 시점 처리로 antd 포커스 복원 회피)
- 인근 지하철역: 호선 컬러 뱃지 칩(최신 좌측), 검색 결과/없음 상태,
  추가하기 버튼 줄 분리
- 문의처: 전화번호/이메일 형식 검증, 편의시설: 디자인 원본 아이콘 6종
  에셋 추가 + 체크 시 수량 인풋 활성화
- 저장하기는 boolti-ui primary 버튼 (지하철역 PUT만 동작)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
체크박스 2개(상호배타) 방식을 옵션 라벨에 노출 문구를 포함한 단일
Select로 교체한다. 기본값은 '알 수 없음 (문구 미노출)'.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 정보/대관 수정, 삭제, 노출 전환, 이미지 업로드 mutation 추가
- 상세 응답에 images[] 추가, 허위 필드 floor·rentalFeeDescription 제거
- 데이터 연결 아이템/생성 응답에 posterImageUrl·externalLink 추가
- manual 요청에 posterImageUrl(필수)·externalLink 추가
- 대관 수정용 dayType enum 및 update 요청 타입 추가

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
manual API가 posterImageUrl(필수)을 요구하도록 변경되어, 선택한 포스터를
(없으면 기본 포스터 에셋을) 업로드한 뒤 externalLink와 함께 전송한다.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 정보 탭: PUT /concert-halls/{id} 연결, 대표/갤러리 이미지 업로드 후
  URL 치환, 전화번호·이메일 검증, 지하철역과 함께 저장
- 대관 탭: PUT /concert-halls/{id}/rental 연결, 요일 분류를 API enum으로
  전환, 유효 행만 전송, 기본 대관료 isDefault 무결성 보장
- 대관료/추가요금/유료옵션은 상세 조회 미반환이라 안내 Alert 유지

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
공연장은 항상 노출 상태여야 하므로 생성 직후 visibility를 true로 전환한다.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
비반응형 인증 가드로 인해 로그인 후 SPA 네비게이션이 즉시 반영되지 않던
문제를 하드 리다이렉트로 해결하고, 로그인 요청 중 버튼에 스피너와
'로그인 중...' 라벨을 표시한다.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- GET /concert-halls/{id} 응답에서 대관 전용 필드 제거 (정보만 반환)
- GET /concert-halls/{id}/rental 신규: rentalFees/additionalFees/
  paidOptions 구조화 배열 포함한 SuperAdminConcertHallRentalResponse 타입과
  useSuperAdminConcertHallRental 쿼리 훅 추가
- 스펙에 없는 rentalTimeDescription 필드 제거

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
useSuperAdminConcertHallRental로 데이터 소스를 교체하고, 대관료·시간당
추가 요금·유료 옵션을 응답값으로 폼에 복원한다(기본 대관료 isDefault 반영).
상세 조회가 구조화 배열을 반환하므로 비대칭 안내 Alert 제거.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
CI를 막던 기존 lint 에러를 수정한다 (develop에 직접 들어간 커밋 3a6b12f
유래, 본 PR 범위 밖이나 CI 통과를 위해 포함).
- StubTextField: 의도적 미사용 구조분해에 eslint-disable 주석 추가
- profileQuery 에러 로깅: no-console 규칙 미설정으로 불필요한
  eslint-disable 디렉티브 제거

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@hexdrinker hexdrinker merged commit b885136 into develop Jun 22, 2026
1 check passed
@hexdrinker hexdrinker deleted the feat/super-admin-concert-hall branch June 22, 2026 10:11
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