mobdr/lib/network/api_provider.dart

469 lines
15 KiB
Dart

/*
This is api provider
This page is used to get data from API
*/
import 'package:mobdr/config/constant.dart';
import 'package:mobdr/main.dart';
import 'package:mobdr/service/shared_prefs.dart';
import 'package:dio/dio.dart';
import 'dart:convert';
import 'package:crypto/crypto.dart';
class ApiProvider {
Dio dio = Dio();
late Response response;
late Response response2;
String connErr = 'Please check your internet connection and try again';
Future<Response> getCrud(url, body) async {
print('url : ' + url.toString());
try {
dio.options.headers['content-Type'] = 'application/json';
dio.options.headers['Accept'] = 'application/json';
dio.options.headers['Cookie'] = "pguid=${SharedPrefs().guid}";
dio.options.connectTimeout = Duration(seconds: 5);
dio.options.receiveTimeout = Duration(seconds: 4);
if (body != null) {
dio.options.queryParameters = body;
}
return await dio.get(url);
} on DioError catch (e) {
//print(e.toString()+' | '+url.toString());
if (e.type == DioErrorType.badResponse) {
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.toString();
}
} else if (e.type == DioErrorType.connectionTimeout) {
throw e.message.toString();
} else if (e.type == DioErrorType.cancel) {
throw 'cancel';
}
throw connErr;
} finally {
//dio.close(); // TODO: Attention pas close
}
}
Future<Response> getConnect(url, apiToken) async {
print('url : ' + url.toString());
try {
dio.options.headers['content-Type'] = 'application/x-www-form-urlencoded';
dio.options.connectTimeout = Duration(seconds: 5);
dio.options.receiveTimeout = Duration(seconds: 4);
return await dio.post(url, cancelToken: apiToken);
} on DioError catch (e) {
//print(e.toString()+' | '+url.toString());
if (e.type == DioErrorType.badResponse) {
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.toString();
}
} else if (e.type == DioErrorType.connectionTimeout) {
throw e.message.toString();
} else if (e.type == DioErrorType.cancel) {
throw 'cancel';
}
throw connErr;
} finally {
//dio.close(); // TODO: Attention pas close
}
}
Future<Response> 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 = Duration(seconds: 5);
dio.options.receiveTimeout = Duration(seconds: 4);
return await dio.post(url, data: data, cancelToken: apiToken);
} on DioError catch (e) {
//print(e.toString()+' | '+url.toString());
if (e.type == DioErrorType.badResponse) {
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.toString();
}
} else if (e.type == DioErrorType.connectionTimeout) {
throw e.message.toString();
} else if (e.type == DioErrorType.cancel) {
throw 'cancel';
}
throw connErr;
} finally {
//dio.close(); // TODO: Attention pas close
}
}
/// login function
Future<String> 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:
/// save user data
SharedPrefs().id_utilisateur = response.data['id_utilisateur'];
SharedPrefs().email = response.data['email'];
SharedPrefs().expire = response.data['expire'];
SharedPrefs().guid = response.data['guid'];
SharedPrefs().langage = response.data['langage'];
SharedPrefs().last_traduction = response.data['last_traduction'];
SharedPrefs().login = response.data['login'];
SharedPrefs().nom = response.data['nom'];
SharedPrefs().prenom = response.data['prenom'];
SharedPrefs().version = response.data['version'];
SharedPrefs().photo = response.data['photo'];
/// get image from url
Response ReponseImg =
await dio.get(ApiConstants.baseUrl + response.data['photo'],
options: Options(
responseType: ResponseType.bytes,
contentType: 'application/octet-stream',
));
/// convert bytes to base64 string
String base64Photo = base64.encode(ReponseImg.data);
/// create box user
objectbox.addUSer(
response.data['id_utilisateur'],
response.data['login'],
response.data['nom'],
response.data['prenom'],
base64Photo);
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;
}
}
/// Synchronize "stores & competing stores"
Future<String> SyncEtablissements() async {
try {
/// get "Etablissement" list
response = await getCrud(
ApiConstants.baseUrl +
ApiConstants.externalEndpoint +
ApiConstants.restEndpoint +
'/mobDR/etablissement',
null);
/// get "concurrent" list
response2 = await getCrud(
ApiConstants.baseUrl +
ApiConstants.externalEndpoint +
ApiConstants.restEndpoint +
'/mobDR/etablissement/concurrent',
null);
//await new Future.delayed(const Duration(seconds: 5));
if (response.statusCode == STATUS_OK) {
/// fill box "etab"
objectbox.addEtabs(response.data['boutiques']);
}
if (response2.statusCode == STATUS_OK) {
/// fill box "concurrence"
objectbox.addConcurrents(response2.data['concurrents']);
}
/// all ok
if (response.statusCode == STATUS_OK &&
response2.statusCode == STATUS_OK) {
return 'OK';
} else {
return response.statusMessage ?? 'Unknow error ...';
}
} catch (ex) {
return ex.toString(); // return ex.response!.data;
}
}
/// Synchronize "visites"
Future<String> SyncVisites() async {
try {
var body = null;
/// get "Visite list"
response = await getCrud(
ApiConstants.baseUrl +
ApiConstants.externalEndpoint +
ApiConstants.restEndpoint +
'/mobDR/visite/calendrier',
{"id_utilisateur": 6, "start": 20230101, "end": 20230131});
/// get "Visite tags" list
response2 = await getCrud(
ApiConstants.baseUrl +
ApiConstants.externalEndpoint +
ApiConstants.restEndpoint +
'/mobDR/visite/tag',
body);
//await new Future.delayed(const Duration(seconds: 5));
if (response.statusCode == STATUS_OK) {
/// fill box "visite"
objectbox.addVisites(response.data['events']);
}
if (response2.statusCode == STATUS_OK) {
/// fill box "visiteTag"
objectbox.addVisiteTags(response2.data['tags']);
}
/// all ok
if (response.statusCode == STATUS_OK &&
response2.statusCode == STATUS_OK) {
return 'OK';
} else {
return response.statusMessage ?? 'Unknow error ...';
}
} catch (ex) {
return ex.toString(); // return ex.response!.data;
}
}
/// Synchronize "Photos"
Future<String> SyncPhotos() async {
try {
/// get "Photo typologies"
response = await getCrud(
ApiConstants.baseUrl +
ApiConstants.externalEndpoint +
ApiConstants.restEndpoint +
'/mobDR/visite/typologie',
null);
if (response.statusCode == STATUS_OK) {
/// fill box "Photo typologies"
objectbox.addPhotoTypologies(response.data['typologies']);
}
/// all ok
if (response.statusCode == STATUS_OK) {
return 'OK';
} else {
return response.statusMessage ?? 'Unknow error ...';
}
} catch (ex) {
return ex.toString(); // return ex.response!.data;
}
}
Future<String> getExample(apiToken) async {
response =
await getConnect(ApiConstants.baseUrl + '/example/getData', apiToken);
print('res : ' + response.toString());
return response.data.toString();
}
Future<String> 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<List<StudentModel>> 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<StudentModel> listData =
responseList.map((f) => StudentModel.fromJson(f)).toList();
return listData;
} else {
throw response.data['msg'];
}
}
*/
Future<List<dynamic>> 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<dynamic> respList = [];
respList.add(response.data['msg']);
respList.add(response.data['data']['id']);
return respList;
} else {
throw response.data['msg'];
}
}
Future<String> 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<String> 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<List<LoginModel>> 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<LoginModel> listData =
responseList.map((f) => LoginModel.fromJson(f)).toList();
return listData;
} else {
throw response.data['msg'];
}
}
*/
/*
Future<List<ProductGridModel>> 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<ProductGridModel> listData =
responseList.map((f) => ProductGridModel.fromJson(f)).toList();
return listData;
} else {
throw response.data['msg'];
}
}
*/
/*
Future<List<ProductListviewModel>> 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<ProductListviewModel> listData =
responseList.map((f) => ProductListviewModel.fromJson(f)).toList();
return listData;
} else {
throw response.data['msg'];
}
}
*/
}