import 'package:dio/dio.dart'; import 'package:dio_http_cache/dio_http_cache.dart'; import 'package:farm_tpf/custom_model/CropPlot.dart'; import 'package:farm_tpf/custom_model/Device.dart'; import 'package:farm_tpf/custom_model/EnvironmentParameter.dart'; import 'package:farm_tpf/custom_model/Harvest.dart'; import 'package:farm_tpf/custom_model/LocationUnit.dart'; import 'package:farm_tpf/custom_model/NotificationObjectDTO.dart'; import 'package:farm_tpf/custom_model/Supply.dart'; import 'package:farm_tpf/custom_model/UpdateNoti.dart'; import 'package:farm_tpf/custom_model/WaterType.dart'; import 'package:farm_tpf/custom_model/user.dart'; import 'package:farm_tpf/custom_model/user_request.dart'; import 'package:farm_tpf/data/api/dio_provider.dart'; import 'package:farm_tpf/data/api/rest_client.dart'; import 'package:farm_tpf/models/PagedResult.dart'; import 'package:farm_tpf/models/index.dart'; import 'package:farm_tpf/utils/const_common.dart'; import 'package:flutter/material.dart'; class Repository { final dio = DioProvider.instance(); Future> getActionTypes() { final client = RestClient(dio); var op = buildConfigurableCacheOptions( forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache)); return client.getActionTypes(options: op); } Future> getHarvests() { final client = RestClient(dio); var op = buildConfigurableCacheOptions( forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache)); return client.getHarvests(options: op); } Future> getWaterTypes() { final client = RestClient(dio); var op = buildConfigurableCacheOptions( forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache)); return client.getWaterTypes(options: op); } Future getPlotDetail(int cropId, {int page, int size}) { final client = RestClient(dio); return client.getCropDetail(cropId, page: page, size: size); } Future getPlotDetailByCode(String cropCode, {int page, int size}) { final client = RestClient(dio); return client.getCropDetailByCode(cropCode, page: page, size: size); } Future> getPlots({int page, int size, String searchString}) { final client = RestClient(dio); return client.getPlots(page: page, size: size, query: searchString); } Future updatePlot(TbCropDTO tbCropDTO) { final client = RestClient(dio); return client.updateCrop(tbCropDTO); } Future signInWithCredentials(String username, String password) { final client = RestClient(dio); return client.login(UserRequest(username: username, password: password)); } Future> getInfinityList(String url, {int page = 0, int size = 20}) async { var initUrl = "/api/activities/latest-env-by-activity-type/1/2"; var url = ConstCommon.baseUrl + initUrl + "?page=$page&paged=true&size=$size"; var response = await dio.get(url); final value = PagedResult.fromJson(response.data, getInstanceClass()); return value; } Future> getSupplies(String type, {String query = ""}) async { final client = RestClient(dio); var op = buildConfigurableCacheOptions( forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache)); return client.getSupplies(type, query: query, options: op); } Future> getDeviceForActivity() async { final client = RestClient(dio); var op = buildConfigurableCacheOptions( forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache)); return client.getDeviceForActivity(options: op); } Future updateAllNotification(String status) { final client = RestClient(dio); return client.updateAllNotification(status); } Future updateNoti(UpdateNoti updateNoti) { final client = RestClient(dio); return client.updateNoti(updateNoti); } Future getNotifications( {int page = 0, int size = 20}) async { var url = ConstCommon.baseUrl + "/api/notifications-current-user?page=$page&size=$size&sort=sendDate,DESC"; var response = await dio.get(url); final value = NotificationObjectDTO.fromJson(response.data); return value; } Future> getLocationUnits( {@required LocationType locationType, int filterId, int page = 0, int size = 500}) { final client = RestClient(dio); var op = buildConfigurableCacheOptions( forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache)); var response; switch (locationType) { case LocationType.province: response = client.getProvinces(filterId, options: op, page: page, size: size); break; case LocationType.district: response = client.getDistricts(filterId, options: op, page: page, size: size); break; case LocationType.ward: response = client.getWards(filterId, options: op, page: page, size: size); break; default: response = client.getCountries(); } return response; } Object getInstanceClass() { var instanceClass; if (1 == 1) { instanceClass = new Crop(); } return instanceClass; } //Action Future createAction( Function(dynamic) onSuccess, Function(dynamic) onError, {String apiAddAction, String paramActivity, String activityAction, List filePaths}) async { var formData = FormData(); filePaths.forEach((f) { formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f))); }); formData.fields.add(MapEntry(paramActivity, activityAction)); try { await dio .post("${ConstCommon.baseUrl}/$apiAddAction", data: formData) .then((value) { onSuccess(value.data); }); } on DioError catch (e) { onError(e); } } Future updateAction( Function(dynamic) onSuccess, Function(dynamic) onError, {String apiUpdateAction, String paramActivity, String activityAction, List filePaths}) async { var formData = FormData(); filePaths.forEach((f) { formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f))); }); formData.fields.add(MapEntry(paramActivity, activityAction)); try { await dio .post("${ConstCommon.baseUrl}/$apiUpdateAction", data: formData) .then((value) { onSuccess(value.data); }); } on DioError catch (e) { onError(e); } } //Device Future> getDevices(String query) { final client = RestClient(dio); return client.getDevices(query: query); } //Environment Parameter Future> getEnvironmentParameters( {@required int cropId, int page, int size}) { final client = RestClient(dio); return client.getEnvironmentParameters(cropId, page: page, size: size); } }