import 'dart:typed_data'; import 'package:dio/dio.dart'; import '../../core/constants/api_endpoints.dart'; import '../../core/network/api_response.dart'; import '../../core/network/dio_client.dart'; import '../models/user.dart'; /// 用戶服務 class UserService { final DioClient _client; UserService(this._client); /// 用戶登錄 Future>> login( String username, String password, ) async { return _client.post>( ApiEndpoints.login, data: {'username': username, 'password': password}, ); } /// 用戶註冊(multipart:含身份證圖片和可選推廣碼) Future>> register( String username, String password, { String? referralCode, required Uint8List frontBytes, required Uint8List backBytes, }) async { final formData = FormData.fromMap({ 'username': username, 'password': password, if (referralCode != null && referralCode.isNotEmpty) 'referralCode': referralCode, 'front': MultipartFile.fromBytes(frontBytes, filename: 'front.jpg'), 'back': MultipartFile.fromBytes(backBytes, filename: 'back.jpg'), }); return _client.upload>( ApiEndpoints.register, formData: formData, ); } /// 獲取用戶信息 Future> getUserInfo() async { return _client.get( ApiEndpoints.userInfo, fromJson: (data) => User.fromJson(data as Map), ); } /// 上傳 KYC 資料(身份證正反面圖片字節) /// 使用 fromBytes 以兼容 Web 和移動端 Future> uploadKyc( Uint8List frontBytes, Uint8List backBytes, ) async { final formData = FormData.fromMap({ 'front': MultipartFile.fromBytes(frontBytes, filename: 'front.jpg'), 'back': MultipartFile.fromBytes(backBytes, filename: 'back.jpg'), }); return _client.upload( ApiEndpoints.kyc, formData: formData, ); } /// 退出登錄 Future> logout() async { return _client.post(ApiEndpoints.logout); } }