# levels from gamification.imports import * from gamification.objects import UserLevel def create_level_func(document:UserLevel,)->bool: """ Creates a UserLevel document in the MongoDB collection. :param UserLevel: Actually accepts an Instance of UserLevel and deserializes it here :param maxPoints: Maximum Amount of points for this level. :param minPoints: Minimum Amount of points for this level. :param levelNumber: Number for this level. :param careerPath: Career Path Special for this level. """ db_uri = MONGO_URI db_name = "crayonics" collection_name="Level" client = MongoClient(db_uri) db = client[db_name] collection = db[collection_name] should_proceed= (collection.find_one(document.model_dump())) # Insert the document if should_proceed==None: if document!=None: result = collection.insert_one(document.model_dump(exclude_none=True)) return True else: client.close() return False else: # The exact document already exists so it can't be created again return False def get_all_levels_func(admin=False,career=None ) -> List[UserLevel]: # MongoDB URI and configuration db_uri = MONGO_URI db_name = "crayonics" collection_name="Level" client = MongoClient(db_uri) db = client[db_name] collection = db[collection_name] levels_cursor = collection.find() if admin == False: # case where the person making a request is not an admin if career == None: # Convert the cursor to a list of UserLevel objects levels = [UserLevel(**level) for level in levels_cursor] returning_levels= [returns for returns in levels ] return returning_levels else: levels = [UserLevel(**level) for level in levels_cursor] returning_levels= [returns for returns in levels if (returns.careerPath==career)] return returning_levels else: # case where the person making a request is an admin levels = [UserLevel(**level) for level in levels_cursor] returning_levels= [returns for returns in levels if (returns.levelName!="default" and returns.careerPath!="default")] return returning_levels def delete_level_func(level_id,)->bool: db_uri = MONGO_URI db_name = "crayonics" collection_name="Level" client = MongoClient(db_uri) db = client[db_name] collection = db[collection_name] if isinstance(level_id, str): level_id = ObjectId(level_id) result = collection.delete_one(filter={"_id":level_id}) if result.acknowledged==True: if result.deleted_count ==0: return False else: return True else: return False def edit_level_func(level_id, **kwargs): """ Edit a UserLevel document in the MongoDB collection. :param level_id: The ObjectId or unique identifier of the UserLevel to edit. :param maxPoints: Maximum Amount of points for this level. :param minPoints: Minimum Amount of points for this level. :param levelNumber: Number for this level. :param careerPath: Career Path Special for this level. """ db_uri = MONGO_URI db_name = "crayonics" collection_name="Level" client = MongoClient(db_uri) db = client[db_name] collection = db[collection_name] # Ensure that `level_id` is an ObjectId if using ObjectId as the identifier if isinstance(level_id, str): level_id = ObjectId(level_id) # Prepare the update data update_data = {key: value for key, value in kwargs.items() if value is not None} # Perform the update operation in the collection result = collection.update_one( {"_id": level_id}, # Find the document by its unique identifier (ObjectId or other) {"$set": update_data} # Update the document with the new values ) return result.modified_count