feat(super-admin): 공연장 관리 기능 구현 (Sprint 6)#432
Merged
Conversation
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
개요
슈퍼 어드민에 공연장 관리 기능을 신규 구현합니다. Figma(Boolti Vol.2 / Sprint 6)와 dev Swagger(슈퍼 어드민 공연장 API)를 기준으로 작업했습니다.
주요 작업
홈 / 목록
?tab=쿼리파람)공연장 상세 (사이드 내비 3탭)
/concert-hall/:hallId/{info,rental,data}라우팅 + 전용 사이드 내비PUT /concert-halls/{id}+ 지하철역 저장PUT·GET /concert-halls/{id}/rental연동API 레이어 (@boolti/api)
기타 수정
검증
yarn type-check,yarn lint(super-admin + @boolti/api) 통과남은 항목 / 참고
DELETE /concert-halls/{id}(공연장 삭제)는 디자인상 UI가 없어 미연결 (훅만 준비)🤖 Generated with Claude Code