enrollment-app/lib/service/nonEBClaimsService.dart
2026-04-16 17:57:22 +05:30

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>;
}
}