Spaces:
Sleeping
Sleeping
| # 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 |