55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
import {
|
|
Entity,
|
|
PrimaryColumn,
|
|
Column,
|
|
Index,
|
|
Unique,
|
|
ManyToOne,
|
|
JoinColumn,
|
|
} from 'typeorm';
|
|
import { ChallengeEntity } from './challenge.entity';
|
|
import { UserEntity } from './user.entity';
|
|
|
|
@Entity('solve')
|
|
@Unique('uq_solve_challenge_user', ['challengeId', 'userId'])
|
|
@Index('idx_solve_user', ['userId'])
|
|
@Index('idx_solve_challenge', ['challengeId'])
|
|
export class SolveEntity {
|
|
@PrimaryColumn('text')
|
|
id!: string;
|
|
|
|
@Column('text', { name: 'challenge_id' })
|
|
challengeId!: string;
|
|
|
|
@ManyToOne(() => ChallengeEntity, { onDelete: 'CASCADE' })
|
|
@JoinColumn({ name: 'challenge_id' })
|
|
challenge?: ChallengeEntity;
|
|
|
|
@Column('text', { name: 'user_id' })
|
|
userId!: string;
|
|
|
|
@ManyToOne(() => UserEntity, { onDelete: 'CASCADE' })
|
|
@JoinColumn({ name: 'user_id' })
|
|
user?: UserEntity;
|
|
|
|
@Column('text', { name: 'solved_at' })
|
|
solvedAt!: string;
|
|
|
|
@Column('integer', { name: 'points_awarded', default: 0 })
|
|
pointsAwarded!: number;
|
|
|
|
@Column('integer', { name: 'base_points', default: 0 })
|
|
basePoints!: number;
|
|
|
|
@Column('integer', { name: 'rank_bonus', default: 0 })
|
|
rankBonus!: number;
|
|
|
|
@Column('integer', { name: 'is_first', default: 0 })
|
|
isFirst!: boolean;
|
|
|
|
@Column('integer', { name: 'is_second', default: 0 })
|
|
isSecond!: boolean;
|
|
|
|
@Column('integer', { name: 'is_third', default: 0 })
|
|
isThird!: boolean;
|
|
} |