import '../../core/constants/api_endpoints.dart'; import '../../core/network/api_response.dart'; import '../../core/network/dio_client.dart'; import '../models/account_models.dart'; /// 資產服務 class AssetService { final DioClient _client; AssetService(this._client); /// 獲取資產總覽 Future> getOverview() async { final response = await _client.get>( ApiEndpoints.assetOverview, ); if (response.success && response.data != null) { return ApiResponse.success( AssetOverview.fromJson(response.data!), response.message, ); } return ApiResponse.fail(response.message ?? '獲取資產總覽失敗'); } /// 獲取資金賬戶 Future> getFundAccount() async { final response = await _client.get>( ApiEndpoints.fundAccount, ); if (response.success && response.data != null) { // 後端返回格式: {"fund": {...}} final fundData = response.data!['fund'] as Map?; if (fundData != null) { return ApiResponse.success( AccountFund.fromJson(fundData), response.message, ); } } return ApiResponse.fail(response.message ?? '獲取資金賬戶失敗'); } /// 獲取交易賬戶 Future>> getTradeAccount() async { final response = await _client.get>( ApiEndpoints.tradeAccount, ); if (response.success && response.data != null) { // 後端返回格式: {"positions": [...]} final list = response.data!['positions'] as List?; final accounts = list?.map((e) => AccountTrade.fromJson(e as Map)).toList() ?? []; return ApiResponse.success(accounts, response.message); } return ApiResponse.fail(response.message ?? '獲取交易賬戶失敗'); } /// 資金劃轉 Future> transfer({ required int direction, required String amount, }) async { return _client.post( ApiEndpoints.transfer, data: { 'direction': direction, 'amount': amount, }, ); } /// 獲取資金流水 Future>> getFlow({ int? flowType, int pageNum = 1, int pageSize = 20, }) async { final params = { 'pageNum': pageNum, 'pageSize': pageSize, }; if (flowType != null) params['flowType'] = flowType; return _client.get>( ApiEndpoints.assetFlow, queryParameters: params, ); } /// 獲取每日盈虧數據 Future>> getDailyProfit({ required int year, required int month, }) async { final response = await _client.get>( ApiEndpoints.dailyProfit, queryParameters: {'year': year, 'month': month}, ); if (response.success && response.data != null) { return ApiResponse.success(response.data!, response.message); } return ApiResponse.fail(response.message ?? '獲取每日盈虧數據失敗'); } }