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