import {Column, Entity} from "typeorm"; import AppBaseEntity from "../../../contracts/AppBaseEntity"; import AppDataSource from "../../dataSources/appDataSource"; @Entity() export default class UserEffect extends AppBaseEntity { constructor(name: string, userId: string, unused: number, WhenExpires?: Date) { super(); this.Name = name; this.UserId = userId; this.Unused = unused; this.WhenExpires = WhenExpires; } @Column() Name: string; @Column() UserId: string; @Column() Unused: number; @Column({ nullable: true }) WhenExpires?: Date; public AddUnused(amount: number) { this.Unused += amount; } public UseEffect(whenExpires: Date): boolean { if (this.Unused == 0) { return false; } this.Unused -= 1; this.WhenExpires = whenExpires; return true; } public IsEffectActive(): boolean { const now = new Date(); if (this.WhenExpires && now < this.WhenExpires) { return true; } return false; } public static async FetchOneByUserIdAndName(userId: string, name: string): Promise<UserEffect | null> { const repository = AppDataSource.getRepository(UserEffect); const single = await repository.findOne({ where: { UserId: userId, Name: name } }); return single; } }