diff --git a/app/routes.py b/app/routes.py
index 9e4c974..d21d393 100644
--- a/app/routes.py
+++ b/app/routes.py
@@ -159,10 +159,13 @@ def iban(iban) -> str:
{'key':'metatype', 'value': 'rule'}
)
tag_rules = [r.get('name') for r in tag_rules if r.get('name')]
+ tag_rules.sort()
+
cat_rules = parent.db_handler.filter_metadata(
{'key':'metatype', 'value': 'category'}
)
cat_rules = [r.get('name') for r in cat_rules if r.get('name')]
+ cat_rules.sort()
# All distinct Tags
# (must be filtered on our own because TinyDB doesn't support 'distinct' queries)
@@ -390,6 +393,25 @@ def getMeta(rule_filter):
meta = parent.db_handler.filter_metadata(condition=None)
return meta, 200
+ @current_app.route('/api/deleteMeta/', methods=['DELETE'], defaults={'uuid':None})
+ @current_app.route('/api/deleteMeta/Settings
+ Settings ohne uuid werden als neuer Eintrag erstellt. +
diff --git a/handler/BaseDb.py b/handler/BaseDb.py index 1854d82..4b7f078 100644 --- a/handler/BaseDb.py +++ b/handler/BaseDb.py @@ -321,6 +321,17 @@ def set_metadata(self, entry: dict, overwrite: bool=True): """ raise NotImplementedError() + def delete_metadata(self, uuid: str): + """ + Löscht Metadaten aus der Datenbank. + + Args: + uuid (str): Unique ID (key) der zu löschenden Metadaten. + Returns: + dict: Informationen über den Löschvorgang. + """ + raise NotImplementedError() + def get_group_ibans(self, group: str, check_before: bool=False): """ Ruft die Liste von IBANs einer Gruppe aus der Datenbank ab. diff --git a/handler/MongoDb.py b/handler/MongoDb.py index 0f8e079..1148541 100644 --- a/handler/MongoDb.py +++ b/handler/MongoDb.py @@ -257,6 +257,11 @@ def set_metadata(self, entry, overwrite=True): return {'inserted': 0} + def delete_metadata(self, uuid): + collection = self.connection['metadata'] + delete_result = collection.delete_one({'uuid': uuid}) + return {'deleted': delete_result.deleted_count} + def _form_condition(self, condition): """ Erstellt aus einem Condition-Dict eine entsprechende Query @@ -300,7 +305,12 @@ def _form_condition(self, condition): if condition_method == 'all': stmt = {'$all': condition.get('value')} if condition_method == 'exact': - stmt = {'$all': condition.get('value'), '$size': len(condition.get('value'))} + if not condition.get('value'): + # Empty lists + stmt = {'$size': 0} + else: + # Lists with exact members + stmt = {'$all': condition.get('value')} # Nested or Plain Key condition_key = condition.get('key') diff --git a/handler/TinyDb.py b/handler/TinyDb.py index 1b50186..84be64d 100644 --- a/handler/TinyDb.py +++ b/handler/TinyDb.py @@ -310,6 +310,11 @@ def set_metadata(self, entry, overwrite=True): return {'inserted': 0} + def delete_metadata(self, uuid): + collection = self.connection.table('metadata') + deleted_ids = collection.remove(Query().uuid == uuid) + return {'deleted': len(deleted_ids)} + def _form_where(self, condition): """ Erstellt aus einem Condition-Dict eine entsprechende Query