request detail

This commit is contained in:
Phuoc Nguyen
2025-11-28 15:47:51 +07:00
parent 65f6f825a6
commit 9e7bda32f2
14 changed files with 1320 additions and 718 deletions

View File

@@ -0,0 +1,58 @@
/// Providers: Design Request
///
/// Riverpod providers for managing design request state.
library;
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:worker/core/network/dio_client.dart';
import 'package:worker/features/showrooms/data/datasources/design_request_remote_datasource.dart';
import 'package:worker/features/showrooms/data/repositories/design_request_repository_impl.dart';
import 'package:worker/features/showrooms/domain/entities/design_request.dart';
import 'package:worker/features/showrooms/domain/repositories/design_request_repository.dart';
part 'design_request_provider.g.dart';
/// Design Request Remote Data Source Provider
@riverpod
Future<DesignRequestRemoteDataSource> designRequestRemoteDataSource(Ref ref) async {
final dioClient = await ref.watch(dioClientProvider.future);
return DesignRequestRemoteDataSourceImpl(dioClient);
}
/// Design Request Repository Provider
@riverpod
Future<DesignRequestRepository> designRequestRepository(Ref ref) async {
final remoteDataSource = await ref.watch(designRequestRemoteDataSourceProvider.future);
return DesignRequestRepositoryImpl(remoteDataSource);
}
/// Design Requests List Provider
///
/// Fetches and manages design requests from API.
@riverpod
class DesignRequestsList extends _$DesignRequestsList {
@override
Future<List<DesignRequest>> build() async {
final repository = await ref.watch(designRequestRepositoryProvider.future);
return repository.getDesignRequests();
}
/// Refresh design requests from remote
Future<void> refresh() async {
state = const AsyncValue.loading();
state = await AsyncValue.guard(() async {
final repository = await ref.read(designRequestRepositoryProvider.future);
return repository.getDesignRequests();
});
}
}
/// Design Request Detail Provider
///
/// Fetches detail of a specific design request by name.
/// Uses family modifier to cache by request name.
@riverpod
Future<DesignRequest> designRequestDetail(Ref ref, String name) async {
final repository = await ref.watch(designRequestRepositoryProvider.future);
return repository.getDesignRequestDetail(name);
}