import '../../models/share_account_model.dart'; import '../../models/mining_record_model.dart'; import '../../models/global_state_model.dart'; import '../../models/planting_record_model.dart'; import '../../../core/network/api_client.dart'; import '../../../core/network/api_endpoints.dart'; import '../../../core/error/exceptions.dart'; import '../../../domain/repositories/mining_repository.dart'; abstract class MiningRemoteDataSource { Future getShareAccount(String accountSequence); Future getMiningRecords( String accountSequence, { int page = 1, int pageSize = 20, }); Future getGlobalState(); Future getPlantingLedger( String accountSequence, { int page = 1, int pageSize = 10, }); } class MiningRemoteDataSourceImpl implements MiningRemoteDataSource { final ApiClient client; MiningRemoteDataSourceImpl({required this.client}); @override Future getShareAccount(String accountSequence) async { try { final response = await client.get(ApiEndpoints.shareAccount(accountSequence)); return ShareAccountModel.fromJson(response.data); } catch (e) { throw ServerException(e.toString()); } } @override Future getMiningRecords( String accountSequence, { int page = 1, int pageSize = 20, }) async { try { final response = await client.get( ApiEndpoints.miningRecords(accountSequence), queryParameters: {'page': page, 'pageSize': pageSize}, ); final data = response.data; final items = (data['items'] as List? ?? data['records'] as List? ?? []) .map((json) => MiningRecordModel.fromJson(json)) .toList(); final pagination = data['pagination'] ?? {}; return MiningRecordsPage( items: items, total: pagination['total'] ?? items.length, page: pagination['page'] ?? page, pageSize: pagination['pageSize'] ?? pageSize, totalPages: pagination['totalPages'] ?? 1, ); } catch (e) { throw ServerException(e.toString()); } } @override Future getGlobalState() async { try { final response = await client.get(ApiEndpoints.globalState); return GlobalStateModel.fromJson(response.data); } catch (e) { throw ServerException(e.toString()); } } @override Future getPlantingLedger( String accountSequence, { int page = 1, int pageSize = 10, }) async { try { final response = await client.get( ApiEndpoints.plantingLedger(accountSequence), queryParameters: {'page': page, 'pageSize': pageSize}, ); return PlantingLedgerPageModel.fromJson(response.data); } catch (e) { throw ServerException(e.toString()); } } }