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.

165 lines
5.5KB

  1. import 'dart:io';
  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/Supply.dart';
  9. import 'package:farm_tpf/custom_model/WaterType.dart';
  10. import 'package:farm_tpf/custom_model/user.dart';
  11. import 'package:farm_tpf/custom_model/user_request.dart';
  12. import 'package:farm_tpf/data/api/app_exception.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. class Repository {
  20. final dio = DioProvider.instance();
  21. Future<List<ActionType>> getActionTypes() {
  22. final client = RestClient(dio);
  23. var op = buildConfigurableCacheOptions(
  24. 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(
  30. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  31. return client.getHarvests(options: op);
  32. }
  33. Future<List<WaterType>> getWaterTypes() {
  34. final client = RestClient(dio);
  35. var op = buildConfigurableCacheOptions(
  36. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  37. return client.getWaterTypes(options: op);
  38. }
  39. Future<CropPlot> getPlotDetail(int cropId, {int page, int size}) {
  40. final client = RestClient(dio);
  41. return client.getCropDetail(cropId, page: page, size: size);
  42. }
  43. Future<CropPlot> getPlotDetailByCode(String cropCode, {int page, int size}) {
  44. final client = RestClient(dio);
  45. return client.getCropDetailByCode(cropCode, page: page, size: size);
  46. }
  47. Future<List<Crop>> getPlots({int page, int size, String searchString}) {
  48. final client = RestClient(dio);
  49. return client.getPlots(page: page, size: size, query: searchString);
  50. }
  51. Future<void> updatePlot(TbCropDTO tbCropDTO) {
  52. final client = RestClient(dio);
  53. return client.updateCrop(tbCropDTO);
  54. }
  55. Future<User> signInWithCredentials(String username, String password) {
  56. final client = RestClient(dio);
  57. return client.login(UserRequest(username: username, password: password));
  58. }
  59. Future<PagedResult<T>> getInfinityList<T>(String url,
  60. {int page = 0, int size = 20}) async {
  61. var initUrl = "/api/activities/latest-env-by-activity-type/1/2";
  62. var url =
  63. ConstCommon.baseUrl + initUrl + "?page=$page&paged=true&size=$size";
  64. var response = await dio.get(url);
  65. final value = PagedResult<T>.fromJson(response.data, getInstanceClass());
  66. return value;
  67. }
  68. Future<List<Supply>> getSupplies({String query = ""}) async {
  69. final client = RestClient(dio);
  70. var op = buildConfigurableCacheOptions(
  71. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  72. return client.getSupplies(query: query, options: op);
  73. }
  74. Future<List<Device>> getDeviceForActivity() async {
  75. final client = RestClient(dio);
  76. var op = buildConfigurableCacheOptions(
  77. forceRefresh: true, maxAge: Duration(days: ConstCommon.kMaxAgeCache));
  78. return client.getDeviceForActivity(options: op);
  79. }
  80. Object getInstanceClass() {
  81. var instanceClass;
  82. if (1 == 1) {
  83. instanceClass = new Crop();
  84. }
  85. return instanceClass;
  86. }
  87. //Action
  88. Future<void> createAction(
  89. Function(dynamic) onSuccess, Function(String) onError,
  90. {String apiAddAction,
  91. String paramActivity,
  92. String activityAction,
  93. List<String> filePaths}) async {
  94. var formData = FormData();
  95. filePaths.forEach((f) {
  96. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  97. });
  98. formData.fields.add(MapEntry(paramActivity, activityAction));
  99. try {
  100. await dio
  101. .post("${ConstCommon.baseUrl}/$apiAddAction", data: formData)
  102. .then((value) {
  103. onSuccess(value.data);
  104. }).catchError((onError) {
  105. onError(AppException.handleError(onError));
  106. });
  107. } catch (e) {
  108. onError(AppException.handleError(e));
  109. }
  110. }
  111. Future<void> updateAction(
  112. Function(dynamic) onSuccess, Function(String) onError,
  113. {String apiUpdateAction,
  114. String paramActivity,
  115. String activityAction,
  116. List<String> filePaths}) async {
  117. var formData = FormData();
  118. filePaths.forEach((f) {
  119. formData.files.add(MapEntry("images", MultipartFile.fromFileSync(f)));
  120. });
  121. formData.fields.add(MapEntry(paramActivity, activityAction));
  122. try {
  123. await dio
  124. .post("${ConstCommon.baseUrl}/$apiUpdateAction", data: formData)
  125. .then((value) {
  126. onSuccess(value.data);
  127. }).catchError((onError) {
  128. onError(AppException.handleError(onError));
  129. });
  130. } catch (e) {
  131. onError(AppException.handleError(e));
  132. }
  133. }
  134. //Device
  135. Future<List<Device>> getDevices() {
  136. final client = RestClient(dio);
  137. return client.getDevices();
  138. }
  139. //Environment Parameter
  140. Future<List<EnvironmentParameter>> getEnvironmentParameters(
  141. {@required int cropId, int page, int size}) {
  142. final client = RestClient(dio);
  143. return client.getEnvironmentParameters(cropId, page: page, size: size);
  144. }
  145. }