import "package:dio/dio.dart"; import "package:photos/models/api/entity/data.dart"; import "package:photos/models/api/entity/key.dart"; import "package:photos/models/api/entity/type.dart"; class EntityGateway { final Dio _enteDio; EntityGateway(this._enteDio); Future createKey(String encKey, String header) async { await _enteDio.post( "/user-entity/key", data: { "encryptedKey": encKey, "header": header, }, ); } Future getKey(EntityType type) async { try { final response = await _enteDio.get( "/user-entity/key", queryParameters: { "type": type.typeToString(), }, ); return EntityKey.fromMap(response.data); } on DioError catch (e) { if (e.response != null && (e.response!.statusCode ?? 0) == 404) { throw EntityKeyNotFound(); } else { rethrow; } } catch (e) { rethrow; } } Future createEntity( EntityType type, String encryptedData, String header, ) async { final response = await _enteDio.post( "/user-entity/entity", data: { "encryptedData": encryptedData, "header": header, "type": type.typeToString(), }, ); return EntityData.fromMap(response.data); } Future updateEntity( EntityType type, String id, String encryptedData, String header, ) async { await _enteDio.put( "/user-entity/entity", data: { "id": id, "encryptedData": encryptedData, "header": header, "type": type.typeToString(), }, ); } Future deleteEntity( String id, ) async { await _enteDio.delete( "/user-entity/entity", queryParameters: { "id": id, }, ); } Future> getDiff(int sinceTime, {int limit = 500}) async { final response = await _enteDio.get( "/user-entity/entity/diff", queryParameters: { "sinceTime": sinceTime, "limit": limit, }, ); final List authEntities = []; final diff = response.data["diff"] as List; for (var entry in diff) { final EntityData entity = EntityData.fromMap(entry); authEntities.add(entity); } return authEntities; } } class EntityKeyNotFound extends Error {}