diff --git a/develop/database/sql/event-service-ddl.sql b/develop/database/sql/event-service-ddl.sql index e2c0ae2..7081213 100644 --- a/develop/database/sql/event-service-ddl.sql +++ b/develop/database/sql/event-service-ddl.sql @@ -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) diff --git a/event-service/src/main/java/com/kt/event/eventservice/domain/entity/Event.java b/event-service/src/main/java/com/kt/event/eventservice/domain/entity/Event.java index ecf592f..f205540 100644 --- a/event-service/src/main/java/com/kt/event/eventservice/domain/entity/Event.java +++ b/event-service/src/main/java/com/kt/event/eventservice/domain/entity/Event.java @@ -43,7 +43,7 @@ public class Event extends BaseTimeEntity { @Column(name = "store_id", nullable = false, columnDefinition = "uuid") private UUID storeId; - @Column(name = "event_name", nullable = false, length = 200) + @Column(name = "event_name", length = 200) private String eventName; @Column(name = "description", columnDefinition = "TEXT") @@ -52,10 +52,10 @@ public class Event extends BaseTimeEntity { @Column(name = "objective", nullable = false, length = 100) private String objective; - @Column(name = "start_date", nullable = false) + @Column(name = "start_date") private LocalDate startDate; - @Column(name = "end_date", nullable = false) + @Column(name = "end_date") private LocalDate endDate; @Enumerated(EnumType.STRING) @@ -147,6 +147,15 @@ public class Event extends BaseTimeEntity { } // 필수 데이터 검증 + if (eventName == null || eventName.trim().isEmpty()) { + throw new IllegalStateException("이벤트명을 입력해야 합니다."); + } + if (startDate == null || endDate == null) { + throw new IllegalStateException("이벤트 기간을 설정해야 합니다."); + } + if (startDate.isAfter(endDate)) { + throw new IllegalStateException("시작일은 종료일보다 이전이어야 합니다."); + } if (selectedImageId == null) { throw new IllegalStateException("이미지를 선택해야 합니다."); }