71 lines
1.4 KiB
TypeScript
71 lines
1.4 KiB
TypeScript
import {
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
Column,
|
|
CreateDateColumn,
|
|
UpdateDateColumn,
|
|
ManyToOne,
|
|
JoinColumn,
|
|
} from 'typeorm';
|
|
import { Referral } from './referral.entity';
|
|
|
|
export enum RewardType {
|
|
FREE_MONTH = 'free_month',
|
|
DISCOUNT = 'discount',
|
|
}
|
|
|
|
export enum RewardStatus {
|
|
AVAILABLE = 'available',
|
|
USED = 'used',
|
|
EXPIRED = 'expired',
|
|
}
|
|
|
|
@Entity({ schema: 'subscriptions', name: 'referral_rewards' })
|
|
export class ReferralReward {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@Column({ name: 'tenant_id' })
|
|
tenantId: string;
|
|
|
|
@Column({ name: 'referral_id' })
|
|
referralId: string;
|
|
|
|
@Column({
|
|
type: 'varchar',
|
|
length: 20,
|
|
default: RewardType.FREE_MONTH,
|
|
})
|
|
type: RewardType;
|
|
|
|
@Column({ name: 'months_earned', default: 0 })
|
|
monthsEarned: number;
|
|
|
|
@Column({ name: 'months_used', default: 0 })
|
|
monthsUsed: number;
|
|
|
|
@Column({ name: 'discount_percent', default: 0 })
|
|
discountPercent: number;
|
|
|
|
@Column({ name: 'expires_at', type: 'timestamptz', nullable: true })
|
|
expiresAt: Date;
|
|
|
|
@Column({
|
|
type: 'varchar',
|
|
length: 20,
|
|
default: RewardStatus.AVAILABLE,
|
|
})
|
|
status: RewardStatus;
|
|
|
|
@CreateDateColumn({ name: 'created_at' })
|
|
createdAt: Date;
|
|
|
|
@UpdateDateColumn({ name: 'updated_at' })
|
|
updatedAt: Date;
|
|
|
|
// Relations
|
|
@ManyToOne(() => Referral)
|
|
@JoinColumn({ name: 'referral_id' })
|
|
referral: Referral;
|
|
}
|