fix seeds
This commit is contained in:
@@ -1,92 +1,72 @@
|
||||
import { Driver } from '@core/racing/domain/entities/Driver';
|
||||
import { League } from '@core/racing/domain/entities/League';
|
||||
import { Team } from '@core/racing/domain/entities/Team';
|
||||
import type { TeamMembership } from '@core/racing/domain/types/TeamMembership';
|
||||
import { faker } from '@faker-js/faker';
|
||||
|
||||
export class RacingTeamFactory {
|
||||
constructor(private readonly baseDate: Date) {}
|
||||
constructor(
|
||||
private readonly baseDate: Date,
|
||||
private readonly drivers: Driver[],
|
||||
private readonly leagues: League[],
|
||||
) {}
|
||||
|
||||
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),
|
||||
}),
|
||||
];
|
||||
const teamCount = 15;
|
||||
|
||||
return Array.from({ length: teamCount }, (_, idx) => {
|
||||
const i = idx + 1;
|
||||
const owner = faker.helpers.arrayElement(this.drivers);
|
||||
const teamLeagues = faker.helpers.arrayElements(
|
||||
this.leagues.map(l => l.id.toString()),
|
||||
{ min: 0, max: 3 }
|
||||
);
|
||||
|
||||
return Team.create({
|
||||
id: `team-${i}`,
|
||||
name: faker.company.name() + ' Racing',
|
||||
tag: faker.string.alpha({ length: 4, casing: 'upper' }),
|
||||
description: faker.lorem.sentences(2),
|
||||
ownerId: owner.id,
|
||||
leagues: teamLeagues,
|
||||
createdAt: faker.date.past({ years: 2, refDate: this.baseDate }),
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
createTeamMemberships(drivers: Driver[], teams: Team[]): TeamMembership[] {
|
||||
const memberships: TeamMembership[] = [];
|
||||
const usedDrivers = new Set<string>();
|
||||
|
||||
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');
|
||||
teams.forEach((team) => {
|
||||
const availableDrivers = drivers.filter(d => !usedDrivers.has(d.id.toString()) && d.id.toString() !== team.ownerId.toString());
|
||||
const memberCount = faker.number.int({ min: 1, max: 8 });
|
||||
const members = faker.helpers.arrayElements(availableDrivers, memberCount);
|
||||
|
||||
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),
|
||||
});
|
||||
// Add owner
|
||||
memberships.push({
|
||||
teamId: team.id.toString(),
|
||||
driverId: team.ownerId.toString(),
|
||||
role: 'owner',
|
||||
status: 'active',
|
||||
joinedAt: faker.date.past({ years: 1, refDate: team.createdAt.toDate() }),
|
||||
});
|
||||
}
|
||||
usedDrivers.add(team.ownerId.toString());
|
||||
|
||||
if (team2) {
|
||||
const members = drivers.slice(6, 12);
|
||||
members.forEach((d) => {
|
||||
// Add members
|
||||
members.forEach((driver) => {
|
||||
memberships.push({
|
||||
teamId: team2.id,
|
||||
driverId: d.id,
|
||||
role: d.id === team2.ownerId.toString() ? 'owner' : 'driver',
|
||||
teamId: team.id.toString(),
|
||||
driverId: driver.id.toString(),
|
||||
role: faker.helpers.arrayElement(['driver', 'manager']),
|
||||
status: 'active',
|
||||
joinedAt: this.addDays(this.baseDate, -45),
|
||||
joinedAt: faker.date.past({ years: 1, refDate: team.createdAt.toDate() }),
|
||||
});
|
||||
usedDrivers.add(driver.id.toString());
|
||||
});
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user