Files
gridpilot.gg/apps/website/lib/services/teams/TeamJoinService.ts
2026-01-17 15:46:55 +01:00

54 lines
1.9 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';
import { isProductionEnvironment } from '@/lib/config/env';
/**
* 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(apiClient?: TeamsApiClient) {
if (apiClient) {
this.apiClient = apiClient;
} else {
const baseUrl = getWebsiteApiBaseUrl();
const logger = new ConsoleLogger();
const errorReporter = new EnhancedErrorReporter(logger, {
showUserNotifications: true,
logToConsole: true,
reportToExternal: isProductionEnvironment(),
});
this.apiClient = new TeamsApiClient(baseUrl, errorReporter, logger);
}
}
async getJoinRequests(teamId: string, currentDriverId: string, isOwner: boolean): Promise<any[]> {
try {
const result = await this.apiClient.getJoinRequests(teamId);
const requests = (result as any).requests || result;
return requests.map((request: any) =>
new TeamJoinRequestViewModel(request, currentDriverId, isOwner)
);
} catch (error: any) {
throw error;
}
}
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');
}
}