import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../../core/network/dio_client.dart'; import '../../data/datasources/approvals_datasource.dart'; import '../../data/repositories/approvals_repository_impl.dart'; import '../../domain/entities/approval.dart'; import '../../domain/repositories/approvals_repository.dart'; import '../../domain/usecases/get_pending_approvals.dart'; import '../../domain/usecases/approve_command.dart'; import '../../domain/usecases/reject_command.dart'; // --------------------------------------------------------------------------- // Dependency providers // --------------------------------------------------------------------------- final approvalsDatasourceProvider = Provider((ref) { final dio = ref.watch(dioClientProvider); return ApprovalsDatasource(dio); }); final approvalsRepositoryProvider = Provider((ref) { final datasource = ref.watch(approvalsDatasourceProvider); return ApprovalsRepositoryImpl(datasource); }); // --------------------------------------------------------------------------- // Use case providers // --------------------------------------------------------------------------- final getPendingApprovalsUseCaseProvider = Provider((ref) { return GetPendingApprovals(ref.watch(approvalsRepositoryProvider)); }); final approveCommandUseCaseProvider = Provider((ref) { return ApproveCommand(ref.watch(approvalsRepositoryProvider)); }); final rejectCommandUseCaseProvider = Provider((ref) { return RejectCommand(ref.watch(approvalsRepositoryProvider)); }); // --------------------------------------------------------------------------- // Data providers // --------------------------------------------------------------------------- /// Provides the list of pending approvals. final pendingApprovalsListProvider = FutureProvider>((ref) async { final useCase = ref.watch(getPendingApprovalsUseCaseProvider); return useCase.execute(); }); /// Provides all approvals filtered by status. final approvalsByStatusProvider = FutureProvider.family, String>((ref, status) async { final repo = ref.watch(approvalsRepositoryProvider); return repo.getAll(status: status); });