/** * SaveRatingUseCase * * Saves a driver's rating to the repository. */ import { RatingRepository } from '../../ports/RatingRepository'; import { Rating } from '../../domain/Rating'; import { RatingComponents } from '../../domain/RatingComponents'; import { DriverId } from '../../../racing/domain/entities/DriverId'; import { RaceId } from '../../../racing/domain/entities/RaceId'; export interface SaveRatingUseCasePorts { ratingRepository: RatingRepository; } export interface SaveRatingRequest { driverId: string; raceId: string; rating: number; components: RatingComponents; } export class SaveRatingUseCase { constructor(private readonly ports: SaveRatingUseCasePorts) {} async execute(request: SaveRatingRequest): Promise { const { ratingRepository } = this.ports; const { driverId, raceId, rating, components } = request; try { const ratingEntity = Rating.create({ driverId: DriverId.create(driverId), raceId: RaceId.create(raceId), rating, components, timestamp: new Date(), }); await ratingRepository.save(ratingEntity); } catch (error) { throw new Error(`Failed to save rating: ${error}`); } } }