seed data
This commit is contained in:
102
adapters/bootstrap/racing/RacingSeed.ts
Normal file
102
adapters/bootstrap/racing/RacingSeed.ts
Normal file
@@ -0,0 +1,102 @@
|
||||
import { Driver } from '@core/racing/domain/entities/Driver';
|
||||
import { League } from '@core/racing/domain/entities/League';
|
||||
import { LeagueMembership } from '@core/racing/domain/entities/LeagueMembership';
|
||||
import { Race } from '@core/racing/domain/entities/Race';
|
||||
import { RaceRegistration } from '@core/racing/domain/entities/RaceRegistration';
|
||||
import { Result as RaceResult } from '@core/racing/domain/entities/result/Result';
|
||||
import { Standing } from '@core/racing/domain/entities/Standing';
|
||||
import { Team } from '@core/racing/domain/entities/Team';
|
||||
import type { TeamMembership } from '@core/racing/domain/types/TeamMembership';
|
||||
import type { FeedItem } from '@core/social/domain/types/FeedItem';
|
||||
import { RacingDriverFactory } from './RacingDriverFactory';
|
||||
import { RacingFeedFactory } from './RacingFeedFactory';
|
||||
import { RacingFriendshipFactory } from './RacingFriendshipFactory';
|
||||
import { RacingLeagueFactory } from './RacingLeagueFactory';
|
||||
import { RacingMembershipFactory } from './RacingMembershipFactory';
|
||||
import { RacingRaceFactory } from './RacingRaceFactory';
|
||||
import { RacingResultFactory } from './RacingResultFactory';
|
||||
import { RacingStandingFactory } from './RacingStandingFactory';
|
||||
import { RacingTeamFactory } from './RacingTeamFactory';
|
||||
|
||||
export type Friendship = {
|
||||
driverId: string;
|
||||
friendId: string;
|
||||
};
|
||||
|
||||
export type RacingSeed = {
|
||||
drivers: Driver[];
|
||||
leagues: League[];
|
||||
races: Race[];
|
||||
results: RaceResult[];
|
||||
standings: Standing[];
|
||||
leagueMemberships: LeagueMembership[];
|
||||
raceRegistrations: RaceRegistration[];
|
||||
teams: Team[];
|
||||
teamMemberships: TeamMembership[];
|
||||
friendships: Friendship[];
|
||||
feedEvents: FeedItem[];
|
||||
};
|
||||
|
||||
export type RacingSeedOptions = {
|
||||
driverCount?: number;
|
||||
baseDate?: Date;
|
||||
};
|
||||
|
||||
export const racingSeedDefaults: Readonly<
|
||||
Required<RacingSeedOptions>
|
||||
> = {
|
||||
driverCount: 32,
|
||||
baseDate: new Date('2025-01-15T12:00:00.000Z'),
|
||||
};
|
||||
|
||||
class RacingSeedFactory {
|
||||
private readonly driverCount: number;
|
||||
private readonly baseDate: Date;
|
||||
|
||||
constructor(options: RacingSeedOptions) {
|
||||
this.driverCount = options.driverCount ?? racingSeedDefaults.driverCount;
|
||||
this.baseDate = options.baseDate ?? racingSeedDefaults.baseDate;
|
||||
}
|
||||
|
||||
create(): RacingSeed {
|
||||
const driverFactory = new RacingDriverFactory(this.driverCount, this.baseDate);
|
||||
const leagueFactory = new RacingLeagueFactory(this.baseDate);
|
||||
const raceFactory = new RacingRaceFactory(this.baseDate);
|
||||
const resultFactory = new RacingResultFactory();
|
||||
const standingFactory = new RacingStandingFactory();
|
||||
const membershipFactory = new RacingMembershipFactory(this.baseDate);
|
||||
const teamFactory = new RacingTeamFactory(this.baseDate);
|
||||
const friendshipFactory = new RacingFriendshipFactory();
|
||||
const feedFactory = new RacingFeedFactory(this.baseDate);
|
||||
|
||||
const drivers = driverFactory.create();
|
||||
const leagues = leagueFactory.create();
|
||||
const races = raceFactory.create(leagues);
|
||||
const results = resultFactory.create(drivers, races);
|
||||
const standings = standingFactory.create(leagues, races, results);
|
||||
const leagueMemberships = membershipFactory.createLeagueMemberships(drivers, leagues);
|
||||
const raceRegistrations = membershipFactory.createRaceRegistrations(races);
|
||||
const teams = teamFactory.createTeams();
|
||||
const teamMemberships = teamFactory.createTeamMemberships(drivers, teams);
|
||||
const friendships = friendshipFactory.create(drivers);
|
||||
const feedEvents = feedFactory.create(drivers, friendships, races, leagues);
|
||||
|
||||
return {
|
||||
drivers,
|
||||
leagues,
|
||||
races,
|
||||
results,
|
||||
standings,
|
||||
leagueMemberships,
|
||||
raceRegistrations,
|
||||
teams,
|
||||
teamMemberships,
|
||||
friendships,
|
||||
feedEvents,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export function createRacingSeed(options: RacingSeedOptions = {}): RacingSeed {
|
||||
return new RacingSeedFactory(options).create();
|
||||
}
|
||||
Reference in New Issue
Block a user