harden media

This commit is contained in:
2025-12-31 15:39:28 +01:00
parent 92226800df
commit 8260bf7baf
413 changed files with 8361 additions and 1544 deletions

View File

@@ -1,12 +1,12 @@
import type { ITeamRepository } from '../../domain/repositories/ITeamRepository';
import type { ITeamMembershipRepository } from '../../domain/repositories/ITeamMembershipRepository';
import type { ITeamStatsRepository } from '../../domain/repositories/ITeamStatsRepository';
import type { IMediaRepository } from '../../domain/repositories/IMediaRepository';
import type { IResultRepository } from '../../domain/repositories/IResultRepository';
import type { Logger } from '@core/shared/application';
import { Result } from '@core/shared/application/Result';
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
import type { UseCaseOutputPort } from '@core/shared/application/UseCaseOutputPort';
import { MediaReference } from '@core/domain/media/MediaReference';
export type GetAllTeamsInput = {};
@@ -27,7 +27,8 @@ export interface TeamSummary {
specialization?: string;
region?: string;
languages?: string[];
logoUrl?: string;
logoRef?: MediaReference;
logoUrl?: string | null;
rating?: number;
category?: string | undefined;
isRecruiting: boolean;
@@ -46,7 +47,6 @@ export class GetAllTeamsUseCase {
private readonly teamRepository: ITeamRepository,
private readonly teamMembershipRepository: ITeamMembershipRepository,
private readonly teamStatsRepository: ITeamStatsRepository,
private readonly mediaRepository: IMediaRepository,
private readonly resultRepository: IResultRepository,
private readonly logger: Logger,
private readonly output: UseCaseOutputPort<GetAllTeamsResult>,
@@ -64,7 +64,9 @@ export class GetAllTeamsUseCase {
const enrichedTeams: TeamSummary[] = await Promise.all(
teams.map(async (team) => {
const memberCount = await this.teamMembershipRepository.countByTeamId(team.id);
const logoUrl = await this.mediaRepository.getTeamLogo(team.id);
// Get logo reference from team entity
const logoRef = team.logoRef;
// Try to get pre-computed stats first
let stats = await this.teamStatsRepository.getTeamStats(team.id);
@@ -95,7 +97,6 @@ export class GetAllTeamsUseCase {
else performanceLevel = 'beginner';
stats = {
logoUrl: await this.mediaRepository.getTeamLogo(team.id) || '',
performanceLevel,
specialization: 'mixed',
region: 'International',
@@ -121,7 +122,8 @@ export class GetAllTeamsUseCase {
specialization: stats!.specialization,
region: stats!.region,
languages: stats!.languages,
logoUrl: logoUrl || stats!.logoUrl,
logoRef: logoRef,
logoUrl: null, // Will be resolved by presenter
rating: stats!.rating,
category: team.category,
isRecruiting: team.isRecruiting,