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.

210 lines
7.0KB

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