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.

180 lines
6.8KB

  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(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  25. return client.getActionTypes(options: op);
  26. }
  27. Future<List<Harvest>> getHarvests() {
  28. final client = RestClient(dio);
  29. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  30. return client.getHarvests(options: op);
  31. }
  32. Future<List<WaterType>> getWaterTypes() {
  33. final client = RestClient(dio);
  34. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  35. return client.getWaterTypes(options: op);
  36. }
  37. Future<CropPlot> getPlotDetail(int cropId, {int page = 0, int size = 20}) {
  38. final client = RestClient(dio);
  39. return client.getCropDetail(cropId, page: page, size: size);
  40. }
  41. Future<CropPlot> getPlotDetailByCode(String cropCode, {int page = 0, int size = 20}) {
  42. final client = RestClient(dio);
  43. return client.getCropDetailByCode(cropCode, page: page, size: size);
  44. }
  45. Future<List<Crop>> getPlots({int page = 0, int size = 20, String searchString = ''}) {
  46. final client = RestClient(dio);
  47. return client.getPlots(page: page, size: size, query: searchString);
  48. }
  49. Future<void> updatePlot(TbCropDTO tbCropDTO) {
  50. final client = RestClient(dio);
  51. return client.updateCrop(tbCropDTO);
  52. }
  53. Future<User> signInWithCredentials(String username, String password) {
  54. final client = RestClient(dio);
  55. return client.login(UserRequest(username: username, password: password));
  56. }
  57. Future<PagedResult<T>> getInfinityList<T>(String url, {int page = 0, int size = 20}) async {
  58. var initUrl = "/api/activities/latest-env-by-activity-type/1/2";
  59. var url = ConstCommon.baseUrl + initUrl + "?page=$page&paged=true&size=$size";
  60. var response = await dio.get(url);
  61. final value = PagedResult<T>.fromJson(response.data, getInstanceClass());
  62. return value;
  63. }
  64. Future<List<Supply>> getSupplies(String type, {String query = ""}) async {
  65. final client = RestClient(dio);
  66. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  67. return client.getSupplies(type, query: query, options: op);
  68. }
  69. Future<List<Device>> getDeviceForActivity() async {
  70. final client = RestClient(dio);
  71. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  72. return client.getDeviceForActivity(options: op);
  73. }
  74. Future<void> updateAllNotification(String status) {
  75. final client = RestClient(dio);
  76. return client.updateAllNotification(status);
  77. }
  78. Future<void> updateNoti(UpdateNoti updateNoti) {
  79. final client = RestClient(dio);
  80. return client.updateNoti(updateNoti);
  81. }
  82. Future<NotificationObjectDTO> getNotifications({int page = 0, int size = 20}) async {
  83. var url = ConstCommon.baseUrl + "/api/notifications-current-user?page=$page&size=$size&sort=sendDate,DESC";
  84. var response = await dio.get(url);
  85. final value = NotificationObjectDTO.fromJson(response.data);
  86. return value;
  87. }
  88. Future<List<LocationUnit>> getLocationUnits(
  89. {required LocationType locationType, required int filterId, int page = 0, int size = 500, String query = ''}) {
  90. final client = RestClient(dio);
  91. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  92. var response;
  93. switch (locationType) {
  94. case LocationType.province:
  95. response = client.getProvinces(filterId, options: op, page: page, size: size, query: query);
  96. break;
  97. case LocationType.district:
  98. response = client.getDistricts(filterId, options: op, page: page, size: size, query: query);
  99. break;
  100. case LocationType.ward:
  101. response = client.getWards(filterId, options: op, page: page, size: size, query: query);
  102. break;
  103. default:
  104. response = client.getCountries(query: query);
  105. }
  106. return response;
  107. }
  108. Object getInstanceClass() {
  109. var instanceClass;
  110. if (1 == 1) {
  111. instanceClass = Crop();
  112. }
  113. return instanceClass;
  114. }
  115. //Action
  116. Future<void> createAction(Function(dynamic) onSuccess, Function(dynamic) onError,
  117. {required String apiAddAction, required String paramActivity, required String activityAction, required List<String> filePaths}) async {
  118. var formData = FormData();
  119. filePaths.forEach((f) {
  120. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  121. });
  122. formData.fields.add(MapEntry(paramActivity, activityAction));
  123. try {
  124. await dio.post("${ConstCommon.baseUrl}/$apiAddAction", data: formData).then((value) {
  125. onSuccess(value.data);
  126. });
  127. } on DioError catch (e) {
  128. onError(e);
  129. }
  130. }
  131. Future<void> updateAction(Function(dynamic) onSuccess, Function(dynamic) onError,
  132. {required String apiUpdateAction, required String paramActivity, required String activityAction, required List<String> filePaths}) async {
  133. var formData = FormData();
  134. filePaths.forEach((f) {
  135. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  136. });
  137. formData.fields.add(MapEntry(paramActivity, activityAction));
  138. try {
  139. await dio.post("${ConstCommon.baseUrl}/$apiUpdateAction", data: formData).then((value) {
  140. onSuccess(value.data);
  141. });
  142. } on DioError catch (e) {
  143. onError(e);
  144. }
  145. }
  146. //Device
  147. Future<List<Device>> getDevices(String query) {
  148. final client = RestClient(dio);
  149. return client.getDevices(query: query);
  150. }
  151. //Environment Parameter
  152. Future<List<EnvironmentParameter>> getEnvironmentParameters({required int cropId, int page = 0, int size = 20}) {
  153. final client = RestClient(dio);
  154. return client.getEnvironmentParameters(cropId, page: page, size: size);
  155. }
  156. }