Fixed amount calculations
This commit is contained in:
		@@ -29,10 +29,17 @@ export class DistanceDonation extends Donation {
 | 
			
		||||
   * The exact implementation may differ for each type of donation.
 | 
			
		||||
   */
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  public get amount(): number {
 | 
			
		||||
  public get amount() {
 | 
			
		||||
    return this.getAmount();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * The function that calculates the amount based on the runner object's distance.
 | 
			
		||||
   */
 | 
			
		||||
  public async getAmount(): Promise<number> {
 | 
			
		||||
    let calculatedAmount = -1;
 | 
			
		||||
    try {
 | 
			
		||||
      calculatedAmount = this.amountPerDistance * this.runner.distance;
 | 
			
		||||
      calculatedAmount = this.amountPerDistance * await this.runner.distance();
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
      throw error;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,9 @@
 | 
			
		||||
import { PrimaryGeneratedColumn, Column, ManyToOne, Entity, TableInheritance } from "typeorm";
 | 
			
		||||
import {
 | 
			
		||||
  IsInt,
 | 
			
		||||
  IsNotEmpty,
 | 
			
		||||
  IsOptional,
 | 
			
		||||
  IsPositive,
 | 
			
		||||
  IsOptional
 | 
			
		||||
} from "class-validator";
 | 
			
		||||
import { Entity, ManyToOne, PrimaryGeneratedColumn, TableInheritance } from "typeorm";
 | 
			
		||||
import { Participant } from "./Participant";
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -32,5 +31,5 @@ export abstract class Donation {
 | 
			
		||||
   * The donation's amount in cents (or whatever your currency's smallest unit is.).
 | 
			
		||||
   * The exact implementation may differ for each type of donation.
 | 
			
		||||
   */
 | 
			
		||||
  abstract amount: number;
 | 
			
		||||
  abstract amount: number | Promise<number>;
 | 
			
		||||
}
 | 
			
		||||
@@ -54,7 +54,7 @@ export class Runner extends Participant {
 | 
			
		||||
   * Returns the total distance ran by this runner.
 | 
			
		||||
  */
 | 
			
		||||
  @IsInt()
 | 
			
		||||
  public get distance(): number {
 | 
			
		||||
    return 0;
 | 
			
		||||
  public async distance(): Promise<number> {
 | 
			
		||||
    return await (await this.getValidScans()).reduce((sum, current) => sum + current.distance, 0);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -26,7 +26,7 @@ export class ResponseRunner extends ResponseParticipant {
 | 
			
		||||
 | 
			
		||||
    public constructor(runner: Runner) {
 | 
			
		||||
        super(runner);
 | 
			
		||||
        this.distance = runner.scans.reduce((sum, current) => sum + current.distance, 0);
 | 
			
		||||
        this.distance = runner.scans.filter(scan => { scan.valid === true }).reduce((sum, current) => sum + current.distance, 0);
 | 
			
		||||
        this.group = runner.group;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user