From 27e26ca921e9a9a6382ea783cab4ed422b5d77f6 Mon Sep 17 00:00:00 2001 From: JulianAlcala Date: Fri, 17 Apr 2026 04:00:12 +0200 Subject: [PATCH] refactor(utils): extract query params builder, migrate health and location --- .../datasources/health_query_builder.dart | 29 ++++++++++--------- .../location_remote_datasource_impl.dart | 23 ++++----------- .../utils/lib/src/query_params_builder.dart | 25 ++++++++++++++++ packages/utils/lib/utils.dart | 1 + 4 files changed, 47 insertions(+), 31 deletions(-) create mode 100644 packages/utils/lib/src/query_params_builder.dart diff --git a/modules/legacy/modules/device_management/lib/src/core/data/datasources/health_query_builder.dart b/modules/legacy/modules/device_management/lib/src/core/data/datasources/health_query_builder.dart index f08f8d64..3ccc129e 100644 --- a/modules/legacy/modules/device_management/lib/src/core/data/datasources/health_query_builder.dart +++ b/modules/legacy/modules/device_management/lib/src/core/data/datasources/health_query_builder.dart @@ -1,4 +1,4 @@ -import 'dart:convert'; +import 'package:utils/utils.dart'; enum OrderDirection { asc('ASC'), @@ -18,23 +18,24 @@ class HealthQueryBuilder { List? filters, String orderField = 'occurredAt', }) { - final orderBy = base64Encode( - utf8.encode( - '[{"field":"$orderField","sortDirection":"${orderDirection.value}"}]', - ), - ); - - final params = {'orderBy': orderBy}; + final params = { + 'orderBy': encodeOrderBy(orderField, direction: orderDirection.value), + }; if (pageSize != null) params['pageSize'] = pageSize; if (page != null) params['page'] = page; if (filters != null && filters.isNotEmpty) { - final json = filters - .map( - (f) => {'field': f.field, 'operator': f.operator, 'value': f.value}, - ) - .toList(); - params['filters'] = base64Encode(utf8.encode(jsonEncode(json))); + params['filters'] = encodeFilters( + filters + .map( + (f) => { + 'field': f.field, + 'operator': f.operator, + 'value': f.value, + }, + ) + .toList(), + ); } return params; diff --git a/modules/legacy/modules/location/lib/src/core/data/datasource/location_remote_datasource_impl.dart b/modules/legacy/modules/location/lib/src/core/data/datasource/location_remote_datasource_impl.dart index 7ef4567f..0813e9de 100644 --- a/modules/legacy/modules/location/lib/src/core/data/datasource/location_remote_datasource_impl.dart +++ b/modules/legacy/modules/location/lib/src/core/data/datasource/location_remote_datasource_impl.dart @@ -1,6 +1,5 @@ -import 'dart:convert'; - import 'package:control_panel/control_panel.dart'; +import 'package:utils/utils.dart'; import 'package:dio/dio.dart'; import 'package:legacy_shared/legacy_shared.dart'; import 'package:location/src/core/data/datasource/location_remote_datasource.dart'; @@ -156,22 +155,12 @@ class LocationRemoteDatasourceImpl implements LocationRemoteDatasource { final fromMs = from.millisecondsSinceEpoch; final toMs = to.millisecondsSinceEpoch; - final filters = base64Encode( - utf8.encode( - jsonEncode([ - {'field': 'positionDate', 'operator': 'gte', 'value': fromMs}, - {'field': 'positionDate', 'operator': 'lte', 'value': toMs}, - ]), - ), - ); + final filters = encodeFilters([ + {'field': 'positionDate', 'operator': 'gte', 'value': fromMs}, + {'field': 'positionDate', 'operator': 'lte', 'value': toMs}, + ]); - final orderBy = base64Encode( - utf8.encode( - jsonEncode([ - {'field': 'positionDate', 'sortDirection': 'ASC'}, - ]), - ), - ); + final orderBy = encodeOrderBy('positionDate', direction: 'ASC'); final allPositions = []; int currentPage = 1; diff --git a/packages/utils/lib/src/query_params_builder.dart b/packages/utils/lib/src/query_params_builder.dart new file mode 100644 index 00000000..772f8861 --- /dev/null +++ b/packages/utils/lib/src/query_params_builder.dart @@ -0,0 +1,25 @@ +import 'dart:convert'; + +String encodeOrderBy(String field, {String direction = 'DESC'}) { + return base64Encode( + utf8.encode( + jsonEncode([ + {'field': field, 'sortDirection': direction}, + ]), + ), + ); +} + +String encodeFilters(List> filters) { + return base64Encode(utf8.encode(jsonEncode(filters))); +} + +String encodeFilter({ + required String field, + required String operator, + required dynamic value, +}) { + return encodeFilters([ + {'field': field, 'operator': operator, 'value': value}, + ]); +} diff --git a/packages/utils/lib/utils.dart b/packages/utils/lib/utils.dart index 01c6bbfb..de8e10c1 100644 --- a/packages/utils/lib/utils.dart +++ b/packages/utils/lib/utils.dart @@ -1,4 +1,5 @@ export 'src/date_utils.dart'; export 'src/duration_format.dart'; +export 'src/query_params_builder.dart'; export 'src/size_utils.dart'; export 'src/test.dart';