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 { 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 { 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'); } }