/** * Rating Entity * * Represents a driver's rating calculated after a race. */ import { DriverId } from '../../racing/domain/entities/DriverId'; import { RaceId } from '../../racing/domain/entities/RaceId'; import { RatingComponents } from './RatingComponents'; export interface RatingProps { driverId: DriverId; raceId: RaceId; rating: number; components: RatingComponents; timestamp: Date; } export interface RatingJSON { driverId: string; raceId: string; rating: number; components: RatingComponents; timestamp: string; } export class Rating { private constructor(private readonly props: RatingProps) {} static create(props: RatingProps): Rating { return new Rating(props); } get driverId(): DriverId { return this.props.driverId; } get raceId(): RaceId { return this.props.raceId; } get rating(): number { return this.props.rating; } get components(): RatingComponents { return this.props.components; } get timestamp(): Date { return this.props.timestamp; } toJSON(): RatingJSON { return { driverId: this.driverId.toString(), raceId: this.raceId.toString(), rating: this.rating, components: this.components, timestamp: this.timestamp.toISOString(), }; } }