108 lines
2.9 KiB
Dart
108 lines
2.9 KiB
Dart
import 'dart:convert';
|
|
import 'dart:typed_data';
|
|
|
|
import 'package:file_picker/file_picker.dart';
|
|
import 'package:http/http.dart' as http;
|
|
|
|
import '../config/environment.dart';
|
|
|
|
class NonEBClaimsService {
|
|
static const String _appSignature =
|
|
'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y';
|
|
|
|
Map<String, String> _headers(String token, {bool json = true}) {
|
|
return {
|
|
'Authorization': 'Bearer $token',
|
|
'APP-SIGNATURE': _appSignature,
|
|
if (json) 'Content-Type': 'application/json',
|
|
};
|
|
}
|
|
|
|
Future<Map<String, dynamic>> createClaim({
|
|
required String token,
|
|
required Map<String, String> fields,
|
|
required PlatformFile assetFile,
|
|
}) async {
|
|
final request = http.MultipartRequest(
|
|
'POST',
|
|
Uri.parse('${Environment.apiUrlPost}non-eb-claim/create'),
|
|
);
|
|
|
|
request.headers.addAll(_headers(token, json: false));
|
|
request.fields.addAll(fields);
|
|
|
|
final Uint8List? bytes = assetFile.bytes;
|
|
if (bytes == null) {
|
|
throw Exception('Selected file has no bytes');
|
|
}
|
|
|
|
request.files.add(
|
|
http.MultipartFile.fromBytes(
|
|
'asset_file',
|
|
bytes,
|
|
filename: assetFile.name,
|
|
),
|
|
);
|
|
|
|
final streamed = await request.send();
|
|
final body = await streamed.stream.bytesToString();
|
|
return jsonDecode(body) as Map<String, dynamic>;
|
|
}
|
|
|
|
Future<Map<String, dynamic>> listClaims({
|
|
required String token,
|
|
required Map<String, dynamic> body,
|
|
}) async {
|
|
final response = await http.post(
|
|
Uri.parse('${Environment.apiUrlPost}v1/non-eb-claim/list'),
|
|
headers: _headers(token),
|
|
body: jsonEncode(body),
|
|
);
|
|
return jsonDecode(response.body) as Map<String, dynamic>;
|
|
}
|
|
|
|
Future<Map<String, dynamic>> getHistory({
|
|
required String token,
|
|
required String claimId,
|
|
}) async {
|
|
final response = await http.get(
|
|
Uri.parse('${Environment.apiUrlPost}non-eb-claim/history/$claimId'),
|
|
headers: _headers(token, json: false),
|
|
);
|
|
return jsonDecode(response.body) as Map<String, dynamic>;
|
|
}
|
|
|
|
Future<Map<String, dynamic>> uploadRequiredDoc({
|
|
required String token,
|
|
required String claimId,
|
|
required String documentName,
|
|
required PlatformFile file,
|
|
}) async {
|
|
final request = http.MultipartRequest(
|
|
'POST',
|
|
Uri.parse(
|
|
'${Environment.apiUrlPost}non-eb-claim/$claimId/upload-required-doc'),
|
|
);
|
|
|
|
request.headers.addAll(_headers(token, json: false));
|
|
request.fields['document_name'] = documentName;
|
|
|
|
final Uint8List? bytes = file.bytes;
|
|
if (bytes == null) {
|
|
throw Exception('Selected file has no bytes');
|
|
}
|
|
|
|
request.files.add(
|
|
http.MultipartFile.fromBytes(
|
|
'file',
|
|
bytes,
|
|
filename: file.name,
|
|
),
|
|
);
|
|
|
|
final streamed = await request.send();
|
|
final body = await streamed.stream.bytesToString();
|
|
return jsonDecode(body) as Map<String, dynamic>;
|
|
}
|
|
}
|