50 lines
1.5 KiB
TypeScript
50 lines
1.5 KiB
TypeScript
/**
|
|
* Media configuration for GridPilot website.
|
|
* Single source of truth for all media asset paths and URLs.
|
|
*
|
|
* Note: This config should be kept in sync with the shared MediaAssetConfig
|
|
* in adapters/bootstrap/MediaAssetConfig.ts
|
|
*/
|
|
|
|
export interface MediaConfig {
|
|
avatars: {
|
|
defaultFallback: string;
|
|
paths: {
|
|
male: string;
|
|
female: string;
|
|
neutral: string;
|
|
};
|
|
};
|
|
api: {
|
|
avatar: (driverId: string) => string;
|
|
teamLogo: (teamId: string) => string;
|
|
trackImage: (trackId: string) => string;
|
|
sponsorLogo: (sponsorId: string) => string;
|
|
categoryIcon: (categoryId: string) => string;
|
|
};
|
|
}
|
|
|
|
export const mediaConfig: MediaConfig = {
|
|
avatars: {
|
|
// Default fallback used when no avatar URL is available
|
|
defaultFallback: '/images/avatars/neutral-default-avatar.jpeg',
|
|
|
|
// Individual avatar type paths
|
|
paths: {
|
|
male: '/images/avatars/male-default-avatar.jpg',
|
|
female: '/images/avatars/female-default-avatar.jpeg',
|
|
neutral: '/images/avatars/neutral-default-avatar.jpeg',
|
|
},
|
|
},
|
|
|
|
api: {
|
|
// Direct media paths (no /api/ prefix) - served by website or API
|
|
avatar: (driverId: string) => `/media/avatar/${driverId}`,
|
|
teamLogo: (teamId: string) => `/media/teams/${teamId}/logo`,
|
|
trackImage: (trackId: string) => `/media/tracks/${trackId}/image`,
|
|
sponsorLogo: (sponsorId: string) => `/media/sponsors/${sponsorId}/logo`,
|
|
categoryIcon: (categoryId: string) => `/media/categories/${categoryId}/icon`,
|
|
},
|
|
} as const;
|
|
|
|
export type MediaConfigType = typeof mediaConfig; |