File size: 5,285 Bytes
a4cc435
4f7effb
 
27ff250
 
4f7effb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a4cc435
 
 
 
 
 
 
 
 
 
4f7effb
a4cc435
4f7effb
a4cc435
4f7effb
 
 
a4cc435
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86255b9
 
 
 
 
 
 
 
4f7effb
 
 
 
 
 
 
 
 
 
 
a4cc435
4f7effb
 
 
bcabe61
4f7effb
 
 
 
bcabe61
0c202c6
 
 
 
8d89524
0c202c6
 
 
 
 
4f7effb
 
e0c985d
4f7effb
 
 
 
 
 
 
 
7b7e0f0
4f7effb
 
 
a4cc435
 
 
d1d8602
a4cc435
d1d8602
 
a4cc435
 
 
d1d8602
a4cc435
 
4f7effb
 
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
from fastapi import FastAPI,HTTPException, Header
from gamification.objects import *
from gamification.logic import *
from controller.jwtcoding import decode_jwt
from controller.tokenManagement import verify_access_token

class EditableUserLevel(BaseModel):
    levelId : str
    maxPoints : Optional[int]= None
    minPoints : Optional[int]= None
    levelName : Optional[str]= None
    careerPath : Optional[str]= None
    levelNumber : Optional[int]= None
        # To convert MongoDB ObjectId to string, if needed
    class Config:
        json_encoders = {
            ObjectId: str
        }
        
        
gamification = FastAPI()




@gamification.post("/create-feedback",tags=["user"])
def create_feedback(feedback:Feedback,authorization: str = Header(...))->bool:
    
    token = authorization.split("Bearer ")[-1]
    
    # Here, you would validate the token (e.g., check with a JWT library)
    decoded_user_id,decoded_access_token = decode_jwt(token) 
    is_valid = verify_access_token(db_uri=MONGO_URI, user_id=decoded_user_id, access_token=decoded_access_token)
    if is_valid != True:  # Example check
        raise HTTPException(status_code=401, detail="Invalid token")
    
    try:
        user_feedback = UserFeedback(userId=decoded_user_id,respondedAt=datetime.now(), feedback=feedback.feedback,rating=feedback.rating)
        result = create_feedback_func(user_feedback)
        return result
    except Exception as e:
        raise HTTPException(status_code=500,detail=f"{e}")
    

@gamification.get("/get-advanced-user-points",tags=["user"])
def get_points(authorization: str = Header(...))->IndividualUserLevel:
 # Extract the token from the Authorization header (Bearer token)
    token = authorization.split("Bearer ")[-1]
    
    # Here, you would validate the token (e.g., check with a JWT library)
    decoded_user_id,decoded_access_token = decode_jwt(token) 
    is_valid = verify_access_token(db_uri=MONGO_URI, user_id=decoded_user_id, access_token=decoded_access_token)
    
    if is_valid != True:  # Example check
        raise HTTPException(status_code=401, detail="Invalid token")
    
    # do thing u want here
    points = get_all_points_func(userId=decoded_user_id)
    return points.model_dump(exclude_none=True)



@gamification.get("/get-simple-user-points",tags=["user"])
def get_points(authorization: str = Header(...))->SimpleIndividualUserLevel:
 # Extract the token from the Authorization header (Bearer token)
    token = authorization.split("Bearer ")[-1]
    
    # Here, you would validate the token (e.g., check with a JWT library)
    decoded_user_id,decoded_access_token = decode_jwt(token) 
    is_valid = verify_access_token(db_uri=MONGO_URI, user_id=decoded_user_id, access_token=decoded_access_token)
    
    if is_valid != True:  # Example check
        raise HTTPException(status_code=401, detail="Invalid token")
    
    # do thing u want here
    points = get_all_simple_points_func(userId=decoded_user_id)
    return points.model_dump(exclude_none=True)



@gamification.get("/get-customer-info",tags=["admin"])
def get_customer_information():
    try:
        result = get_all_customer_info()
        return result
    except Exception as e:
        raise HTTPException(status_code=500,detail=f"{e}")
    

@gamification.get("/get-feedback",tags=["admin"])
def get_feedback()->List[UserFeedback]:
    feedbacks = get_all_feedback_func()
    return feedbacks



@gamification.post("/create-level",tags=["admin"])
def create_level(level_obj:UserLevel)->bool:
    result = create_level_func(document=level_obj)
    return result



@gamification.get("/get-levels",tags=["admin","user"])
def get_level_details_and_information()->List[UserLevel]:
    levels= get_all_levels_func()
    return levels

@gamification.get("/admin/get-levels",tags=["admin","user"])
def get_level_details_and_information()->List[UserLevel]:
    levels= get_all_levels_func(admin=True)
    return levels

@gamification.get("/get-levels/{careerPath}",tags=["user"])
def get_level_details_and_information(careerPath:str)->List[UserLevel]:
    levels= get_all_levels_func(career=careerPath)
    return levels



@gamification.patch("/edit-level",tags=["admin"])
def edit_level(level_obj:EditableUserLevel):
    result = edit_level_func(level_id=level_obj.levelId,levelName=level_obj.levelName,careerPath=level_obj.careerPath,minPoints=level_obj.minPoints,maxPoints=level_obj.maxPoints,levelNumber=level_obj.levelNumber)
    
    return {"message":result}




@gamification.delete("/delete-level/{levelId}",tags=["admin"])
def delete_level(levelId):
    try:
        result = delete_level_func(level_id=levelId)
        return {"message":result}
    except Exception as e:
        raise HTTPException(status_code=500,detail=f"{e}")
    
from fastapi import BackgroundTasks  
@gamification.get("/get-top-30",tags=["user","admin"])
def get_leaderboard(background_tasks: BackgroundTasks)->List[Ranker]:
    from app import handle_change2
    try:
        list_of_rankers = []
        result = get_top_30()
        background_tasks.add_task(handle_change2, 2)
        list_of_rankers = [Ranker(**ranker) for ranker in result]
        return list_of_rankers
    except Exception as e:
        raise HTTPException(status_code=500,detail=f"{e}")