more seeds
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user