Files
gridpilot.gg/apps/website/lib/page-queries/TeamLeaderboardPageQuery.ts
Marc Mintel 1b0a1f4aee
Some checks failed
Contract Testing / contract-tests (pull_request) Failing after 7m11s
Contract Testing / contract-snapshot (pull_request) Has been skipped
view data fixes
2026-01-24 23:29:55 +01:00

40 lines
1.3 KiB
TypeScript

import { Result } from '@/lib/contracts/Result';
import { PageQuery } from '@/lib/contracts/page-queries/PageQuery';
import { PresentationError, mapToPresentationError } from '@/lib/contracts/page-queries/PresentationError';
import { TeamService } from '@/lib/services/teams/TeamService';
import { TeamSummaryViewModel } from '@/lib/view-models/TeamSummaryViewModel';
export interface TeamLeaderboardPageData {
teams: TeamSummaryViewModel[];
}
export class TeamLeaderboardPageQuery implements PageQuery<TeamLeaderboardPageData, void> {
private readonly service: TeamService;
constructor(service?: TeamService) {
this.service = service || new TeamService();
}
async execute(): Promise<Result<TeamLeaderboardPageData, PresentationError>> {
try {
const service = this.service;
const result = await service.getAllTeams();
if (result.isErr()) {
return Result.err(mapToPresentationError(result.getError()));
}
const teams = result.unwrap().map((t: any) => {
const vm = new TeamSummaryViewModel(t as any);
// Ensure it's a plain object for comparison in tests if needed,
// but here we just need it to match the expected viewData structure.
return vm;
});
return Result.ok({ teams });
} catch (error) {
return Result.err('unknown');
}
}
}