•
소스
export enum BoostUpResultType {
WIN = 'win',
MISS = 'miss',
JACKPOT = 'jackpot',
}
export enum BoostUpMomentType {
BEFORE_BUY_BOOST = 'before_buy_boost',
AFTER_BUY_BOOST = 'after_buy_boost',
MANUAL_USE_BOOST = 'manual_use_boost',
}
export enum BoostUpStatus {
ENABLED = 'enabled',
DISABLED = 'disabled',
}
TypeScript
복사
import {
Column,
CreateDateColumn,
Entity,
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
RelationId,
UpdateDateColumn,
} from 'typeorm';
import UserEntity from '../../UserEntity';
import { BoostUpMomentType, BoostUpResultType, BoostUpStatus } from '@chai/chai-commons';
import BoostEntity from '../../BoostEntity';
import BoostCampaignEntity from './BoostCampaignEntity';
import BoostUpPolicyEntity from './BoostUpPolicyEntity';
@Entity('boost_up')
export default class BoostUpEntity {
@PrimaryGeneratedColumn()
id: number;
@Column({ type: 'varchar', enum: BoostUpResultType, comment: '강화 결과' })
resultType: BoostUpResultType;
@Column({ comment: '강화 성공 레벨' })
level: number;
@Column({ type: 'varchar', enum: BoostUpMomentType, comment: '강화 적용 위치' })
boostUpMoment: BoostUpMomentType;
@Column({ comment: '강화에 소모한 번개' })
boltPrice: number;
@Column({ comment: '추가로 얻은 캐시백' })
cashbackAmount: number;
@Column({ comment: '추가로 얻은 할인율' })
discountRate: number;
@Column({ type: 'varchar', enum: BoostUpStatus })
status: BoostUpStatus;
@Column()
@RelationId((entity: BoostUpEntity) => entity.boostCampaign)
boostCampaignId: number;
@ManyToOne(() => BoostCampaignEntity, { createForeignKeyConstraints: false })
@JoinColumn({ name: 'boost_campaign_id' })
boostCampaign: BoostCampaignEntity;
@Column({ comment: 'boost.id', nullable: true })
@RelationId((entity: BoostUpEntity) => entity.boost)
boostId: number;
@ManyToOne(() => BoostEntity, { createForeignKeyConstraints: false })
@JoinColumn({ name: 'boost_id' })
boost: BoostEntity;
@Column()
@RelationId((entity: BoostUpEntity) => entity.user)
userId: string;
@ManyToOne(() => UserEntity, { createForeignKeyConstraints: false })
@JoinColumn({ name: 'user_id' })
user: UserEntity;
@Column()
@RelationId((entity: BoostUpEntity) => entity.boostUpPolicy)
boostUpPolicyId: number;
@ManyToOne(() => BoostUpPolicyEntity, { createForeignKeyConstraints: false })
@JoinColumn({ name: 'boost_up_policy_id' })
boostUpPolicy: BoostUpPolicyEntity;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}
TypeScript
복사
엔티티 정의
•
유저의 부스트 강화 내역
•
유저가 부스트 강화를 할 때마다 DB의 BoostUp 테이블에 row가 생긴다.
필드
•
resultType: 강화 결과
◦
win, miss, jackpot 중 하나
•
level: 강화 성공 레벨
◦
몇단계 win인지를 나타냄
◦
miss, jackpot은 기본값 1이 설정된다.
•
boostUpMoment: 유저가 해당 강화를 시도한 시점
◦
구매전, 구매후, 후적용 중 하나
•
boltPrice: 유저가 해당 강화에 소모한 번개 개수
•
cashbackAmount: 유저가 해당 강화를 통해 받은 추가 캐시백 금액
•
discountRate: 유저가 해당 강화를 통해 받은 추가 할인율
•
status: 강화 상태
◦
enabled: 결제에 사용할 수 있는 상태
◦
disabled: 결제에 사용할 수 없는 상태
•
boostCampaignId, boostCampaign: 해당 강화에 묶인 캠페인
•
boostId, boost: 해당 강화에 묶인 부스트
◦
부스트 구매전 강화의 경우 이 값의 필드가 없다(null이다). 따라서 부스트 구매하고 이 값을 update 쳐야 한다.
•
userId, user: 해당 강화에 묶인 유저
•
boostUpPolicyId, boostUpPolicy: 해당 강화에 묶인 강화 정책
•
createdAt: 유저가 강화를 시도한 Date
•
updatedAt: 강화 Row가 업데이트된 Date