11import { getMostRecentSemesterIncludingActive , sql } from "$lib/server/postgres" ;
22import { redirect } from "@sveltejs/kit" ;
3+ import { getClubFromUser } from "$lib/functions/club.remote" ;
34import type { PageServerLoad } from "./$types" ;
45
56export const load : PageServerLoad = async ( { locals } ) => {
67 if ( ! locals . user ) redirect ( 303 , "/login" ) ;
78
9+ const userClub = await getClubFromUser ( locals . user . id ) ;
810 const semester = await getMostRecentSemesterIncludingActive ( ) ;
911
12+ // Platform-wide statistics
1013 const [
1114 upcomingEventsResult ,
1215 uniqueClubsHostingEventsResult ,
13- eventsHostedSemResult ,
14- pointsEarnedSemResult ,
15- attendanceCountSemResult ,
16- allEventsHostedResult ,
17- allPointsEarnedResult ,
18- allAttendanceCountResult ,
16+ platformSemesterEventsResult ,
17+ platformSemesterPointsResult ,
18+ platformSemesterAttendanceResult ,
19+ platformAllTimeEventsResult ,
20+ platformAllTimePointsResult ,
21+ platformAllTimeAttendanceResult ,
1922 ] = await Promise . all ( [
20- // upcoming
2123 sql `
22- SELECT COUNT(*)
24+ SELECT COUNT(*) as count
2325 FROM events
24- WHERE starts_at > now() AND starts_at < ${ semester . ends }
26+ WHERE semester_id = ${ semester . id }
2527 ` ,
2628 sql `
27- SELECT COUNT(DISTINCT( club_id))
29+ SELECT COUNT(DISTINCT club_id) as count
2830 FROM events
29- WHERE ends_at > now() AND starts_at < ${ semester . ends }
31+ WHERE semester_id = ${ semester . id }
3032 ` ,
31-
32- // semester specific
3333 sql `
34- SELECT COUNT(*)
34+ SELECT COUNT(*) as count
3535 FROM events
36- WHERE starts_at < now() AND starts_at < ${ semester . ends }
36+ WHERE semester_id = ${ semester . id }
3737 ` ,
3838 sql `
3939 SELECT SUM(e.point_value) as total_points
@@ -42,15 +42,13 @@ export const load: PageServerLoad = async ({ locals }) => {
4242 WHERE e.semester_id = ${ semester . id }
4343 ` ,
4444 sql `
45- SELECT COUNT(t.id)
45+ SELECT COUNT(t.id) as count
4646 FROM taps t
4747 JOIN events e ON t.event_id = e.id
4848 WHERE e.semester_id = ${ semester . id }
4949 ` ,
50-
51- //all time
5250 sql `
53- SELECT COUNT(*)
51+ SELECT COUNT(*) as count
5452 FROM events
5553 WHERE starts_at < now()
5654 ` ,
@@ -60,42 +58,150 @@ export const load: PageServerLoad = async ({ locals }) => {
6058 JOIN events e ON t.event_id = e.id
6159 ` ,
6260 sql `
63- SELECT COUNT(t.id)
61+ SELECT COUNT(t.id) as count
6462 FROM taps t
6563 JOIN events e ON t.event_id = e.id
6664 ` ,
6765 ] ) ;
6866
69- const upcomingEvents = Number ( upcomingEventsResult [ 0 ] ?. count ?? 0 ) ;
70- const uniqueClubsHostingEvents = Number ( uniqueClubsHostingEventsResult [ 0 ] ?. count ?? 0 ) ;
71- const eventsHostedSemester = Number ( eventsHostedSemResult [ 0 ] ?. count ?? 0 ) ;
72- const pointsEarnedSemester = Number ( pointsEarnedSemResult [ 0 ] ?. total_points ?? 0 ) ;
73- const attendanceCountSem = Number ( attendanceCountSemResult [ 0 ] ?. count ?? 0 ) ;
74- const allEventsHosted = Number ( allEventsHostedResult [ 0 ] ?. count ?? 0 ) ;
75- const allPointsEarned = Number ( allPointsEarnedResult [ 0 ] ?. total_points ?? 0 ) ;
76- const allAttendanceCount = Number ( allAttendanceCountResult [ 0 ] ?. count ?? 0 ) ;
67+ let clubStats : {
68+ semester : {
69+ eventsHosted : number ;
70+ pointsEarned : number ;
71+ attendanceCount : number ;
72+ upcomingEvents : number ;
73+ } ;
74+ allTime : {
75+ eventsHosted : number ;
76+ pointsEarned : number ;
77+ attendanceCount : number ;
78+ } ;
79+ members : number ;
80+ } | undefined ;
81+
82+ if ( userClub ) {
83+ const [
84+ clubMembersResult ,
85+ clubSemesterEventsResult ,
86+ clubSemesterPointsResult ,
87+ clubSemesterAttendanceResult ,
88+ clubUpcomingEventsResult ,
89+ clubAllTimeEventsResult ,
90+ clubAllTimePointsResult ,
91+ clubAllTimeAttendanceResult ,
92+ ] = await Promise . all ( [
93+ sql `
94+ SELECT COUNT(*) as count
95+ FROM club_users
96+ WHERE club_id = ${ userClub . id }
97+ AND for_semester = ${ semester . id }
98+ ` ,
99+ sql `
100+ SELECT COUNT(*) as count
101+ FROM events
102+ WHERE club_id = ${ userClub . id } AND semester_id = ${ semester . id }
103+ ` ,
104+ sql `
105+ SELECT SUM(e.point_value) as total_points
106+ FROM taps t
107+ JOIN events e ON t.event_id = e.id
108+ WHERE e.club_id = ${ userClub . id } AND e.semester_id = ${ semester . id }
109+ ` ,
110+ sql `
111+ SELECT COUNT(t.id) as count
112+ FROM taps t
113+ JOIN events e ON t.event_id = e.id
114+ WHERE e.club_id = ${ userClub . id } AND e.semester_id = ${ semester . id }
115+ ` ,
116+ sql `
117+ SELECT COUNT(*) as count
118+ FROM events
119+ WHERE club_id = ${ userClub . id }
120+ AND starts_at > now()
121+ AND semester_id = ${ semester . id }
122+ ` ,
123+ sql `
124+ SELECT COUNT(*) as count
125+ FROM events
126+ WHERE club_id = ${ userClub . id }
127+ ` ,
128+ sql `
129+ SELECT SUM(e.point_value) as total_points
130+ FROM taps t
131+ JOIN events e ON t.event_id = e.id
132+ WHERE e.club_id = ${ userClub . id }
133+ ` ,
134+ sql `
135+ SELECT COUNT(t.id) as count
136+ FROM taps t
137+ JOIN events e ON t.event_id = e.id
138+ WHERE e.club_id = ${ userClub . id }
139+ ` ,
140+ ] ) ;
141+
142+ clubStats = {
143+ semester : {
144+ eventsHosted : Number ( clubSemesterEventsResult [ 0 ] ?. count ?? 0 ) ,
145+ pointsEarned : Number ( clubSemesterPointsResult [ 0 ] ?. total_points ?? 0 ) ,
146+ attendanceCount : Number ( clubSemesterAttendanceResult [ 0 ] ?. count ?? 0 ) ,
147+ upcomingEvents : Number ( clubUpcomingEventsResult [ 0 ] ?. count ?? 0 ) ,
148+ } ,
149+ allTime : {
150+ eventsHosted : Number ( clubAllTimeEventsResult [ 0 ] ?. count ?? 0 ) ,
151+ pointsEarned : Number ( clubAllTimePointsResult [ 0 ] ?. total_points ?? 0 ) ,
152+ attendanceCount : Number ( clubAllTimeAttendanceResult [ 0 ] ?. count ?? 0 ) ,
153+ } ,
154+ members : Number ( clubMembersResult [ 0 ] ?. count ?? 0 ) ,
155+ } ;
156+ }
77157
78158 const nameGreetings = [
79159 "Hey there, " ,
80160 "Welcome back, " ,
81161 "Good to see you, " ,
82- "Hello , " ,
162+ "Sup , " ,
83163 "Hi there, " ,
84164 "Howdy, " ,
85165 "What's up, " ,
86166 "Ahoy, " ,
87167 "Today's a good day, " ,
88168 ] ;
89169
170+ console . log ( {
171+ greeting : nameGreetings [ Math . floor ( Math . random ( ) * nameGreetings . length ) ] ,
172+ club : clubStats ,
173+ platform : {
174+ semester : {
175+ eventsHosted : Number ( platformSemesterEventsResult [ 0 ] ?. count ?? 0 ) ,
176+ pointsEarned : Number ( platformSemesterPointsResult [ 0 ] ?. total_points ?? 0 ) ,
177+ attendanceCount : Number ( platformSemesterAttendanceResult [ 0 ] ?. count ?? 0 ) ,
178+ upcomingEvents : Number ( upcomingEventsResult [ 0 ] ?. count ?? 0 ) ,
179+ uniqueClubsHostingEvents : Number ( uniqueClubsHostingEventsResult [ 0 ] ?. count ?? 0 ) ,
180+ } ,
181+ allTime : {
182+ eventsHosted : Number ( platformAllTimeEventsResult [ 0 ] ?. count ?? 0 ) ,
183+ pointsEarned : Number ( platformAllTimePointsResult [ 0 ] ?. total_points ?? 0 ) ,
184+ attendanceCount : Number ( platformAllTimeAttendanceResult [ 0 ] ?. count ?? 0 ) ,
185+ } ,
186+ } ,
187+ } ) ;
188+
90189 return {
91190 greeting : nameGreetings [ Math . floor ( Math . random ( ) * nameGreetings . length ) ] ,
92- upcomingEvents,
93- uniqueClubsHostingEvents,
94- eventsHostedSemester,
95- pointsEarnedSemester,
96- attendanceCountSem,
97- allEventsHosted,
98- allPointsEarned,
99- allAttendanceCount,
191+ club : clubStats ,
192+ platform : {
193+ semester : {
194+ eventsHosted : Number ( platformSemesterEventsResult [ 0 ] ?. count ?? 0 ) ,
195+ pointsEarned : Number ( platformSemesterPointsResult [ 0 ] ?. total_points ?? 0 ) ,
196+ attendanceCount : Number ( platformSemesterAttendanceResult [ 0 ] ?. count ?? 0 ) ,
197+ upcomingEvents : Number ( upcomingEventsResult [ 0 ] ?. count ?? 0 ) ,
198+ uniqueClubsHostingEvents : Number ( uniqueClubsHostingEventsResult [ 0 ] ?. count ?? 0 ) ,
199+ } ,
200+ allTime : {
201+ eventsHosted : Number ( platformAllTimeEventsResult [ 0 ] ?. count ?? 0 ) ,
202+ pointsEarned : Number ( platformAllTimePointsResult [ 0 ] ?. total_points ?? 0 ) ,
203+ attendanceCount : Number ( platformAllTimeAttendanceResult [ 0 ] ?. count ?? 0 ) ,
204+ } ,
205+ } ,
100206 } ;
101207} ;
0 commit comments