From 5201f5789ee9a0093b06b426a39affc900e147d2 Mon Sep 17 00:00:00 2001 From: nextwo <1234> Date: Sun, 30 Apr 2023 11:10:19 +0300 Subject: [PATCH] changed to new apis --- lib/api/departments_api_client.dart | 27 +++++ lib/api/device_transfer_api_client.dart | 4 +- lib/api/devices_api_client.dart | 24 ++-- lib/api/hospitals_api_client.dart | 53 +++++++++ lib/controllers/api_routes/urls.dart | 6 +- .../providers/api/departments_provider.dart | 49 ++------ .../api/device_transfer_provider.dart | 1 + .../providers/api/hospitals_provider.dart | 111 ++++-------------- lib/models/hospital.dart | 2 +- .../departments/single_department_picker.dart | 6 +- .../hospital_auto_complete_field.dart | 2 +- .../hospitals/single_hospital_picker.dart | 4 +- 12 files changed, 142 insertions(+), 147 deletions(-) create mode 100644 lib/api/departments_api_client.dart create mode 100644 lib/api/hospitals_api_client.dart diff --git a/lib/api/departments_api_client.dart b/lib/api/departments_api_client.dart new file mode 100644 index 00000000..c0cf283b --- /dev/null +++ b/lib/api/departments_api_client.dart @@ -0,0 +1,27 @@ +import 'dart:convert'; + +import 'package:http/http.dart'; +import 'package:test_sa/api/api_client.dart'; +import 'package:test_sa/controllers/api_routes/urls.dart'; + +import '../models/department.dart'; + +class DepartmentsApiClient{ + + static final DepartmentsApiClient _instance = DepartmentsApiClient._internal(); + + DepartmentsApiClient._internal(); + + factory DepartmentsApiClient() => _instance; + + Future getDepartment() async { + Response response; + response = await ApiClient().postJsonForResponse( + URLs.host1 + URLs.getDepartments, + {}, + isFormData: false + ); + Map listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); + return listJson['data'].map((department) => Department.fromJson(department)).toList(); + } +} \ No newline at end of file diff --git a/lib/api/device_transfer_api_client.dart b/lib/api/device_transfer_api_client.dart index da6008c2..1b2bfd25 100644 --- a/lib/api/device_transfer_api_client.dart +++ b/lib/api/device_transfer_api_client.dart @@ -16,9 +16,7 @@ class DeviceTransferApiClient { Future> getRequests({required List items, required int pageItemNumber}) async { Map body= { - "uid": "${UserApiClient().user?.id}", - "token": "${UserApiClient().user?.token}", - "page": "${(items.length) ~/ pageItemNumber}", + "pageSize": "${(items.length) ~/ pageItemNumber}", }; final response = await ApiClient().postJsonForResponse( diff --git a/lib/api/devices_api_client.dart b/lib/api/devices_api_client.dart index b77d50a5..8b53111d 100644 --- a/lib/api/devices_api_client.dart +++ b/lib/api/devices_api_client.dart @@ -16,22 +16,31 @@ class DevicesApiClient { /// Fetch devices by [hospitalId] and insert the result into [devices] list Future getEquipment(String hospitalId) async { - final response = await ApiClient().getJsonForResponse(URLs.host1 + URLs.getEquipment, queryParameters: {'client': hospitalId}); - List equipmentListJson = json.decode(utf8.decode(response.bodyBytes)); + + + final response = await ApiClient().postJsonForResponse( + URLs.host1 + URLs.getEquipment, + {'client': hospitalId}, + isFormData: false + ); + + Map equipmentListJson = json.decode(utf8.decode(response.bodyBytes)); + print(equipmentListJson); devices.clear(); - devices.addAll(equipmentListJson.map((device) => Device.fromJson(device)).toList()); + devices.addAll(equipmentListJson['data'] != null ? equipmentListJson['data'].map((device) => Device.fromJson(device)).toList(): []); debugPrint("devices : ${devices.length}"); } /// Returns a list of devices by [hospitalId] and [serialNumber] (or | and) [number] Future> getDevicesList({required String hospitalId, String? serialNumber, String? number}) async { - final response = await ApiClient().getJsonForResponse( + final response = await ApiClient().postJsonForResponse( URLs.host1 + URLs.getEquipment, - queryParameters: { + { 'client': hospitalId, if (serialNumber?.isEmpty == false) 'name': serialNumber, if (number?.isEmpty == false) 'number': number, }, + isFormData: false ); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); return categoriesListJson.map((device) => Device.fromJson(device)).toList(); @@ -39,12 +48,13 @@ class DevicesApiClient { /// Returns a list of devices by [hospitalId] (and optionally) [serialNumber] Future> getDevicesListBySN({required String hospitalId, required String serialNumber}) async { - final response = await ApiClient().getJsonForResponse( + final response = await ApiClient().postJsonForResponse( URLs.host1 + URLs.getEquipment, - queryParameters: { + { 'client': hospitalId, if (serialNumber.isNotEmpty) 'serial_qr': serialNumber, }, + isFormData: false ); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); return categoriesListJson.map((device) => Device.fromJson(device)).toList(); diff --git a/lib/api/hospitals_api_client.dart b/lib/api/hospitals_api_client.dart new file mode 100644 index 00000000..9c418409 --- /dev/null +++ b/lib/api/hospitals_api_client.dart @@ -0,0 +1,53 @@ + +import 'dart:convert'; + +import 'package:http/http.dart'; +import 'package:test_sa/controllers/api_routes/urls.dart'; + +import '../models/hospital.dart'; +import 'api_client.dart'; + +class HospitalsApiClient{ + +static final HospitalsApiClient _instance = HospitalsApiClient._internal(); + +HospitalsApiClient._internal(); + +factory HospitalsApiClient() => _instance; + + Future getHospitals({ + required String title, + required int pageSize + }) async { + + Response response = await ApiClient().postJsonForResponse( + URLs.host1 + URLs.getHospitals, + { + "pageSize": pageSize.toString(), + "name": title, + }, + isFormData: false + ); + + Map categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + print(categoriesListJson); + return categoriesListJson['data'].map((category) => Hospital.fromJson(category)).toList(); + } + + +Future> getHospitalsList({ + required String title, +}) async { + Response response; + response = await ApiClient().postJsonForResponse( + URLs.host1 + URLs.getHospitals, + {"name" : title}, + isFormData: false + ); + + List page = []; + Map categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); + page = categoriesListJson['data'].map((category) => Hospital.fromJson(category)).toList(); + return page; +} +} \ No newline at end of file diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index bbc9e484..30833563 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -7,9 +7,9 @@ class URLs { static const login = "/mobile/MobileAuth/Login"; // post static const register = "/handle/create/user"; // post static const updateProfile = "/update/user/profile"; // post - static const getHospitals = "/handle/return/all/clients"; // get - static const getDepartments = "/handle/return/all/departments"; // get - static const getEquipment = "/handle/return/all/client/equipments"; // get ?client=208051 + static const getHospitals = "/mobile/Customer/GetCustomers"; // get + static const getDepartments = "/mobile/Department/search"; // get + static const getEquipment = "/mobile/Asset/GetAssets"; // get ?client=208051 static const getServiceRequests = "/return/user/calls"; // get static const getPreventiveMaintenanceVisits = "/return/user/calibrations"; // get diff --git a/lib/controllers/providers/api/departments_provider.dart b/lib/controllers/providers/api/departments_provider.dart index 7b54bdb5..c1c9474e 100644 --- a/lib/controllers/providers/api/departments_provider.dart +++ b/lib/controllers/providers/api/departments_provider.dart @@ -2,14 +2,16 @@ import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart'; +import 'package:test_sa/api/departments_api_client.dart'; import '../../../models/department.dart'; import '../../api_routes/urls.dart'; +import '../loading_notifier.dart'; -class DepartmentsProvider extends ChangeNotifier { +class DepartmentsProvider extends LoadingNotifier { //reset provider data void reset() { - departments = null; + departments.clear(); stateCode = null; } @@ -20,44 +22,17 @@ class DepartmentsProvider extends ChangeNotifier { // contain user data // when user not login or register _user = null - List? departments; + List departments=[]; - // when categories in-process _loading = true - // done _loading = true - // failed _loading = false - bool? isLoading; + Future getDepartment() async { - /// return -2 if request in progress - /// return -1 if error happen when sending request - /// return state code if request complete may be 200, 404 or 403 - /// for more details check http state manager - /// lib\controllers\http_status_manger\http_status_manger.dart - Future getDepartment(String host) async { - if (isLoading == true) { - return -2; - } - isLoading = true; - notifyListeners(); - Response response; - try { - response = await get( - Uri.parse(host + URLs.getDepartments), - headers: {"Content-Type": "application/json; charset=utf-8"}, - ); - } catch (error) { - isLoading = false; - stateCode = -1; + waitApiRequest(() async { + departments.addAll(await DepartmentsApiClient().getDepartment()); notifyListeners(); - return -1; - } - stateCode = response.statusCode; - if (response.statusCode >= 200 && response.statusCode < 300) { - // client's request was successfully received - List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", "")); - departments = listJson.map((department) => Department.fromJson(department)).toList(); + }, + onSuccess: (){ + stateCode=200; } - isLoading = false; - notifyListeners(); - return response.statusCode; + ); } } diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart index 0996d0d4..330d207d 100644 --- a/lib/controllers/providers/api/device_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -35,6 +35,7 @@ class DeviceTransferProvider extends LoadingNotifier { waitApiRequest(() async { items.clear(); items.addAll(await DeviceTransferApiClient().getRequests(items: items, pageItemNumber: pageItemNumber)); + print(items); notifyListeners(); if (items.length == pageItemNumber) { nextPage = true; diff --git a/lib/controllers/providers/api/hospitals_provider.dart b/lib/controllers/providers/api/hospitals_provider.dart index f0403dfa..db9abfef 100644 --- a/lib/controllers/providers/api/hospitals_provider.dart +++ b/lib/controllers/providers/api/hospitals_provider.dart @@ -3,126 +3,59 @@ import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:http/http.dart'; +import 'package:test_sa/api/hospitals_api_client.dart'; +import 'package:test_sa/controllers/providers/loading_notifier.dart'; import '../../../models/hospital.dart'; import '../../../models/user.dart'; import '../../api_routes/urls.dart'; -class HospitalsProvider extends ChangeNotifier { +class HospitalsProvider extends LoadingNotifier { // number of items call in each request final pageItemNumber = 50; //reset provider data void reset() { - _hospitals = null; + _hospitals.clear(); _stateCode = null; } - // state code of current request to defied error message - // like 400 customer request failed - // 500 service not available int? _stateCode; int? get stateCode => _stateCode; - // true if there is next page in product list and false if not - bool _nextPage = true; - - bool get nextPage => _nextPage; // contain user data // when user not login or register _user = null - List? _hospitals; - - List? get hospitals => _hospitals; + List _hospitals=[]; - // when categories in-process _loading = true - // done _loading = true - // failed _loading = false - bool? _loading; + List get hospitals => _hospitals; - bool? get isLoading => _loading; - - set isLoading(bool? isLoading) { - _loading = isLoading; - notifyListeners(); - } - /// return -2 if request in progress - /// return -1 if error happen when sending request - /// return state code if request complete may be 200, 404 or 403 - /// for more details check http state manager - /// lib\controllers\http_status_manger\http_status_manger.dart - Future getHospitals({ - required String host, - required User user, + Future getHospitals({ required String? title, }) async { - if (_loading == true) { - return -2; - } - _loading = true; - notifyListeners(); - Response response; - try { - response = await get( - Uri.parse( - "${host + URLs.getHospitals}?page=${(_hospitals?.length ?? 0) ~/ pageItemNumber}${title == null || title.isEmpty ? "" : "&name=$title"}", - ), - headers: {"Content-Type": "application/json; charset=utf-8"}, - ); - _stateCode = response.statusCode; - if (response.statusCode >= 200 && response.statusCode < 300) { - // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - List page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); - if (hospitals == null) _hospitals = []; - - _hospitals?.addAll(page); - if (page.length >= pageItemNumber) { - _nextPage = true; - } else { - _nextPage = false; - } - } - _loading = false; - notifyListeners(); - return response.statusCode; - } catch (error) { - _loading = false; - _stateCode = -1; - notifyListeners(); - return -1; + waitApiRequest(() async { + _hospitals = []; + _hospitals.addAll(await HospitalsApiClient().getHospitals(title: title ?? "", pageSize: _hospitals.length ~/ pageItemNumber)); + notifyListeners(); + }, + onSuccess: (){ + _stateCode = 200; } + ); } Future> getHospitalsList({ - required String host, - required User user, required String title, }) async { - Response response; - try { - response = await get( - Uri.parse( - host + URLs.getHospitals + (title.isEmpty ? "" : "?name=$title"), - ), - headers: {"Content-Type": "application/json; charset=utf-8"}, - ); - _stateCode = response.statusCode; - - List page = []; - if (response.statusCode >= 200 && response.statusCode < 300) { - // client's request was successfully received - List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); - page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList(); - } - return page; - } catch (error) { - _loading = false; - _stateCode = -1; - notifyListeners(); - return []; + waitApiRequest((){ + return HospitalsApiClient().getHospitalsList(title: title); + }, + onSuccess: (){ + _stateCode=200; } + ); + return []; } } diff --git a/lib/models/hospital.dart b/lib/models/hospital.dart index a41d8dd2..bf1ecfe5 100644 --- a/lib/models/hospital.dart +++ b/lib/models/hospital.dart @@ -1,5 +1,5 @@ class Hospital { - String? id; + int? id; String? name; Hospital({ diff --git a/lib/views/widgets/departments/single_department_picker.dart b/lib/views/widgets/departments/single_department_picker.dart index a656b647..96901364 100644 --- a/lib/views/widgets/departments/single_department_picker.dart +++ b/lib/views/widgets/departments/single_department_picker.dart @@ -35,14 +35,12 @@ class _SingleDepartmentPickerState extends State { return Scaffold( resizeToAvoidBottomInset: false, body: LoadingManager( - isLoading: _departmentsProvider?.isLoading, + isLoading: _departmentsProvider?.loading, stateCode: _departmentsProvider?.stateCode, isFailedLoading: _departmentsProvider?.departments == null, onRefresh: () async { _departmentsProvider?.reset(); - await _departmentsProvider?.getDepartment( - _settingProvider?.host ?? "", - ); + await _departmentsProvider?.getDepartment(); }, child: Column( children: [ diff --git a/lib/views/widgets/hospitals/hospital_auto_complete_field.dart b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart index f16b8344..b8c472c9 100644 --- a/lib/views/widgets/hospitals/hospital_auto_complete_field.dart +++ b/lib/views/widgets/hospitals/hospital_auto_complete_field.dart @@ -73,7 +73,7 @@ class _HospitalAutoCompleteFieldState extends State { widget.onSearch!(_controller.text); }), suggestionsCallback: (vale) async { - return await HospitalsProvider().getHospitalsList(host: _settingProvider?.host ?? "", title: vale, user: User()); + return await HospitalsProvider().getHospitalsList(title: vale); }, itemBuilder: (context, hospital) { return HospitalItem( diff --git a/lib/views/widgets/hospitals/single_hospital_picker.dart b/lib/views/widgets/hospitals/single_hospital_picker.dart index 9e6e512f..ed2ecc0b 100644 --- a/lib/views/widgets/hospitals/single_hospital_picker.dart +++ b/lib/views/widgets/hospitals/single_hospital_picker.dart @@ -36,12 +36,12 @@ class _SingleHospitalPickerState extends State { return Scaffold( resizeToAvoidBottomInset: false, body: LoadingManager( - isLoading: _hospitalsProvider?.isLoading, + isLoading: _hospitalsProvider?.loading, stateCode: _hospitalsProvider?.stateCode, isFailedLoading: _hospitalsProvider?.hospitals == null, onRefresh: () async { _hospitalsProvider?.reset(); - await _hospitalsProvider?.getHospitals(host: _settingProvider?.host ?? "", user: User(), title: ''); + await _hospitalsProvider?.getHospitals(title: ''); }, child: Column( children: [