BoostUpSchemePolicy
•
소스
export enum BoostUpResultType {
WIN = 'win', // 성공
MISS = 'miss', // 실패
JACKPOT = 'jackpot', // 잭팟!
}
TypeScript
복사
import {
Column,
CreateDateColumn,
Entity,
JoinColumn,
ManyToOne,
PrimaryGeneratedColumn,
RelationId,
UpdateDateColumn,
} from 'typeorm';
import BoostUpPolicyEntity from './BoostUpPolicyEntity';
import { BoostUpResultType } from '@chai/chai-commons';
@Entity('boost_up_scheme_policy')
export default class BoostUpSchemePolicyEntity {
@PrimaryGeneratedColumn()
id: number;
@Column({ type: 'varchar', enum: BoostUpResultType })
result: BoostUpResultType;
@Column({ comment: '강화 성공 레벨', default: 1 })
level: number;
@Column({ comment: '확률', type: 'double precision' })
probability: number;
@Column({ comment: '추가 캐시백 금액 (최소)' })
cashbackAmountMin: number;
@Column({ comment: '추가 캐시백 금액 (최대)' })
cashbackAmountMax: number;
@Column({ comment: '추가 캐시백 금액 단위', default: 0 })
cashbackAmountUnit: number;
@Column({ comment: '추가 할인률' })
discountRate: number;
@Column()
@RelationId((entity: BoostUpSchemePolicyEntity) => entity.boostUpPolicy)
boostUpPolicyId: number;
@ManyToOne(() => BoostUpPolicyEntity, boostUpPolicy => boostUpPolicy.boostUpSchemePolicies, {
createForeignKeyConstraints: false,
})
@JoinColumn({ name: 'boost_up_policy_id' })
boostUpPolicy: BoostUpPolicyEntity;
@CreateDateColumn()
createdAt: Date;
@UpdateDateColumn()
updatedAt: Date;
}
TypeScript
복사
엔티티 정의
•
부스트 강화 스킴 정책
•
강화 정책과의 차이
◦
부스트 강화 정책: 강화 결과를 제외한 모든 강화에 대한 정보를 담고 있음
◦
부스트 강화 스킴 정책: 강화 결과에 대한 정보를 담고 있음
•
강화 세상에서는 편의를 위해 부스트 강화 정책 → policy, 부스트 강화 스킴 정책 → scheme으로 부른다.
필드
•
result: 강화 결과
◦
win(성공), miss(실패), jackpot(잭팟) 3가지 결과가 존재한다.
•
level: 강화 성공 레벨
◦
성공의 정도를 구분하기 위해 존재하는 필드
◦
실패, 잭팟에서는 기본값 1로 설정해둔다. (실패, 잭팟에서는 의미가 없는값임)
◦
강화 성공 레벨에 따라 차이크루에게 보여지는 애니메이션이 달라질 듯..?
•
probability: 확률
◦
강화 결과가 발생할 확률
•
cashbackAmountMin, cashbackAmountMax: 추가 캐시백 금액 (최소, 최대)
◦
유저가 강화에 성공했을 때 캐시백 금액을 랜덤하게 주자!라는 요구사항이 있어서
지급할 수 있는 캐시백 금액의 범위를 나타내기 위해 존재하는 필드들이다.
•
cashbackAmountUnit: 추가 캐시백 금액 단위
◦
유저에게 캐시백 금액을 1원 단위로 주기 싫어서 만든 필드다.
◦
cashbackAmountMin = 10, cashbackAmountMax = 40인 경우,
10 ~ 40 사이의 값을 유저가 받게 되는데,
이때 최소 10원 단위 금액을 주고 싶으면 cashbackAmountUnit = 10으로 설정하면 된다.
◦
정리하면, cashbackAmountMin ~ cashbackAmountMax 사이의 값 중 cashbackAmountUnit의 배수 값들만 뽑아서 얘네들끼리 랜덤 돌리고 유저에게 지급한다.
•
discountRate: 추가 할인율
◦
유저가 강화에 성공했을 때 캐시백 금액은 랜덤하게 주지만, 할인율은 고정값이 올라간다(정률 할인 강화에서).
•
boostUpPolicyId, boostUpPolicy: 스킴에 묶인 강화 정책
•
createdAt: 해당 스킴이 생성된 Date
•
updatedAt: 해당 스킴이 업뎃된 Date
정률 할인과 정액 할인의 Scheme 값 차이