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.

288 lines
11KB

  1. import 'package:dio/dio.dart';
  2. import 'package:dio_http_cache/dio_http_cache.dart';
  3. import 'package:farm_tpf/custom_model/ActionType.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/action_form/ActionUIForm.dart';
  15. import 'package:farm_tpf/custom_model/action_form/CommonData.dart';
  16. import 'package:farm_tpf/custom_model/action_form/RequestActivity.dart';
  17. import 'package:farm_tpf/custom_model/user.dart';
  18. import 'package:farm_tpf/custom_model/user_request.dart';
  19. import 'package:farm_tpf/data/api/dio_provider.dart';
  20. import 'package:farm_tpf/data/api/rest_client.dart';
  21. import 'package:farm_tpf/models/PagedResult.dart';
  22. import 'package:farm_tpf/utils/const_common.dart';
  23. import 'package:flutter/material.dart';
  24. import '../../presentation/screens/login/models/request_user.dart';
  25. import '../../presentation/screens/login/models/response_user.dart';
  26. class Repository {
  27. final dio = DioProvider();
  28. Future<void> login(
  29. Function(ResponseUser) onSuccess,
  30. Function(String) onError, {
  31. required RequestUser requestUser,
  32. }) async {
  33. try {
  34. var url = ConstCommon.baseUrl + '/account/token';
  35. await dio.post(
  36. url,
  37. data: {
  38. 'username': requestUser.username ?? '',
  39. 'password': requestUser.password ?? '',
  40. },
  41. ).then(
  42. (value) {
  43. var res = ResponseUser.fromJson(value.data);
  44. onSuccess(res);
  45. },
  46. ).catchError((error) {
  47. var dioError = error as DioError;
  48. var message = dioError.response?.data['Error'];
  49. onError(message);
  50. });
  51. } catch (e) {
  52. onError('Đã có lỗi xảy ra');
  53. }
  54. }
  55. Future<List<ActionType>> getActionTypes() {
  56. final client = RestClient(dio);
  57. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  58. return client.getActionTypes(options: op);
  59. }
  60. Future<List<Harvest>> getHarvests() {
  61. final client = RestClient(dio);
  62. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  63. return client.getHarvests(options: op);
  64. }
  65. Future<List<WaterType>> getWaterTypes() {
  66. final client = RestClient(dio);
  67. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  68. return client.getWaterTypes(options: op);
  69. }
  70. Future<CropPlot> getPlotDetail(int cropId, {int page = 0, int size = 20}) {
  71. final client = RestClient(dio);
  72. return client.getCropDetail(cropId, page: page, size: size);
  73. }
  74. Future<CropPlot> getPlotDetailByCode(String cropCode) {
  75. final client = RestClient(dio);
  76. return client.getCropDetailByCode(cropCode);
  77. }
  78. Future<List<TbCropDTO>> getPlots({int page = 0, int size = 20, String searchString = ''}) {
  79. final client = RestClient(dio);
  80. return client.getPlots(page: page, size: size, query: searchString);
  81. }
  82. Future<void> updatePlot(TbCropDTO tbCropDTO) {
  83. final client = RestClient(dio);
  84. return client.updateCrop(tbCropDTO);
  85. }
  86. Future<User> signInWithCredentials(String username, String password) {
  87. final client = RestClient(dio);
  88. return client.login(UserRequest(username: username, password: password));
  89. }
  90. Future<PagedResult<T>> getInfinityList<T>(String url, {int page = 0, int size = 20}) async {
  91. var initUrl = "/api/activities/latest-env-by-activity-type/1/2";
  92. var url = ConstCommon.baseUrl + initUrl + "?page=$page&paged=true&size=$size";
  93. var response = await dio.get(url);
  94. final value = PagedResult<T>.fromJson(response.data, getInstanceClass());
  95. return value;
  96. }
  97. Future<List<Supply>> getSupplies(String type, {String query = ""}) async {
  98. final client = RestClient(dio);
  99. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  100. return client.getSupplies(type, query: query, options: op);
  101. }
  102. Future<List<Device>> getDeviceForActivity() async {
  103. final client = RestClient(dio);
  104. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  105. return client.getDeviceForActivity(options: op);
  106. }
  107. Future<void> updateAllNotification(String status) {
  108. final client = RestClient(dio);
  109. return client.updateAllNotification(status);
  110. }
  111. Future<void> updateNoti(UpdateNoti updateNoti) {
  112. final client = RestClient(dio);
  113. return client.updateNoti(updateNoti);
  114. }
  115. Future<NotificationObjectDTO> getNotifications({int page = 0, int size = 20}) async {
  116. var url = ConstCommon.baseUrl + "/api/notifications-current-user?page=$page&size=$size&sort=sendDate,DESC";
  117. var response = await dio.get(url);
  118. final value = NotificationObjectDTO.fromJson(response.data);
  119. return value;
  120. }
  121. Future<List<LocationUnit>> getLocationUnits(
  122. {required LocationType locationType, int filterId = -1, int page = 0, int size = 500, String query = ''}) {
  123. final client = RestClient(dio);
  124. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  125. var response;
  126. switch (locationType) {
  127. case LocationType.province:
  128. response = client.getProvinces(filterId, options: op, page: page, size: size, query: query);
  129. break;
  130. case LocationType.district:
  131. response = client.getDistricts(filterId, options: op, page: page, size: size, query: query);
  132. break;
  133. case LocationType.ward:
  134. response = client.getWards(filterId, options: op, page: page, size: size, query: query);
  135. break;
  136. default:
  137. response = client.getCountries(query: query);
  138. }
  139. return response;
  140. }
  141. Object getInstanceClass() {
  142. var instanceClass;
  143. if (1 == 1) {
  144. instanceClass = new TbCropDTO();
  145. }
  146. return instanceClass;
  147. }
  148. //Action
  149. Future<void> createAction(Function(dynamic) onSuccess, Function(dynamic) onError,
  150. {String? apiAddAction, String? paramActivity, String? activityAction, List<String>? filePaths}) async {
  151. var formData = FormData();
  152. filePaths?.forEach((f) {
  153. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  154. });
  155. formData.fields.add(MapEntry(paramActivity ?? '', activityAction ?? ''));
  156. try {
  157. await dio.post("${ConstCommon.baseUrl}/$apiAddAction", data: formData).then((value) {
  158. onSuccess(value.data);
  159. });
  160. } on DioError catch (e) {
  161. onError(e);
  162. }
  163. }
  164. Future<void> updateAction(Function(dynamic) onSuccess, Function(dynamic) onError,
  165. {String? apiUpdateAction, String? paramActivity, String? activityAction, List<String>? filePaths}) async {
  166. var formData = FormData();
  167. if (filePaths != null) {
  168. filePaths.forEach((f) {
  169. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  170. });
  171. }
  172. formData.fields.add(MapEntry(paramActivity ?? '', activityAction ?? ''));
  173. try {
  174. await dio.post("${ConstCommon.baseUrl}/$apiUpdateAction", data: formData).then((value) {
  175. onSuccess(value.data);
  176. });
  177. } on DioError catch (e) {
  178. onError(e);
  179. }
  180. }
  181. //Device
  182. Future<List<Device>> getDevices(String query) {
  183. final client = RestClient(dio);
  184. return client.getDevices(query);
  185. }
  186. //Environment Parameter
  187. Future<List<EnvironmentParameter>> getEnvironmentParameters({required int cropId, int page = 0, int size = 20}) {
  188. final client = RestClient(dio);
  189. return client.getEnvironmentParameters(cropId, page: page, size: size);
  190. }
  191. //NEW IMPLEMENT
  192. Future<void> allActionTypes(int cropTypeId, Function(List<ActionType>) onSuccess, Function(dynamic) onError) async {
  193. try {
  194. var url = '${ConstCommon.baseUrl}/api/listActivityTypesCulture/$cropTypeId';
  195. final Response<List<dynamic>> _result = await dio.get(url);
  196. var value = _result.data?.map((dynamic i) => ActionType.fromJson(i as Map<String, dynamic>)).toList();
  197. onSuccess(value ?? []);
  198. } on DioError catch (e) {
  199. onError(e);
  200. }
  201. }
  202. Future<ActionUIForm> getActionUIForm({required int idAction}) {
  203. final client = RestClient(dio);
  204. var op = buildConfigurableCacheOptions(forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  205. return client.getActionUIForm(idAction, op);
  206. }
  207. Future<List<CommonData>> getCommonData({required String tableSupply, required String condition}) async {
  208. var url = '${ConstCommon.baseUrl}/api/get-data-from-table-common?tableName=$tableSupply&condition=$condition';
  209. final Response<List<dynamic>> _result = await dio.get(url);
  210. var value = _result.data?.map((dynamic i) => CommonData.fromJson(i as Map<String, dynamic>)).toList();
  211. return value ?? [];
  212. }
  213. Future<void> createActionCommon(Function(dynamic) onSuccess, Function(dynamic) onError,
  214. {required String activityType, required String activityData, List<String>? filePaths}) async {
  215. var formData = FormData();
  216. if (filePaths != null) {
  217. filePaths.forEach((f) {
  218. formData.files.add(MapEntry('images', MultipartFile.fromFileSync(f)));
  219. });
  220. }
  221. formData.fields.add(MapEntry('tbCommonActivityDTO', activityData));
  222. try {
  223. await dio.post("${ConstCommon.baseUrl}/api/create-common-activity/$activityType", data: formData).then((value) {
  224. onSuccess(value.data);
  225. });
  226. } on DioError catch (e) {
  227. onError(e);
  228. }
  229. }
  230. Future<void> updateActionCommon(Function(dynamic) onSuccess, Function(dynamic) onError,
  231. {required String activityType, required String activityData, List<String>? filePaths}) async {
  232. var formData = FormData();
  233. if (filePaths != null) {
  234. filePaths.forEach((f) {
  235. formData.files.add(MapEntry('images', MultipartFile.fromFileSync(f)));
  236. });
  237. }
  238. formData.fields.add(MapEntry('tbCommonActivityDTO', activityData));
  239. try {
  240. await dio.post("${ConstCommon.baseUrl}/api/update-common-activity/$activityType", data: formData).then((value) {
  241. onSuccess(value.data);
  242. });
  243. } on DioError catch (e) {
  244. onError(e);
  245. }
  246. }
  247. Future<RequestActivity> detailCommonAction({required int activityId, required String activityType}) async {
  248. final client = RestClient(dio);
  249. return client.getDetailActivityCommon(activityType, activityId);
  250. }
  251. }