File size: 4,039 Bytes
a4cc435
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0c202c6
 
a4cc435
 
 
 
 
 
 
0c202c6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a4cc435
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# 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