Files
gridpilot.gg/core/rating/domain/Rating.ts
Marc Mintel afef777961
Some checks failed
CI / lint-typecheck (pull_request) Failing after 12s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped
code quality
2026-01-26 02:27:37 +01:00

64 lines
1.3 KiB
TypeScript

/**
* 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(),
};
}
}