Files
gridpilot.gg/apps/website/lib/services/teams/TeamJoinService.ts
2026-01-14 10:51:05 +01:00

48 lines
1.7 KiB
TypeScript

import { TeamsApiClient } from '@/lib/api/teams/TeamsApiClient';
import { TeamJoinRequestViewModel } from '@/lib/view-models/TeamJoinRequestViewModel';
import { Result } from '@/lib/contracts/Result';
import { DomainError, Service } from '@/lib/contracts/services/Service';
import { ConsoleLogger } from '@/lib/infrastructure/logging/ConsoleLogger';
import { EnhancedErrorReporter } from '@/lib/infrastructure/EnhancedErrorReporter';
import { getWebsiteApiBaseUrl } from '@/lib/config/apiBaseUrl';
/**
* Team Join Service - ViewModels
*
* Returns ViewModels for team join requests.
* Handles presentation logic for join request management.
*/
export class TeamJoinService implements Service {
private apiClient: TeamsApiClient;
constructor() {
const baseUrl = getWebsiteApiBaseUrl();
const logger = new ConsoleLogger();
const errorReporter = new EnhancedErrorReporter(logger, {
showUserNotifications: true,
logToConsole: true,
reportToExternal: process.env.NODE_ENV === 'production',
});
this.apiClient = new TeamsApiClient(baseUrl, errorReporter, logger);
}
async getJoinRequests(teamId: string, currentDriverId: string, isOwner: boolean): Promise<TeamJoinRequestViewModel[]> {
try {
const result = await this.apiClient.getJoinRequests(teamId);
return result.requests.map(request =>
new TeamJoinRequestViewModel(request, currentDriverId, isOwner)
);
} catch (error) {
// Return empty array on error
return [];
}
}
async approveJoinRequest(): Promise<void> {
throw new Error('Not implemented: API endpoint for approving join requests');
}
async rejectJoinRequest(): Promise<void> {
throw new Error('Not implemented: API endpoint for rejecting join requests');
}
}