from app_be.views.mongo_db import MongoManager from django.http import JsonResponse from app_be.services.hashservice import create_sha512 class MongoDBService: @staticmethod def check() -> bool: try: instance = MongoManager.getInstance() instance.AIC except: return False return True @staticmethod def getAll(): instance = MongoManager.getInstance() db = instance.AIC col = db.metadata try: for resp in col.find(): print(resp) except: print("Could not find Metadata") return resp @staticmethod def getSingle(identifier): metadata = None try: instance = MongoManager.getInstance() db = instance.AIC col = db.metadata metadata = None resp = col.find({"identifier": identifier}) metadata = resp[0] except: print("Could not find Metadata") if metadata is None: return None else: if '_id' in metadata: del metadata['_id'] return metadata @staticmethod def createSingle(metadata, identifier, decoded_image): instance = MongoManager.getInstance() db = instance.AIC col = db.metadata try: metadata['identifier'] = identifier metadata['location'] = [metadata['longitude'], metadata['latitude']] metadata['sha512'] = create_sha512(decoded_image) col.insert_one(metadata) except: print("Could not insert Metadata") return False return True @staticmethod def updateSingle(identifier, decoded_image) -> bool: print("MongoDBService: Trying to update file with identifier " + identifier) resp = MongoDBService.getSingle(identifier) if resp is None: print("Could not update Metadata: Identifier does not exist") return False i = 0 while MongoDBService.getSingle(identifier + '_' + str(i)) is not None: print("MongoDBService: Version {} exists".format(identifier + '_' + str(i))) i = i + 1 if i == 0: print("MongoDBService: Creating new version with identifier {}".format(identifier + '_' + str(i))) MongoDBService.createSingle(resp, identifier + '_' + str(i), decoded_image) else: resp = MongoDBService.getSingle(identifier + '_' + str(i - 1)) print("MongoDBService: Creating new version with identifier {}".format(identifier + '_' + str(i - 1))) MongoDBService.createSingle(resp, identifier + '_' + str(i), decoded_image) return True @staticmethod def deleteSingle(identifier): instance = MongoManager.getInstance() db = instance.AIC col = db.metadata try: resp = col.delete_one({"identifier": identifier}) return resp except: print("Could not delete Metadata") return resp @staticmethod def deleteAll(): instance = MongoManager.getInstance() db = instance.AIC col = db.metadata try: resp = col.delete_many({}) return resp except: print("Could not delete Metadata") return resp