Skip to content

Commit 103add2

Browse files
Merge pull request #133 from ISE-GenAI-TechX25-Section-D/moveLeaderboard
Move leaderboard
2 parents d9a7bde + db0c4d7 commit 103add2

11 files changed

Lines changed: 245 additions & 139 deletions

app.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,13 @@
1414
from auth_page import display_auth, logout
1515
from sidebar import display_sidebar
1616
from modules import post_creation_box, manual_workout_box, add_friend_box
17+
from leaderboard_page import render_leaderboards
1718

1819

1920
def display_app_page():
2021
"""Displays the home page of the app."""
22+
23+
sl.set_page_config(layout="wide")
2124

2225
if 'userId' not in sl.session_state:
2326
# sl.session_state.userId = 'user1'
@@ -37,8 +40,8 @@ def display_app_page():
3740

3841
selected = option_menu(
3942
menu_title=None, # Appears at top of sidebar
40-
options=["Home", "Activities", "Community"],
41-
icons=["house", "bar-chart", "heart"], # Choose icons from https://icons.getbootstrap.com/
43+
options=["Home", "Activities", "Community","LeaderBoards"],
44+
icons=["house", "bar-chart", "heart","trophy"], # Choose icons from https://icons.getbootstrap.com/
4245
default_index=0,
4346
menu_icon="cast",
4447
orientation="horizontal",
@@ -73,6 +76,10 @@ def display_app_page():
7376
elif selected == "Community":
7477
display_community(userId)
7578

79+
80+
elif selected == "LeaderBoards":
81+
render_leaderboards(userId)
82+
7683
selected_action = display_sidebar(userId)
7784

7885
if selected_action == "Create Post":

community_page.py

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import streamlit as sl
2-
from modules import display_my_custom_component, display_post, display_genai_advice, display_calories_leaderboard_global, display_friends_leaderboard,post_creation_box, add_friend_box
3-
from data_fetcher import get_user_posts, get_user_profile, get_genai_advice, get_user_friends,get_friends_calories_list,get_global_calories_list, insert_user_post
2+
from modules import display_my_custom_component, display_post, display_genai_advice, display_global_leaderboard, display_friends_leaderboard,post_creation_box, add_friend_box
3+
from data_fetcher import get_user_posts, get_user_profile, get_genai_advice, get_user_friends,get_friends_calories_list,get_global_calories_list, insert_user_post, get_global_distance_list, get_global_steps_list, get_friends_distance_list, get_friends_steps_list
44

55
def display_community(user_id):
66

@@ -9,13 +9,13 @@ def display_community(user_id):
99

1010
sl.subheader(f" {user_profile['full_name']}'s")
1111

12-
tab1, tab2, tab3, tab4 = sl.tabs(["👥 Friends' Posts", "GenAI Advice", "👤 My Posts", "🏆 Leaderboards"])
12+
tab1, tab2, tab3 = sl.tabs(["👥 Friends' Posts", "GenAI Advice", "👤 My Posts"])
1313

1414
with tab1:
15+
add_friend_box(user_id)
1516
if len(get_user_friends(user_id)) <= 0:
1617
sl.info("You haven't added any friends yet!")
1718
else:
18-
add_friend_box(user_id)
1919
sl.markdown("---")
2020
display_post(user_id)
2121

@@ -41,13 +41,4 @@ def display_community(user_id):
4141
sl.markdown("---")
4242
else:
4343
sl.info("You haven't posted anything yet.")
44-
45-
with tab4:
46-
sl.markdown("---")
47-
sl.subheader("🏆 Leaderboards")
48-
leaderboard_type = sl.radio("Select Leaderboard:", ["Global", "Friends"])
49-
50-
if leaderboard_type == "Global":
51-
display_calories_leaderboard_global(streamlit_module=sl)
52-
elif leaderboard_type == "Friends":
53-
display_friends_leaderboard(user_id=user_id, streamlit_module=sl)
44+

data_fetcher.py

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,127 @@ def get_friends_calories_list(user_id, client: bigquery.Client= None):
640640
sorted_friends_calories_list = sorted_friends_calories_list[:10]
641641
return sorted_friends_calories_list
642642

643+
def get_global_distance_list(client: bigquery.Client = None):
644+
if client is None:
645+
client = bigquery.Client()
646+
query = client.query('''
647+
SELECT
648+
Users.Name,
649+
SUM(Workouts.TotalDistance) AS TotalDistance,
650+
Users.UserId
651+
FROM
652+
`diegoperez16techx25`.`Committees`.`Users` AS Users
653+
INNER JOIN
654+
`diegoperez16techx25`.`Committees`.`Workouts` AS Workouts
655+
ON
656+
Users.UserId = Workouts.UserId
657+
GROUP BY
658+
1, 3
659+
''')
660+
results = query.result()
661+
distance_list = [(row.Name, float(row.TotalDistance), row.UserId) for row in results]
662+
sorted_list = sorted(distance_list, key=lambda item: item[1], reverse=True)
663+
return sorted_list[:10]
664+
665+
def get_friends_distance_list(user_id, client: bigquery.Client = None):
666+
if client is None:
667+
client = bigquery.Client()
668+
query = client.query(f'''
669+
SELECT
670+
Users.Name,
671+
SUM(Workouts.TotalDistance) AS TotalDistance,
672+
Users.UserId
673+
FROM
674+
`diegoperez16techx25`.Committees.Users
675+
INNER JOIN
676+
`diegoperez16techx25`.Committees.Workouts ON Users.UserId = Workouts.UserId
677+
WHERE
678+
Users.UserId = '{user_id}'
679+
GROUP BY
680+
1, 3
681+
682+
UNION ALL
683+
684+
SELECT
685+
Users.Name,
686+
SUM(Workouts.TotalDistance) AS TotalDistance,
687+
Users.UserId
688+
FROM
689+
`diegoperez16techx25`.Committees.Users AS Users
690+
INNER JOIN
691+
`diegoperez16techx25`.Committees.Friends AS Friends ON Users.UserId = Friends.friend_id
692+
INNER JOIN
693+
`diegoperez16techx25`.Committees.Workouts AS Workouts ON Users.UserId = Workouts.UserId
694+
WHERE
695+
Friends.user_id = '{user_id}'
696+
GROUP BY
697+
1, 3
698+
''')
699+
results = query.result()
700+
distance_list = [(row.Name, float(row.TotalDistance), row.UserId) for row in results]
701+
sorted_list = sorted(distance_list, key=lambda item: item[1], reverse=True)
702+
return sorted_list[:10]
703+
704+
def get_global_steps_list(client: bigquery.Client = None):
705+
if client is None:
706+
client = bigquery.Client()
707+
query = client.query('''
708+
SELECT
709+
Users.Name,
710+
SUM(Workouts.TotalSteps) AS TotalSteps,
711+
Users.UserId
712+
FROM
713+
`diegoperez16techx25`.`Committees`.`Users` AS Users
714+
INNER JOIN
715+
`diegoperez16techx25`.`Committees`.`Workouts` AS Workouts
716+
ON
717+
Users.UserId = Workouts.UserId
718+
GROUP BY
719+
1, 3
720+
''')
721+
results = query.result()
722+
steps_list = [(row.Name, int(row.TotalSteps), row.UserId) for row in results]
723+
sorted_list = sorted(steps_list, key=lambda item: item[1], reverse=True)
724+
return sorted_list[:10]
725+
726+
def get_friends_steps_list(user_id, client: bigquery.Client = None):
727+
if client is None:
728+
client = bigquery.Client()
729+
query = client.query(f'''
730+
SELECT
731+
Users.Name,
732+
SUM(Workouts.TotalSteps) AS TotalSteps,
733+
Users.UserId
734+
FROM
735+
`diegoperez16techx25`.Committees.Users
736+
INNER JOIN
737+
`diegoperez16techx25`.Committees.Workouts ON Users.UserId = Workouts.UserId
738+
WHERE
739+
Users.UserId = '{user_id}'
740+
GROUP BY
741+
1, 3
742+
743+
UNION ALL
744+
745+
SELECT
746+
Users.Name,
747+
SUM(Workouts.TotalSteps) AS TotalSteps,
748+
Users.UserId
749+
FROM
750+
`diegoperez16techx25`.Committees.Users AS Users
751+
INNER JOIN
752+
`diegoperez16techx25`.Committees.Friends AS Friends ON Users.UserId = Friends.friend_id
753+
INNER JOIN
754+
`diegoperez16techx25`.Committees.Workouts AS Workouts ON Users.UserId = Workouts.UserId
755+
WHERE
756+
Friends.user_id = '{user_id}'
757+
GROUP BY
758+
1, 3
759+
''')
760+
results = query.result()
761+
steps_list = [(row.Name, int(row.TotalSteps), row.UserId) for row in results]
762+
sorted_list = sorted(steps_list, key=lambda item: item[1], reverse=True)
763+
return sorted_list[:10]
643764

644765

645766
def create_new_user(username, name, image_url, date_of_birth, password, query_db=bigquery, execute_query=None):
3.11 MB
Loading
2.63 MB
Loading
2.85 MB
Loading
3.4 MB
Loading
2.84 MB
Loading
3.11 MB
Loading

leaderboard_page.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import streamlit as sl
2+
from modules import display_global_leaderboard, display_friends_leaderboard
3+
from data_fetcher import get_friends_calories_list,get_global_calories_list, insert_user_post, get_global_distance_list, get_global_steps_list, get_friends_distance_list, get_friends_steps_list
4+
5+
def render_leaderboards(user_id):
6+
# sl.markdown("---")
7+
sl.subheader("🏆 Leaderboards")
8+
9+
leaderboard_type = sl.radio("Select Leaderboard:", ["Global", "Friends"], horizontal=True)
10+
metric = sl.radio("Choose Category:", ["calories", "distance", "steps"], horizontal=True)
11+
12+
# Map metrics to fetch functions
13+
global_funcs = {
14+
"calories": get_global_calories_list,
15+
"distance": get_global_distance_list,
16+
"steps": get_global_steps_list
17+
}
18+
19+
friends_funcs = {
20+
"calories": get_friends_calories_list,
21+
"distance": get_friends_distance_list,
22+
"steps": get_friends_steps_list
23+
}
24+
25+
sl.markdown("---")
26+
27+
if leaderboard_type == "Global":
28+
display_global_leaderboard(
29+
metric=metric,
30+
streamlit_module=sl,
31+
get_leaderboard_func=global_funcs[metric],
32+
highlight_user_id=user_id
33+
)
34+
elif leaderboard_type == "Friends":
35+
display_friends_leaderboard(
36+
user_id=user_id,
37+
metric=metric, # comes from the radio button above
38+
streamlit_module=sl
39+
)

0 commit comments

Comments
 (0)