fromis_9/backend/sql/schedule_event.sql
caadiq d9836d2f5d feat(schedule): 행사 카테고리 추가 (학교 행사)
- 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>
2026-04-23 09:04:42 +09:00

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)
);