/* This is api provider This page is used to get data from API */ import 'package:mobdr/config/constant.dart'; import 'package:mobdr/service/local_storage.dart'; import 'package:mobdr/model/login.dart'; import 'package:dio/dio.dart'; import 'dart:convert'; import 'package:crypto/crypto.dart'; class ApiProvider { Dio dio = Dio(); late Response response; String connErr = 'Please check your internet connection and try again'; Future getCrud(url, body) async { print('url : ' + url.toString()); try { dio.options.headers['content-Type'] = 'application/json'; dio.options.headers['Accept'] = 'application/json'; dio.options.connectTimeout = 30000; //5s dio.options.receiveTimeout = 25000; dio.options.queryParameters = body; return await dio.get(url); } on DioError catch (e) { //print(e.toString()+' | '+url.toString()); if (e.type == DioErrorType.response) { int? statusCode = e.response!.statusCode; if (statusCode == STATUS_NOT_FOUND) { throw "Api not found"; } else if (statusCode == STATUS_INTERNAL_ERROR) { throw "Internal Server Error"; } else { throw e.error.message.toString(); } } else if (e.type == DioErrorType.connectTimeout) { throw e.message.toString(); } else if (e.type == DioErrorType.cancel) { throw 'cancel'; } throw connErr; } finally { //dio.close(); // TODO: Attention pas close } } Future getConnect(url, apiToken) async { print('url : ' + url.toString()); try { dio.options.headers['content-Type'] = 'application/x-www-form-urlencoded'; dio.options.connectTimeout = 30000; //5s dio.options.receiveTimeout = 25000; return await dio.post(url, cancelToken: apiToken); } on DioError catch (e) { //print(e.toString()+' | '+url.toString()); if (e.type == DioErrorType.response) { int? statusCode = e.response!.statusCode; if (statusCode == STATUS_NOT_FOUND) { throw "Api not found"; } else if (statusCode == STATUS_INTERNAL_ERROR) { throw "Internal Server Error"; } else { throw e.error.message.toString(); } } else if (e.type == DioErrorType.connectTimeout) { throw e.message.toString(); } else if (e.type == DioErrorType.cancel) { throw 'cancel'; } throw connErr; } finally { //dio.close(); } } Future postConnect(url, data, apiToken) async { print('url : ' + url.toString()); print('postData : ' + data.toString()); try { dio.options.headers['content-Type'] = 'application/x-www-form-urlencoded'; dio.options.connectTimeout = 30000; //5s dio.options.receiveTimeout = 25000; return await dio.post(url, data: data, cancelToken: apiToken); } on DioError catch (e) { //print(e.toString()+' | '+url.toString()); if (e.type == DioErrorType.response) { int? statusCode = e.response!.statusCode; if (statusCode == STATUS_NOT_FOUND) { throw "Api not found"; } else if (statusCode == STATUS_INTERNAL_ERROR) { throw "Internal Server Error"; } else { throw e.error.message.toString(); } } else if (e.type == DioErrorType.connectTimeout) { throw e.message.toString(); } else if (e.type == DioErrorType.cancel) { throw 'cancel'; } throw connErr; } finally { dio.close(); } } /// login function Future login( String userName, String pinCode, String securityCode) async { var body = { "application": "MobDR ", //+ ExeInfo(exeVersion) "pin_code": md5.convert(utf8.encode(pinCode)), "security_code": securityCode, //sCodeSecurite "langage": "fr", "screenheight": "0", //SysYRes() "screenwidth": "0", //SysXRes() "browser_name": "Natif", "browser_version": "Application", "engine_name": "Android", "device_model": "", "device_type": "mobile", //SysInfoAppareil(sysModele) WDM 23 "device_vendor": "", //SysInfoAppareil(sysFabricant) WDM 23 "ismobile": 1, "engine_version": "", // SysVersionAndroid(sysVersionApiLevel) "os_name": "", // SysVersionAndroid(sysVersionPlateForme) "os_version": "", //SysVersionAndroid(sysVersionNumÈro) "fingerprint": "aa" // TODO: on peut mettre un fingerprint sur la version ou sur l'heure }; try { response = await getCrud( ApiConstants.baseUrl + ApiConstants.mp4Endpoint + ApiConstants.restEndpoint + '/login/' + userName + '/guid', body); print('res : ' + response.toString()); switch (response.data['autorisation']) { case 1: LocalStorage.saveLoginData(LoginModel.fromJson(response.data)); return 'OK'; case -1: return 'Compte désactivé ...'; case -2: return 'SECURITY_CODE'; case -3: return 'Téléphone bloqué !'; case -4: return 'Code PIN incorrect !'; default: return "Une erreur inconnue s''est produite"; } } catch (ex) { return ex.toString(); // return ex.response!.data; } } Future getExample(apiToken) async { response = await getConnect(ApiConstants.baseUrl + '/example/getData', apiToken); print('res : ' + response.toString()); return response.data.toString(); } Future postExample(String id, apiToken) async { var postData = {'id': id}; response = await postConnect( ApiConstants.baseUrl + '/example/postData', postData, apiToken); print('res : ' + response.toString()); return response.data.toString(); } /* Future> getStudent(String sessionId, apiToken) async { var postData = {'session_id': sessionId}; response = await postConnect( ApiConstants.baseUrl + '/student/getStudent', postData, apiToken); if (response.data['status'] == STATUS_OK) { List responseList = response.data['data']; List listData = responseList.map((f) => StudentModel.fromJson(f)).toList(); return listData; } else { throw response.data['msg']; } } */ Future> addStudent( String sessionId, String studentName, String studentPhoneNumber, String studentGender, String studentAddress, apiToken) async { var postData = { 'session_id': sessionId, 'student_name': studentName, 'student_phone_number': studentPhoneNumber, 'student_gender': studentGender, 'student_address': studentAddress, }; response = await postConnect( ApiConstants.baseUrl + '/student/addStudent', postData, apiToken); if (response.data['status'] == STATUS_OK) { List respList = []; respList.add(response.data['msg']); respList.add(response.data['data']['id']); return respList; } else { throw response.data['msg']; } } Future editStudent( String sessionId, int studentId, String studentName, String studentPhoneNumber, String studentGender, String studentAddress, apiToken) async { var postData = { 'session_id': sessionId, 'student_id': studentId, 'student_name': studentName, 'student_phone_number': studentPhoneNumber, 'student_gender': studentGender, 'student_address': studentAddress, }; response = await postConnect( ApiConstants.baseUrl + '/student/editStudent', postData, apiToken); if (response.data['status'] == STATUS_OK) { return response.data['msg']; } else { throw response.data['msg']; } } Future deleteStudent( String sessionId, int studentId, apiToken) async { var postData = { 'session_id': sessionId, 'student_id': studentId, }; response = await postConnect( ApiConstants.baseUrl + '/student/deleteStudent', postData, apiToken); if (response.data['status'] == STATUS_OK) { return response.data['msg']; } else { throw response.data['msg']; } } Future> login2( String email, String password, apiToken) async { var postData = { 'email': email, 'password': password, }; response = await postConnect(LOGIN_API, postData, apiToken); if (response.data['status'] == STATUS_OK) { List responseList = response.data['data']; List listData = responseList.map((f) => LoginModel.fromJson(f)).toList(); return listData; } else { throw response.data['msg']; } } /* Future> getProductGrid( String sessionId, String skip, String limit, apiToken) async { var postData = {'session_id': sessionId, 'skip': skip, 'limit': limit}; response = await postConnect(PRODUCT_API, postData, apiToken); if (response.data['status'] == STATUS_OK) { List responseList = response.data['data']; //print('data : '+responseList.toString()); List listData = responseList.map((f) => ProductGridModel.fromJson(f)).toList(); return listData; } else { throw response.data['msg']; } } */ /* Future> getProductListview( String sessionId, String skip, String limit, apiToken) async { var postData = {'session_id': sessionId, 'skip': skip, 'limit': limit}; response = await postConnect(PRODUCT_API, postData, apiToken); if (response.data['status'] == STATUS_OK) { List responseList = response.data['data']; //print('data : '+responseList.toString()); List listData = responseList.map((f) => ProductListviewModel.fromJson(f)).toList(); return listData; } else { throw response.data['msg']; } } */ }