import { IsInt, IsNotEmpty, IsObject, IsPositive } from "class-validator"; import { Donation } from "./Donation"; import { Runner } from "./Runner"; /** * Defines the DistanceDonation class. * For distanceDonations a donor pledges to donate a certain amount for each kilometer ran by a runner. */ export class DistanceDonation extends Donation { /** * The donation's associated runner. * Used as the source of the donation's distance. */ @IsObject() @IsNotEmpty() runner: Runner; /** * The donation's amount donated per distance. * The amount the donor set to be donated per kilometer that the runner ran. */ @IsInt() @IsPositive() amountPerDistance: number; /** * The donation's amount in cents (or whatever your currency's smallest unit is.). * Get's calculated from the runner's distance ran and the amount donated per kilometer. */ public get amount(): number { let calculatedAmount = 0; try { calculatedAmount = this.amountPerDistance * (this.runner.distance / 1000); } catch (error) { throw error; } return calculatedAmount; } }