Files
gridpilot.gg/apps/website/lib/page-queries/ProfilePageQuery.ts
2026-01-16 01:00:03 +01:00

34 lines
1.4 KiB
TypeScript

import { ProfileViewDataBuilder } from '@/lib/builders/view-data/ProfileViewDataBuilder';
import { Result } from '@/lib/contracts/Result';
import { PageQuery } from '@/lib/contracts/page-queries/PageQuery';
import { PresentationError } from '@/lib/contracts/page-queries/PresentationError';
import { SessionGateway } from '@/lib/gateways/SessionGateway';
import { DriverProfileService } from '@/lib/services/drivers/DriverProfileService';
import type { ProfileViewData } from '@/lib/view-data/ProfileViewData';
export class ProfilePageQuery implements PageQuery<ProfileViewData, void, PresentationError> {
async execute(): Promise<Result<ProfileViewData, PresentationError>> {
const sessionGateway = new SessionGateway();
const session = await sessionGateway.getSession();
if (!session?.user?.primaryDriverId) {
return Result.err('notFound');
}
const service = new DriverProfileService();
const profileResult = await service.getDriverProfile(session.user.primaryDriverId);
if (profileResult.isErr()) {
const error = profileResult.getError();
if (error === 'notFound') return Result.err('notFound');
if (error === 'unauthorized') return Result.err('unauthorized');
if (error === 'serverError') return Result.err('serverError');
return Result.err('unknown');
}
const dto = profileResult.unwrap();
const viewData = ProfileViewDataBuilder.build(dto);
return Result.ok(viewData);
}
}