You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

230 lines
7.6KB

  1. import 'dart:convert';
  2. import 'package:dio/dio.dart';
  3. import 'package:dio_http_cache/dio_http_cache.dart';
  4. import 'package:farm_tpf/custom_model/CropPlot.dart';
  5. import 'package:farm_tpf/custom_model/Device.dart';
  6. import 'package:farm_tpf/custom_model/EnvironmentParameter.dart';
  7. import 'package:farm_tpf/custom_model/Harvest.dart';
  8. import 'package:farm_tpf/custom_model/LocationUnit.dart';
  9. import 'package:farm_tpf/custom_model/NotificationObjectDTO.dart';
  10. import 'package:farm_tpf/custom_model/Supply.dart';
  11. import 'package:farm_tpf/custom_model/TbCropDTO.dart';
  12. import 'package:farm_tpf/custom_model/UpdateNoti.dart';
  13. import 'package:farm_tpf/custom_model/WaterType.dart';
  14. import 'package:farm_tpf/custom_model/user.dart';
  15. import 'package:farm_tpf/custom_model/user_request.dart';
  16. import 'package:farm_tpf/data/api/dio_provider.dart';
  17. import 'package:farm_tpf/data/api/rest_client.dart';
  18. import 'package:farm_tpf/models/PagedResult.dart';
  19. import 'package:farm_tpf/models/index.dart';
  20. import 'package:farm_tpf/utils/const_common.dart';
  21. import 'package:flutter/material.dart';
  22. class Repository {
  23. final dio = DioProvider.instance();
  24. Future<List<ActionType>> getActionTypes() {
  25. final client = RestClient(dio);
  26. var op = buildConfigurableCacheOptions(
  27. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  28. return client.getActionTypes(options: op);
  29. }
  30. Future<List<Harvest>> getHarvests() {
  31. final client = RestClient(dio);
  32. var op = buildConfigurableCacheOptions(
  33. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  34. return client.getHarvests(options: op);
  35. }
  36. Future<List<WaterType>> getWaterTypes() {
  37. final client = RestClient(dio);
  38. var op = buildConfigurableCacheOptions(
  39. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  40. return client.getWaterTypes(options: op);
  41. }
  42. Future<CropPlot> getPlotDetail(int cropId, {int page, int size}) {
  43. final client = RestClient(dio);
  44. return client.getCropDetail(cropId, page: page, size: size);
  45. }
  46. Future<CropPlot> getPlotDetailByCode(String cropCode, {int page, int size}) {
  47. final client = RestClient(dio);
  48. return client.getCropDetailByCode(cropCode, page: page, size: size);
  49. }
  50. Future<List<TbCropDTO>> getPlots({int page, int size, String searchString}) {
  51. final client = RestClient(dio);
  52. return client.getPlots(page: page, size: size, query: searchString);
  53. }
  54. Future<void> updatePlot(TbCropDTO tbCropDTO) {
  55. final client = RestClient(dio);
  56. return client.updateCrop(tbCropDTO);
  57. }
  58. Future<User> signInWithCredentials(String username, String password) {
  59. final client = RestClient(dio);
  60. return client.login(UserRequest(username: username, password: password));
  61. }
  62. Future<PagedResult<T>> getInfinityList<T>(String url,
  63. {int page = 0, int size = 20}) async {
  64. var initUrl = "/api/activities/latest-env-by-activity-type/1/2";
  65. var url =
  66. ConstCommon.baseUrl + initUrl + "?page=$page&paged=true&size=$size";
  67. var response = await dio.get(url);
  68. final value = PagedResult<T>.fromJson(response.data, getInstanceClass());
  69. return value;
  70. }
  71. Future<List<Supply>> getSupplies(String type, {String query = ""}) async {
  72. final client = RestClient(dio);
  73. var op = buildConfigurableCacheOptions(
  74. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  75. return client.getSupplies(type, query: query, options: op);
  76. }
  77. Future<List<Device>> getDeviceForActivity() async {
  78. final client = RestClient(dio);
  79. var op = buildConfigurableCacheOptions(
  80. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  81. return client.getDeviceForActivity(options: op);
  82. }
  83. Future<void> updateAllNotification(String status) {
  84. final client = RestClient(dio);
  85. return client.updateAllNotification(status);
  86. }
  87. Future<void> updateNoti(UpdateNoti updateNoti) {
  88. final client = RestClient(dio);
  89. return client.updateNoti(updateNoti);
  90. }
  91. Future<NotificationObjectDTO> getNotifications(
  92. {int page = 0, int size = 20}) async {
  93. var url = ConstCommon.baseUrl +
  94. "/api/notifications-current-user?page=$page&size=$size&sort=sendDate,DESC";
  95. var response = await dio.get(url);
  96. final value = NotificationObjectDTO.fromJson(response.data);
  97. return value;
  98. }
  99. Future<List<LocationUnit>> getLocationUnits(
  100. {@required LocationType locationType,
  101. int filterId,
  102. int page = 0,
  103. int size = 500,
  104. String query = ''}) {
  105. final client = RestClient(dio);
  106. var op = buildConfigurableCacheOptions(
  107. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  108. var response;
  109. switch (locationType) {
  110. case LocationType.province:
  111. response = client.getProvinces(filterId,
  112. options: op, page: page, size: size, query: query);
  113. break;
  114. case LocationType.district:
  115. response = client.getDistricts(filterId,
  116. options: op, page: page, size: size, query: query);
  117. break;
  118. case LocationType.ward:
  119. response = client.getWards(filterId,
  120. options: op, page: page, size: size, query: query);
  121. break;
  122. default:
  123. response = client.getCountries(query: query);
  124. }
  125. return response;
  126. }
  127. Object getInstanceClass() {
  128. var instanceClass;
  129. if (1 == 1) {
  130. instanceClass = new TbCropDTO();
  131. }
  132. return instanceClass;
  133. }
  134. //Action
  135. Future<void> createAction(
  136. Function(dynamic) onSuccess, Function(dynamic) onError,
  137. {String apiAddAction,
  138. String paramActivity,
  139. String activityAction,
  140. List<String> filePaths}) async {
  141. var formData = FormData();
  142. filePaths.forEach((f) {
  143. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  144. });
  145. formData.fields.add(MapEntry(paramActivity, activityAction));
  146. try {
  147. await dio
  148. .post("${ConstCommon.baseUrl}/$apiAddAction", data: formData)
  149. .then((value) {
  150. onSuccess(value.data);
  151. });
  152. } on DioError catch (e) {
  153. onError(e);
  154. }
  155. }
  156. Future<void> updateAction(
  157. Function(dynamic) onSuccess, Function(dynamic) onError,
  158. {String apiUpdateAction,
  159. String paramActivity,
  160. String activityAction,
  161. List<String> filePaths}) async {
  162. var formData = FormData();
  163. filePaths.forEach((f) {
  164. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  165. });
  166. formData.fields.add(MapEntry(paramActivity, activityAction));
  167. try {
  168. await dio
  169. .post("${ConstCommon.baseUrl}/$apiUpdateAction", data: formData)
  170. .then((value) {
  171. onSuccess(value.data);
  172. });
  173. } on DioError catch (e) {
  174. onError(e);
  175. }
  176. }
  177. //Device
  178. Future<List<Device>> getDevices(String query) {
  179. final client = RestClient(dio);
  180. return client.getDevices(query: query);
  181. }
  182. //Environment Parameter
  183. Future<List<EnvironmentParameter>> getEnvironmentParameters(
  184. {@required int cropId, int page, int size}) {
  185. final client = RestClient(dio);
  186. return client.getEnvironmentParameters(cropId, page: page, size: size);
  187. }
  188. //NEW IMPLEMENT
  189. Future<void> actionTypes(int cropTypeId, Function(List<ActionType>) onSuccess,
  190. Function(dynamic) onError) async {
  191. try {
  192. var url =
  193. '${ConstCommon.baseUrl}/api/listActivityTypesCulture/$cropTypeId';
  194. final Response<List<dynamic>> _result = await dio.get(url);
  195. var value = _result.data
  196. .map((dynamic i) => ActionType.fromJson(i as Map<String, dynamic>))
  197. .toList();
  198. onSuccess(value);
  199. } on DioError catch (e) {
  200. onError(e);
  201. }
  202. }
  203. }