Event Service 엔티티와 DDL 형상 일치화 작업

Critical 및 High 우선순위 이슈 수정:

1. Event 엔티티 nullable 필드 변경
   - eventName: nullable로 변경 (AI 추천 후 설정)
   - startDate, endDate: nullable로 변경 (AI 추천 후 설정)

2. Event.publish() 검증 로직 강화
   - eventName 필수 검증 추가
   - startDate, endDate 필수 검증 추가
   - 기간 유효성 검증 추가 (시작일 <= 종료일)

3. DDL 스키마 수정
   - event_name NOT NULL 제거
   - start_date, end_date NOT NULL 제거
   - chk_event_period 제약조건 수정 (NULL 허용)

4. jobs 테이블 외래키 추가
   - event_id에 대한 외래키 제약조건 추가
   - ON DELETE CASCADE 설정으로 데이터 무결성 보장

영향:
- 이벤트 생성 시 eventName, startDate, endDate를 NULL로 허용
- 배포(publish) 시점에 필수 필드 검증으로 데이터 무결성 보장
- 이벤트 삭제 시 관련 Job 자동 삭제로 고아 레코드 방지

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
merrycoral
2025-10-24 13:22:14 +09:00
parent 7b76e573ed
commit c63cf950eb
2 changed files with 18 additions and 7 deletions
+6 -4
View File
@@ -22,11 +22,11 @@ CREATE TABLE IF NOT EXISTS events (
event_id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id UUID NOT NULL,
store_id UUID NOT NULL,
event_name VARCHAR(200) NOT NULL,
event_name VARCHAR(200),
description TEXT,
objective VARCHAR(100) NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
start_date DATE,
end_date DATE,
status VARCHAR(20) NOT NULL DEFAULT 'DRAFT',
selected_image_id UUID,
selected_image_url VARCHAR(500),
@@ -34,7 +34,7 @@ CREATE TABLE IF NOT EXISTS events (
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- 제약조건
CONSTRAINT chk_event_period CHECK (start_date <= end_date),
CONSTRAINT chk_event_period CHECK (start_date IS NULL OR end_date IS NULL OR start_date <= end_date),
CONSTRAINT chk_event_status CHECK (status IN ('DRAFT', 'PUBLISHED', 'ENDED'))
);
@@ -185,6 +185,8 @@ CREATE TABLE IF NOT EXISTS jobs (
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- 제약조건
CONSTRAINT fk_jobs_event FOREIGN KEY (event_id)
REFERENCES events(event_id) ON DELETE CASCADE,
CONSTRAINT chk_job_type CHECK (job_type IN ('AI_RECOMMENDATION', 'IMAGE_GENERATION')),
CONSTRAINT chk_job_status CHECK (status IN ('PENDING', 'PROCESSING', 'COMPLETED', 'FAILED')),
CONSTRAINT chk_job_progress CHECK (progress >= 0 AND progress <= 100)