import {
  IsInt,
  IsNotEmpty,
  IsObject
} from "class-validator";
import { Donor } from './Donor';

/**
 * Defines the Donation base calss.
 * A donation just associates a donor with a donation amount.
 * The specifics of the amoun's determination has to be implemented in child classes.
*/
export abstract class Donation {
  /**
   * Autogenerated unique id (primary key).
   */
  @IsInt()
  id: number;

  /**
   * The donations's donor.
   */
  @IsNotEmpty()
  @IsObject()
  donor: Donor;

  /**
   * The donation's amount in cents (or whatever your currency's smallest unit is.).
   * The exact implementation may differ for each type of donation.
   */
  public abstract get amount(): number;
}