more seeds

This commit is contained in:
2025-12-27 10:43:55 +01:00
parent 58d9a1c762
commit 91612e4256
16 changed files with 1713 additions and 72 deletions

View File

@@ -1,25 +1,21 @@
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 type { TeamJoinRequest, TeamMembership } from '@core/racing/domain/types/TeamMembership';
import { faker } from '@faker-js/faker';
export class RacingTeamFactory {
constructor(
private readonly baseDate: Date,
private readonly drivers: Driver[],
private readonly leagues: League[],
) {}
constructor(private readonly baseDate: Date) {}
createTeams(): Team[] {
createTeams(drivers: Driver[], leagues: League[]): Team[] {
const teamCount = 15;
return Array.from({ length: teamCount }, (_, idx) => {
const i = idx + 1;
const owner = faker.helpers.arrayElement(this.drivers);
const owner = faker.helpers.arrayElement(drivers);
const teamLeagues = faker.helpers.arrayElements(
this.leagues.map(l => l.id.toString()),
{ min: 0, max: 3 }
leagues.map((l) => l.id.toString()),
{ min: 0, max: 3 },
);
return Team.create({
@@ -111,4 +107,74 @@ export class RacingTeamFactory {
return memberships;
}
createTeamJoinRequests(
drivers: Driver[],
teams: Team[],
teamMemberships: TeamMembership[],
): TeamJoinRequest[] {
const membershipIds = new Set<string>(teamMemberships.map(m => `${m.teamId}:${m.driverId}`));
const requests: TeamJoinRequest[] = [];
const addRequest = (request: TeamJoinRequest): void => {
requests.push(request);
};
const team1 = teams[0];
if (team1) {
const candidateDriverIds = drivers
.map(d => d.id.toString())
.filter(driverId => !membershipIds.has(`${team1.id.toString()}:${driverId}`))
.slice(0, 8);
candidateDriverIds.forEach((driverId, idx) => {
addRequest({
id: `team-join-${team1.id.toString()}-${driverId}`,
teamId: team1.id.toString(),
driverId,
requestedAt: this.addDays(this.baseDate, -(5 + idx)),
...(idx % 3 === 0
? { message: 'Can I join as a substitute driver for endurance events?' }
: idx % 3 === 2
? { message: '' }
: {}),
});
});
// Conflict edge case: owner submits a join request to own team.
addRequest({
id: `team-join-${team1.id.toString()}-${team1.ownerId.toString()}-conflict`,
teamId: team1.id.toString(),
driverId: team1.ownerId.toString(),
requestedAt: this.addDays(this.baseDate, -1),
message: 'Testing edge case: owner submitted join request.',
});
}
const team3 = teams[2];
if (team3 && drivers[0]) {
const driverId = drivers[0].id.toString();
addRequest({
id: 'dup-team-join-req-1',
teamId: team3.id.toString(),
driverId,
requestedAt: this.addDays(this.baseDate, -10),
message: 'First request message (will be overwritten).',
});
addRequest({
id: 'dup-team-join-req-1',
teamId: team3.id.toString(),
driverId,
requestedAt: this.addDays(this.baseDate, -9),
message: 'Updated request message (duplicate id).',
});
}
return requests;
}
private addDays(date: Date, days: number): Date {
return new Date(date.getTime() + days * 24 * 60 * 60 * 1000);
}
}