This commit is contained in:
2025-12-04 18:05:46 +01:00
parent 88c6befc7c
commit 9fa21a488a
21 changed files with 1156 additions and 388 deletions

View File

@@ -11,6 +11,7 @@ import type {
MembershipRole,
MembershipStatus,
} from '@gridpilot/racing/domain/entities/LeagueMembership';
import { getDriverAvatar, getTeamLogo, getLeagueBanner, memberships as seedMemberships, leagues as seedLeagues } from '@gridpilot/testing-support';
export type { MembershipRole, MembershipStatus };
@@ -97,6 +98,69 @@ function generateId(prefix: string): string {
return `${prefix}-${idCounter++}`;
}
// Initialize league memberships from static seed data
(function initializeLeagueMembershipsFromSeed() {
if (leagueMemberships.size > 0) {
return;
}
const membershipsByLeague = new Map<string, LeagueMembership[]>();
// Create base active memberships from seed
for (const membership of seedMemberships) {
const list = membershipsByLeague.get(membership.leagueId) ?? [];
const joinedAt = new Date(2024, 0, 1 + (idCounter % 28)).toISOString();
list.push({
leagueId: membership.leagueId,
driverId: membership.driverId,
role: 'member',
status: 'active',
joinedAt,
});
membershipsByLeague.set(membership.leagueId, list);
}
// Ensure league owners are represented as owners in memberships
for (const league of seedLeagues) {
const list = membershipsByLeague.get(league.id) ?? [];
const existingOwnerMembership = list.find((m) => m.driverId === league.ownerId);
if (existingOwnerMembership) {
existingOwnerMembership.role = 'owner';
} else {
const joinedAt = new Date(2024, 0, 1 + (idCounter % 28)).toISOString();
list.unshift({
leagueId: league.id,
driverId: league.ownerId,
role: 'owner',
status: 'active',
joinedAt,
});
}
membershipsByLeague.set(league.id, list);
}
// Store into facade-local maps
for (const [leagueId, list] of membershipsByLeague.entries()) {
leagueMemberships.set(leagueId, list);
}
})();
export function getDriverAvatarUrl(driverId: string): string {
return getDriverAvatar(driverId);
}
export function getTeamLogoUrl(teamId: string): string {
return getTeamLogo(teamId);
}
export function getLeagueBannerUrl(leagueId: string): string {
return getLeagueBanner(leagueId);
}
/**
* League membership API
*/