import { AdminApiClient } from '@/lib/api/admin/AdminApiClient'; import { PageQuery } from '@/lib/contracts/page-queries/PageQuery'; import { PageQueryResult } from '@/lib/contracts/page-queries/PageQueryResult'; import { EnhancedErrorReporter } from '@/lib/infrastructure/EnhancedErrorReporter'; import { ConsoleLogger } from '@/lib/infrastructure/logging/ConsoleLogger'; import { AdminService } from '@/lib/services/admin/AdminService'; import { AdminDashboardViewDataBuilder } from '@/lib/builders/view-data/AdminDashboardViewDataBuilder'; import { AdminDashboardViewData } from '@/lib/view-data/AdminDashboardViewData'; /** * AdminDashboardPageQuery * * Server-side composition for admin dashboard page. * Fetches dashboard statistics from API and transforms to View Data using builders. * * Follows Clean Architecture: DTOs never leak into application code. */ export class AdminDashboardPageQuery implements PageQuery { async execute(): Promise> { try { // Create required dependencies const logger = new ConsoleLogger(); const errorReporter = new EnhancedErrorReporter(logger, { showUserNotifications: false, logToConsole: true, reportToExternal: process.env.NODE_ENV === 'production', }); const baseUrl = process.env.NEXT_PUBLIC_API_BASE_URL || 'http://localhost:3001'; const apiClient = new AdminApiClient(baseUrl, errorReporter, logger); const adminService = new AdminService(apiClient); // Fetch dashboard stats (API DTO) const apiDto = await adminService.getDashboardStats(); // Transform API DTO to View Data using builder const viewData = AdminDashboardViewDataBuilder.build(apiDto); return { status: 'ok', dto: viewData }; } catch (error) { console.error('AdminDashboardPageQuery failed:', error); if (error instanceof Error && (error.message.includes('403') || error.message.includes('401'))) { return { status: 'notFound' }; } return { status: 'error', errorId: 'admin_dashboard_fetch_failed' }; } } }