Frontend first draft

This commit is contained in:
Arseni
2025-11-13 15:06:15 +03:00
parent e47f343afb
commit ddb54ddfdc
504 changed files with 25498 additions and 1 deletions

View File

@@ -0,0 +1,66 @@
import 'package:logging/logging.dart';
import 'package:pshared/service/authorization/service.dart';
class BasicService<T> {
final String _objectType;
final Logger _logger;
final List<T> Function(Map<String, dynamic> json) fromJson;
Logger get logger => _logger;
BasicService({
required String objectType,
required this.fromJson,
}) : _objectType = objectType, _logger = Logger('service.$objectType');
Future<List<T>> list(String organizationRef, String parentRef) async {
_logger.fine('Loading all objects');
return _getObjects(
AuthorizationService.getGETResponse(_objectType, '/list/$organizationRef/$parentRef'),
);
}
Future<T> get(String objectRef) async {
_logger.fine('Loading object $objectRef');
final objects = await _getObjects(
AuthorizationService.getGETResponse(_objectType, '/$objectRef'),
);
return objects.first;
}
Future<List<T>> create(String organizationRef, Map<String, dynamic> request) async {
_logger.fine('Creating new object...');
return _getObjects(
AuthorizationService.getPOSTResponse(_objectType, '/$organizationRef', request),
);
}
Future<List<T>> update(Map<String, dynamic> request) async {
_logger.fine('Patching object...');
return _getObjects(
AuthorizationService.getPUTResponse(_objectType, '/', request,
),
);
}
Future<List<T>> delete(String objecRef) async {
_logger.fine('Deleting object $objecRef');
return _getObjects(
AuthorizationService.getDELETEResponse(_objectType, '/$objecRef', {}),
);
}
Future<List<T>> _getObjects(Future<Map<String, dynamic>> future) async {
try {
final responseJson = await future;
final objects = fromJson(responseJson);
_logger.fine('Fetched ${objects.length} object(s)');
return objects;
} catch (e, stackTrace) {
_logger.severe('Failed to fetch objects', e, stackTrace);
rethrow;
}
}
}