Files
sodalive-backend-spring-boot/docs/plan-task/20260518_charge_event_job_ddl.sql

38 lines
3.0 KiB
SQL

CREATE TABLE charge_event_job
(
id BIGINT NOT NULL AUTO_INCREMENT COMMENT 'PK',
source_charge_id BIGINT NOT NULL COMMENT '이벤트 보너스 지급의 기준이 되는 원본 충전 ID(charge.id)',
result_charge_id BIGINT NULL COMMENT '이벤트 보너스로 생성된 Charge ID(charge.id)',
member_id BIGINT NOT NULL COMMENT '이벤트 보너스를 지급받을 회원 ID(member.id)',
charge_event_id BIGINT NULL COMMENT '적용된 충전 이벤트 ID(charge_event.id), 첫 충전 이벤트처럼 별도 이벤트 row가 없으면 NULL',
job_type VARCHAR(30) NOT NULL COMMENT '작업 유형(FIRST_CHARGE, ACTIVE_CHARGE_EVENT)',
idempotency_key VARCHAR(100) NOT NULL COMMENT '중복 작업 방지 키(예: charge-event:{sourceChargeId}:{jobType}:{chargeEventId 또는 none})',
additional_can INT NOT NULL COMMENT '추가 지급할 보너스 캔 수',
payment_gateway VARCHAR(30) NOT NULL COMMENT '원본 충전의 결제 게이트웨이(PG, PAYVERSE, GOOGLE_IAP, APPLE_IAP 등)',
container VARCHAR(10) NOT NULL COMMENT '회원 캔 잔액 반영 대상(pg, aos, ios)',
method_snapshot VARCHAR(100) NOT NULL COMMENT '이벤트 보너스 Charge.payment.method에 기록할 지급 사유 스냅샷',
status VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '작업 상태(PENDING, PROCESSING, DONE, FAILED)',
retry_count INT NOT NULL DEFAULT 0 COMMENT '재시도 횟수',
next_retry_at TIMESTAMP NULL COMMENT '다음 재시도 가능 시각',
processing_started_at TIMESTAMP NULL COMMENT 'PROCESSING 상태로 선점한 시각',
processed_at TIMESTAMP NULL COMMENT '지급 성공 처리 시각',
last_error TEXT NULL COMMENT '마지막 실패 사유',
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성 시각',
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '수정 시각',
PRIMARY KEY (id),
UNIQUE KEY uk_charge_event_job_idempotency_key (idempotency_key),
KEY idx_charge_event_job_status_next_retry_at (status, next_retry_at),
KEY idx_charge_event_job_source_charge_id (source_charge_id),
KEY idx_charge_event_job_result_charge_id (result_charge_id),
KEY idx_charge_event_job_member_id (member_id),
KEY idx_charge_event_job_charge_event_id (charge_event_id),
CONSTRAINT fk_charge_event_job_source_charge_id
FOREIGN KEY (source_charge_id) REFERENCES charge (id),
CONSTRAINT fk_charge_event_job_result_charge_id
FOREIGN KEY (result_charge_id) REFERENCES charge (id),
CONSTRAINT fk_charge_event_job_member_id
FOREIGN KEY (member_id) REFERENCES member (id),
CONSTRAINT fk_charge_event_job_charge_event_id
FOREIGN KEY (charge_event_id) REFERENCES charge_event (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='충전 이벤트 보너스 지급 작업';