Skip to content

Commit 812e7a2

Browse files
committed
feat: percentile display
1 parent 80b49f4 commit 812e7a2

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

routers/users_v2_router.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,28 +161,28 @@ async def get_user_time_statistics_v2(
161161
"on-campus": {
162162
"value": user_time["on-campus"],
163163
"group": find_percentile_threshold(
164-
group_indicators["on-campus"], user_time["on-campus"]
164+
group_indicators["on-campus"], user_time["on-campus"], "on-campus"
165165
),
166166
"grade": find_percentile_threshold(
167-
grade_indicators["on-campus"], user_time["on-campus"]
167+
grade_indicators["on-campus"], user_time["on-campus"], "on-campus"
168168
),
169169
},
170170
"off-campus": {
171171
"value": user_time["off-campus"],
172172
"group": find_percentile_threshold(
173-
group_indicators["off-campus"], user_time["off-campus"]
173+
group_indicators["off-campus"], user_time["off-campus"], "off-campus"
174174
),
175175
"grade": find_percentile_threshold(
176-
grade_indicators["off-campus"], user_time["off-campus"]
176+
grade_indicators["off-campus"], user_time["off-campus"], "off-campus"
177177
),
178178
},
179179
"social-practice": {
180180
"value": user_time["social-practice"],
181181
"group": find_percentile_threshold(
182-
group_indicators["social-practice"], user_time["social-practice"]
182+
group_indicators["social-practice"], user_time["social-practice"], "social-practice"
183183
),
184184
"grade": find_percentile_threshold(
185-
grade_indicators["social-practice"], user_time["social-practice"]
185+
grade_indicators["social-practice"], user_time["social-practice"], "social-practice"
186186
),
187187
},
188188
}

util/calculate.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from datetime import datetime
33
from typing import Any
44

5+
from config import BASE_ON_CAMPUS, BASE_OFF_CAMPUS, BASE_SOCIAL_PRACTICE
56
from database import db
67

78

@@ -74,8 +75,16 @@ async def calculate_user_time(
7475
return result
7576

7677

77-
def find_percentile_threshold(percentiles: dict[str, float], target: float):
78-
for key, value in percentiles.items():
79-
if target <= value:
78+
def find_percentile_threshold(percentiles: dict[str, float], target: float, mode: str) -> float:
79+
thresholds = {
80+
'on-campus': BASE_ON_CAMPUS,
81+
'off-campus': BASE_OFF_CAMPUS,
82+
'social-practice': BASE_SOCIAL_PRACTICE,
83+
}
84+
if target >= thresholds[mode]:
85+
return 100
86+
percentiles = sorted(percentiles.items(), key=lambda item: item[1], reverse=True)
87+
for key, value in percentiles:
88+
if target >= value:
8089
return int(key.replace("%", ""))
8190
return 100

0 commit comments

Comments
 (0)