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 { 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 { throw new Error('Not implemented: API endpoint for approving join requests'); } async rejectJoinRequest(): Promise { throw new Error('Not implemented: API endpoint for rejecting join requests'); } }