92 lines
2.6 KiB
TypeScript
92 lines
2.6 KiB
TypeScript
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);
|
|
}
|
|
} |