import { Driver } from '@core/racing/domain/entities/Driver'; import { Team } from '@core/racing/domain/entities/Team'; import type { TeamMembership } from '@core/racing/domain/types/TeamMembership'; export class RacingTeamFactory { constructor(private readonly baseDate: Date) {} createTeams(): Team[] { return [ Team.create({ id: 'team-1', name: 'Apex Racing', tag: 'APEX', description: 'Demo team focused on clean racing.', ownerId: 'driver-1', leagues: ['league-5'], createdAt: this.addDays(this.baseDate, -100), }), Team.create({ id: 'team-2', name: 'Night Owls', tag: 'NITE', description: 'Late-night grinders and endurance lovers.', ownerId: 'driver-2', leagues: ['league-4'], createdAt: this.addDays(this.baseDate, -90), }), Team.create({ id: 'team-3', name: 'Club Legends', tag: 'CLUB', description: 'A casual team for ladder climbing.', ownerId: 'driver-3', leagues: ['league-3'], createdAt: this.addDays(this.baseDate, -80), }), ]; } createTeamMemberships(drivers: Driver[], teams: Team[]): TeamMembership[] { const memberships: TeamMembership[] = []; const team1 = teams.find((t) => t.id === 'team-1'); const team2 = teams.find((t) => t.id === 'team-2'); const team3 = teams.find((t) => t.id === 'team-3'); if (team1) { const members = drivers.slice(0, 6); members.forEach((d, idx) => { memberships.push({ teamId: team1.id, driverId: d.id, role: d.id === team1.ownerId.toString() ? 'owner' : idx === 1 ? 'manager' : 'driver', status: 'active', joinedAt: this.addDays(this.baseDate, -50), }); }); } if (team2) { const members = drivers.slice(6, 12); members.forEach((d) => { memberships.push({ teamId: team2.id, driverId: d.id, role: d.id === team2.ownerId.toString() ? 'owner' : 'driver', status: 'active', joinedAt: this.addDays(this.baseDate, -45), }); }); } if (team3) { const members = drivers.slice(12, 18); members.forEach((d) => { memberships.push({ teamId: team3.id, driverId: d.id, role: d.id === team3.ownerId.toString() ? 'owner' : 'driver', status: 'active', joinedAt: this.addDays(this.baseDate, -40), }); }); } return memberships; } private addDays(date: Date, days: number): Date { return new Date(date.getTime() + days * 24 * 60 * 60 * 1000); } }