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.

221 lines
7.3KB

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