import { IsBoolean, IsInt } from "class-validator"; import { ChildEntity, Column, OneToMany } from "typeorm"; import { ResponseDonor } from '../responses/ResponseDonor'; import { Donation } from './Donation'; import { Participant } from "./Participant"; /** * Defines the Donor entity. */ @ChildEntity() export class Donor extends Participant { /** * Does this donor need a receipt? * Will later be used to automaticly generate donation receipts. */ @Column() @IsBoolean() receiptNeeded: boolean = false; /** * Used to link the participant as the donor of a donation. * Attention: Only runner's can be associated as a distanceDonations distance source. */ @OneToMany(() => Donation, donation => donation.donor, { nullable: true }) donations: Donation[]; /** * Returns the total donations of a donor based on his linked donations. */ @IsInt() public get donationAmount(): number { if (!this.donations) { return 0; } return this.donations.reduce((sum, current) => sum + current.amount, 0); } /** * Turns this entity into it's response class. */ public toResponse(): ResponseDonor { return new ResponseDonor(this); } }