import 'dart:convert'; import 'package:http/http.dart'; import 'package:test_sa/api/user_api_client.dart'; import '../controllers/api_routes/urls.dart'; import '../models/gas_refill/gas_refill_model.dart'; import 'api_client.dart'; class GasRefillApiClient { static final GasRefillApiClient _instance = GasRefillApiClient._internal(); GasRefillApiClient._internal(); factory GasRefillApiClient() => _instance; // todo @majd there is a method postJsonForObject, use this, rather then postJsonForResponse Future> getRequestPages({required List items, required int pageItemNumber}) async { Map body = { "uid": "${UserApiClient().user?.id}", "token": "${UserApiClient().user?.token}", "pageSize": "${(items.length) ~/ pageItemNumber}", }; final response = await ApiClient().postJsonForResponse( "${URLs.host1}${URLs.getGasRefill}", body, isFormData: false, ); // client's request was successfully received var requestsListJson = json.decode(utf8.decode(response.bodyBytes)); print(requestsListJson); return requestsListJson['data'].map((request) => GasRefillModel.fromJson(request)).toList(); } Future createModel({ required GasRefillModel model, }) async { Map body = { "gazRefillNo": await generateGazRefillNo(), "assignedEmployee": { "id": UserApiClient().user?.id.toString(), "name": UserApiClient().user?.username.toString() }, "status": { "id": 0, "name": "", "value": 0 }, }; body["gazRefillDetails"] = model.details ?.map((model) => { "gasType": { "id": model.type?.id, "name": model.type?.label.toString(), "value": model.type?.id }, "cylinderType": { "id": 0, "name": "", "value": 0 }, "cylinderSize": { "id": model.cylinderSize?.id, "name": model.cylinderSize?.label.toString(), "value": model.cylinderSize?.id, }, "requestedQty": model.requestedQuantity, "deliverdQty": 0 }) .toList(); print(body); final response = await ApiClient().postJsonForResponse( "${URLs.host1}${URLs.requestGasRefill}", body, isFormData: false ); return GasRefillModel.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]); } Future updateModel({ required GasRefillModel? oldModel, required GasRefillModel newModel, }) async { Map body = { "id": oldModel?.id, "gazRefillNo": await generateGazRefillNo(), "assignedEmployee": { "id": UserApiClient().user?.id.toString(), "name": UserApiClient().user?.username.toString() }, "status": { "id": 0, "name": "", "value": 0 }, }; body["gazRefillDetails"] = newModel.details ?.map((model) => { "gasType": { "id": model.type?.id, "name": model.type?.label.toString(), "value": model.type?.id }, "cylinderType": { "id": 0, "name": "", "value": 0 }, "cylinderSize": { "id": model.cylinderSize?.id, "name": model.cylinderSize?.label.toString(), "value": model.cylinderSize?.id, }, "requestedQty": model.requestedQuantity, "deliverdQty": 0 }) .toList(); final reponse = await ApiClient().putJsonForResponse("${URLs.host1}${URLs.updateGasRefill}/${newModel.id}", body); oldModel?.fromGasRefillModel(newModel); } Future generateGazRefillNo() async { final reponse = await ApiClient().getJsonForResponse("${URLs.host1}${URLs.generateGazRefillNo}"); var data = json.decode(reponse.body); return data['data']; } }