Files
monisuo/flutter_monisuo/lib/data/services/asset_service.dart

108 lines
3.1 KiB
Dart
Raw Normal View History

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