File size: 4,263 Bytes
a4cc435
294884c
a4cc435
 
 
048f218
 
bbd997e
 
a4cc435
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
048f218
a4cc435
 
 
 
 
048f218
a4cc435
 
 
 
 
 
048f218
a4cc435
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
bbd997e
a4cc435
 
 
 
 
 
 
 
 
 
 
 
 
 
bbd997e
a4cc435
 
 
 
 
 
 
 
 
 
 
 
 
 
 
103cfcd
a4cc435
bbd997e
d1d8602
 
a4cc435
d1d8602
 
a4cc435
103cfcd
4eab69a
9f13856
9bb2f7c
 
4eab69a
9bb2f7c
4eab69a
9bb2f7c
4eab69a
103cfcd
bbd997e
d1d8602
 
 
 
 
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
121
122
123
124
125
126


from gamification.objects import UserPoints ,SimpleIndividualUserLevel,IndividualUserLevel,UserLevel
from gamification.imports import *
from gamification.levelLogic import get_all_levels_func
from concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor(max_workers=5)


# utils 
def get_particular_level(totalPoints,dreamJob)->UserLevel:
    # query db and get the results of all the level probably re use a function 
    levels = get_all_levels_func()
    particularLevel= [level for level in levels if (level.maxPoints >= totalPoints) and (level.minPoints<=totalPoints)and (level.careerPath==dreamJob)]
    defaulLevel= [level for level in levels if level.levelName=="default" ]
    if len(particularLevel)>0:
        return particularLevel
    return defaulLevel


def get_dream_job(userId):
    db_uri=MONGO_URI
    db_name = "crayonics"
    collection_name = "Questionaire"
    client = MongoClient(db_uri)
    db = client[db_name]
    collection = db[collection_name]
    questionaire_doc = collection.find_one({"userId": userId})
    if questionaire_doc:
        return questionaire_doc['dreamRole']
    else: return False


def create_points_func(document:UserPoints)->bool:
    from app import handle_change3
    db_uri = MONGO_URI
    db_name = "crayonics"
    collection_name="Points"
    client = MongoClient(db_uri)
    db = client[db_name]
    
    collection = db[collection_name]
    
    if document!=None:
        doc = document.model_dump()
        doc['earnedAt']=datetime.now()
        result = collection.insert_one(doc)
        executor.submit (handle_change3 , document.userId)
        return True
    else:
        client.close()
        return False



def get_all_points_func(userId) -> IndividualUserLevel:
    db_uri = MONGO_URI
    db_name = "crayonics"
    collection_name = "Points"
    client = MongoClient(db_uri)
    db = client[db_name]
    collection = db[collection_name]
    dreamJob = get_dream_job(userId=userId)
    
    point_cursor = collection.find({"userId": userId}) 
    
    # Convert the cursor to a list so we can reuse it
    points_list = list(point_cursor)
    
    # Calculate the total points
    totalPoints = sum([point['numOfPoints'] for point in points_list])
    particularLevelInfo = get_particular_level(dreamJob=dreamJob,totalPoints=totalPoints)
    # Create the individual points list
    individualPoints = [indpoint for indpoint in points_list]
    
    print([pointss for pointss in individualPoints if all(val is not None for val in pointss.values())])

    
    # Create the IndividualUserLevel object with totalPoints and individualPoints
    points = IndividualUserLevel(totalpoints=totalPoints,levelName=particularLevelInfo[0].levelName,minPoints=particularLevelInfo[0].minPoints,maxPoints=particularLevelInfo[0].maxPoints,levelNumber=particularLevelInfo[0].levelNumber, individualPoints=individualPoints)
    
    return points





def get_all_simple_points_func(userId) -> SimpleIndividualUserLevel:
    db_uri = MONGO_URI
    db_name = "crayonics"
    collection_name = "Points"
    client = MongoClient(db_uri)
    db = client[db_name]
    collection = db[collection_name]
    dreamJob = get_dream_job(userId=userId)
<<<<<<< HEAD
    
    point_cursor = collection.find({"userId": userId})
    try:
        points_list = list(point_cursor)
    
        totalPoints = sum([point['numOfPoints'] for point in points_list])
        particularLevelInfo = get_particular_level(dreamJob=dreamJob,totalPoints=totalPoints)

=======
    print(dreamJob)
    point_cursor = collection.find({"userId": userId})
    try:
        points_list = list(point_cursor)
        
        totalPoints = sum([point['numOfPoints'] for point in points_list])
        
        particularLevelInfo = get_particular_level(dreamJob=dreamJob,totalPoints=totalPoints)
        print(particularLevelInfo)
>>>>>>> master
        points = SimpleIndividualUserLevel(totalpoints=totalPoints,levelName=particularLevelInfo[0].levelName,maxPoints=particularLevelInfo[0].maxPoints,minPoints=particularLevelInfo[0].minPoints,levelNumber=particularLevelInfo[0].levelNumber)
    except:
        totalPoints = 0

        points = SimpleIndividualUserLevel(totalpoints=totalPoints)
        
    return points