website refactor

This commit is contained in:
2026-01-20 17:49:54 +01:00
parent 94aaaff704
commit b39b098e6b
18 changed files with 437 additions and 491 deletions

View File

@@ -86,14 +86,18 @@ export class MediaController {
@Res() res: Response,
): Promise<void> {
this.logger.debug('[MediaController] Generating team logo', { teamId });
const svg = this.mediaGenerationService.generateTeamLogo(teamId);
const svgLength = svg.length;
const url = this.mediaGenerationService.generateTeamLogo(teamId);
if (url.startsWith('http')) {
res.redirect(HttpStatus.FOUND, url);
return;
}
res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8');
res.setHeader('Cache-Control', 'public, max-age=86400');
res.status(HttpStatus.OK).send(svg);
res.status(HttpStatus.OK).send(url);
this.logger.info('[MediaController] Team logo generated', { teamId, svgLength });
this.logger.info('[MediaController] Team logo generated', { teamId });
}
@Public()
@@ -105,14 +109,18 @@ export class MediaController {
@Res() res: Response,
): Promise<void> {
this.logger.debug('[MediaController] Generating league logo', { leagueId });
const svg = this.mediaGenerationService.generateLeagueLogo(leagueId);
const svgLength = svg.length;
const url = this.mediaGenerationService.generateLeagueLogo(leagueId);
if (url.startsWith('http')) {
res.redirect(HttpStatus.FOUND, url);
return;
}
res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8');
res.setHeader('Cache-Control', 'public, max-age=86400');
res.status(HttpStatus.OK).send(svg);
res.status(HttpStatus.OK).send(url);
this.logger.info('[MediaController] League logo generated', { leagueId, svgLength });
this.logger.info('[MediaController] League logo generated', { leagueId });
}
@Public()
@@ -124,14 +132,18 @@ export class MediaController {
@Res() res: Response,
): Promise<void> {
this.logger.debug('[MediaController] Generating league cover', { leagueId });
const svg = this.mediaGenerationService.generateLeagueCover(leagueId);
const svgLength = svg.length;
const url = this.mediaGenerationService.generateLeagueCover(leagueId);
if (url.startsWith('http')) {
res.redirect(HttpStatus.FOUND, url);
return;
}
res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8');
res.setHeader('Cache-Control', 'public, max-age=86400');
res.status(HttpStatus.OK).send(svg);
res.status(HttpStatus.OK).send(url);
this.logger.info('[MediaController] League cover generated', { leagueId, svgLength });
this.logger.info('[MediaController] League cover generated', { leagueId });
}
@Public()
@@ -143,14 +155,18 @@ export class MediaController {
@Res() res: Response,
): Promise<void> {
this.logger.debug('[MediaController] Generating driver avatar', { driverId });
const svg = this.mediaGenerationService.generateDriverAvatar(driverId);
const svgLength = svg.length;
const url = this.mediaGenerationService.generateDriverAvatar(driverId);
if (url.startsWith('http')) {
res.redirect(HttpStatus.FOUND, url);
return;
}
res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8');
res.setHeader('Cache-Control', 'public, max-age=86400');
res.status(HttpStatus.OK).send(svg);
res.status(HttpStatus.OK).send(url);
this.logger.info('[MediaController] Driver avatar generated', { driverId, svgLength });
this.logger.info('[MediaController] Driver avatar generated', { driverId });
}
@Public()
@@ -223,27 +239,30 @@ export class MediaController {
@Res() res: Response,
): Promise<void> {
this.logger.debug('[MediaController] Generating media', { type, id });
let svg: string;
let url: string;
// Route to appropriate generator based on type
if (type === 'team') {
svg = this.mediaGenerationService.generateTeamLogo(id);
url = this.mediaGenerationService.generateTeamLogo(id);
} else if (type === 'league') {
svg = this.mediaGenerationService.generateLeagueLogo(id);
url = this.mediaGenerationService.generateLeagueLogo(id);
} else if (type === 'driver') {
svg = this.mediaGenerationService.generateDriverAvatar(id);
url = this.mediaGenerationService.generateDriverAvatar(id);
} else {
// Fallback: generate a generic logo
svg = this.mediaGenerationService.generateLeagueLogo(`${type}-${id}`);
url = this.mediaGenerationService.generateLeagueLogo(`${type}-${id}`);
}
const svgLength = svg.length;
if (url.startsWith('http')) {
res.redirect(HttpStatus.FOUND, url);
return;
}
res.setHeader('Content-Type', 'image/svg+xml; charset=utf-8');
res.setHeader('Cache-Control', 'public, max-age=31536000, immutable');
res.status(HttpStatus.OK).send(svg);
res.status(HttpStatus.OK).send(url);
this.logger.info('[MediaController] Generated media served', { type, id, svgLength });
this.logger.info('[MediaController] Generated media served', { type, id });
}
@Public()