38 lines
3.0 KiB
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='충전 이벤트 보너스 지급 작업';
|