- schedule_categories에 '행사' 카테고리(id=11) 시드, CATEGORY_IDS.EVENT 상수 추가
- event_venues / schedule_event 테이블 생성 (subtype, school_name, venue_id, post_urls, poster_image_ids)
- routes/admin/events.js 신설: multipart 기반 CRUD + 다중 포스터 업로드 + 카카오맵 venue upsert
- services/image.js에 uploadEventPoster 추가 (event/{scheduleId}/poster/...)
- 공개 /schedules 서비스의 SCHEDULE_LIST_SQL / getScheduleDetail에 행사 JOIN 및 응답(subtype, schoolName, venue, posters, postUrls)
- buildSource에 EVENT 분기 추가 → source.name = 학교명
- Meilisearch 동기화: source_name에 school_name 포함, 부분 검색 대응을 위한 resolveSchoolNames 추가
- 프론트: form/index.jsx에 '행사' 분기, EventForm 컴포넌트 신설 (LocationSearchDialog 재사용, 다중 포스터/URL)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
29 lines
969 B
SQL
29 lines
969 B
SQL
-- 행사 장소 (카카오맵 기반)
|
|
CREATE TABLE IF NOT EXISTS event_venues (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
name VARCHAR(200) NOT NULL,
|
|
address VARCHAR(300),
|
|
road_address VARCHAR(300),
|
|
lat DECIMAL(10, 7),
|
|
lng DECIMAL(10, 7),
|
|
kakao_id VARCHAR(30),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_kakao_id (kakao_id)
|
|
);
|
|
|
|
-- 행사 상세 (schedules와 1:1)
|
|
-- subtype: 'university' (학교 축제) 등 세부 타입 slug
|
|
-- school_name: 학교 행사의 경우 대학/학교명
|
|
-- venue_id: 장소 FK (선택)
|
|
-- post_urls: 인스타/공식 URL 배열 (JSON)
|
|
CREATE TABLE IF NOT EXISTS schedule_event (
|
|
schedule_id INT PRIMARY KEY,
|
|
subtype VARCHAR(30) NOT NULL,
|
|
school_name VARCHAR(100),
|
|
venue_id INT,
|
|
post_urls JSON,
|
|
poster_image_ids JSON,
|
|
FOREIGN KEY (schedule_id) REFERENCES schedules(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (venue_id) REFERENCES event_venues(id) ON DELETE SET NULL,
|
|
INDEX idx_subtype (subtype)
|
|
);
|