refactor(utils): extract query params builder, migrate health and location

This commit is contained in:
2026-04-17 04:00:12 +02:00
parent e83adbfdbf
commit 27e26ca921
4 changed files with 47 additions and 31 deletions

View File

@@ -1,4 +1,4 @@
import 'dart:convert';
import 'package:utils/utils.dart';
enum OrderDirection {
asc('ASC'),
@@ -18,23 +18,24 @@ class HealthQueryBuilder {
List<HealthFilter>? filters,
String orderField = 'occurredAt',
}) {
final orderBy = base64Encode(
utf8.encode(
'[{"field":"$orderField","sortDirection":"${orderDirection.value}"}]',
),
);
final params = <String, dynamic>{'orderBy': orderBy};
final params = <String, dynamic>{
'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;

View File

@@ -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 = <PositionEntity>[];
int currentPage = 1;

View File

@@ -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<Map<String, dynamic>> 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},
]);
}

View File

@@ -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';