Skip to content

Commit b03a78d

Browse files
committed
Login: redirect to app if logged in, tweaks to events/event creation
1 parent 815839a commit b03a78d

File tree

7 files changed

+195
-74
lines changed

7 files changed

+195
-74
lines changed

src/lib/functions/club.remote.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,15 @@ export const getClub = query(z.string(), async (clubId) => {
1313

1414
return Club.parse(result.at(0));
1515
});
16+
17+
export const getClubFromUser = query(z.string(), async (userId) => {
18+
const result = await sql`
19+
SELECT c.*
20+
FROM clubs c
21+
JOIN club_users cu ON c.id = cu.club_id
22+
WHERE cu.user_id = ${userId}
23+
LIMIT 1
24+
`;
25+
if (result.length === 0) return undefined;
26+
return Club.parse(result.at(0));
27+
});

src/lib/functions/events.remote.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export const getEvents = query(z.object({
3737
});
3838

3939
export const createEvent = query(z.object({
40+
id: z.string().optional(),
4041
clubId: z.string(),
4142
semesterId: z.string(),
4243
eventTitle: z.string(),
@@ -45,11 +46,12 @@ export const createEvent = query(z.object({
4546
startDateTime: z.date(),
4647
endDateTime: z.date(),
4748
specialRequests: z.string().optional()
48-
}), async ({ clubId, semesterId, eventTitle, building, roomNumber, startDateTime, endDateTime, specialRequests }) => {
49+
}), async ({ id, clubId, semesterId, eventTitle, building, roomNumber, startDateTime, endDateTime, specialRequests }) => {
4950
const location = `${building} ${roomNumber ?? ""}`.trim();
51+
const eventID = id ?? crypto.randomUUID();
5052
const result = await sql`
51-
INSERT INTO events (club_id, semester_id, name, location, starts_at, ends_at)
52-
VALUES (${clubId}, ${semesterId}, ${eventTitle}, ${location}, ${startDateTime}, ${endDateTime})
53+
INSERT INTO events (id, club_id, semester_id, name, location, starts_at, ends_at)
54+
VALUES (${eventID}, ${clubId}, ${semesterId}, ${eventTitle}, ${location}, ${startDateTime}, ${endDateTime})
5355
RETURNING *;
5456
`;
5557

src/routes/app/+page.server.ts

Lines changed: 143 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,39 @@
11
import { getMostRecentSemesterIncludingActive, sql } from "$lib/server/postgres";
22
import { redirect } from "@sveltejs/kit";
3+
import { getClubFromUser } from "$lib/functions/club.remote";
34
import type { PageServerLoad } from "./$types";
45

56
export 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

Comments
 (0)