diff --git a/apps/web/src/app/schedule/page.tsx b/apps/web/src/app/schedule/page.tsx index 7e234311..868914a7 100644 --- a/apps/web/src/app/schedule/page.tsx +++ b/apps/web/src/app/schedule/page.tsx @@ -1,17 +1,68 @@ import { Suspense } from "react"; -import Loading from "@/components/shared/Loading"; import UserScheduleView from "@/components/schedule/UserScheduleView"; -import Navbar from "@/components/shared/Navbar"; +import ScheduleTimeline from "../dash/schedule/schedule-timeline"; +import Loading from "@/components/shared/Loading"; +import { getAllEvents } from "db/functions"; +import { headers } from "next/headers"; +import { VERCEL_IP_TIMEZONE_HEADER_KEY } from "@/lib/constants"; +import { getClientTimeZone } from "@/lib/utils/client/shared"; +import { Badge } from "@/components/shadcn/ui/badge"; +import c from "config"; import { Skeleton } from "@/components/shadcn/ui/skeleton"; -export default function EventsPage() { +import Navbar from "@/components/shared/Navbar"; +export default async function Page() { + const sched = await getAllEvents(); + + const currentEvent = sched.filter((e) => { + const currentTime = new Date(); + return e.startTime < currentTime && e.endTime > currentTime; + })[0]; + const userTimeZoneHeaderKey = headers().get(VERCEL_IP_TIMEZONE_HEADER_KEY); + const userTimeZone = getClientTimeZone(userTimeZoneHeaderKey); return ( <> }> +
+

+ Schedule +

+
+

Current

+
+

+ {currentEvent?.title || "No current events"}{" "} + {currentEvent && ( + + )[currentEvent?.type], + }} + > +

+ {currentEvent?.type} +

+ + )} +

+
+
+
+ }> - + {/* */} + ); } + +export const runtime = "edge"; +export const revalidate = 60; diff --git a/packages/db/drizzle/0019_lyrical_thundra.sql b/packages/db/drizzle/0019_lyrical_thundra.sql new file mode 100644 index 00000000..58549057 --- /dev/null +++ b/packages/db/drizzle/0019_lyrical_thundra.sql @@ -0,0 +1,2 @@ +ALTER TABLE "events" ADD COLUMN IF NOT EXISTS "location" varchar(255) DEFAULT 'TBD';--> statement-breakpoint +ALTER TABLE "events" ADD COLUMN IF NOT EXISTS "points" integer DEFAULT 0 NOT NULL; \ No newline at end of file diff --git a/packages/db/drizzle/meta/0019_snapshot.json b/packages/db/drizzle/meta/0019_snapshot.json new file mode 100644 index 00000000..bee0f32c --- /dev/null +++ b/packages/db/drizzle/meta/0019_snapshot.json @@ -0,0 +1,1048 @@ +{ + "id": "5d8d7536-22b1-4791-a4ac-ef1a289a0216", + "prevId": "9b898bb1-0037-4c8e-9146-7779db85ad01", + "version": "7", + "dialect": "postgresql", + "tables": { + "public.chat_messages": { + "name": "chat_messages", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigserial", + "primaryKey": true, + "notNull": true + }, + "chat_id": { + "name": "chat_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "author_id": { + "name": "author_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.chats": { + "name": "chats", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "type": { + "name": "type", + "type": "chat_type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "ticket_id": { + "name": "ticket_id", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "author": { + "name": "author", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": { + "chats_ticket_id_tickets_id_fk": { + "name": "chats_ticket_id_tickets_id_fk", + "tableFrom": "chats", + "tableTo": "tickets", + "columnsFrom": [ + "ticket_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.chats_to_users": { + "name": "chats_to_users", + "schema": "", + "columns": { + "chat_id": { + "name": "chat_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "chats_to_users_chat_id_chats_id_fk": { + "name": "chats_to_users_chat_id_chats_id_fk", + "tableFrom": "chats_to_users", + "tableTo": "chats", + "columnsFrom": [ + "chat_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "chats_to_users_user_id_user_common_data_clerk_id_fk": { + "name": "chats_to_users_user_id_user_common_data_clerk_id_fk", + "tableFrom": "chats_to_users", + "tableTo": "user_common_data", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "clerk_id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "chats_to_users_user_id_chat_id_pk": { + "name": "chats_to_users_user_id_chat_id_pk", + "columns": [ + "user_id", + "chat_id" + ] + } + }, + "uniqueConstraints": {} + }, + "public.discord_verification": { + "name": "discord_verification", + "schema": "", + "columns": { + "code": { + "name": "code", + "type": "varchar(255)", + "primaryKey": true, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "clerk_id": { + "name": "clerk_id", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "discord_user_id": { + "name": "discord_user_id", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "discord_user_tag": { + "name": "discord_user_tag", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "discord_profile_photo": { + "name": "discord_profile_photo", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "discord_name": { + "name": "discord_name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "discord_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + }, + "guild": { + "name": "guild", + "type": "varchar(100)", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.error_log": { + "name": "error_log", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "varchar(50)", + "primaryKey": true, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "user_id": { + "name": "user_id", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "route": { + "name": "route", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "message": { + "name": "message", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.events": { + "name": "events", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "bigserial", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "start_time": { + "name": "start_time", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "end_time": { + "name": "end_time", + "type": "timestamp", + "primaryKey": false, + "notNull": true + }, + "location": { + "name": "location", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false, + "default": "'TBD'" + }, + "points": { + "name": "points", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "type": { + "name": "type", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "host": { + "name": "host", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "hidden": { + "name": "hidden", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "events_id_unique": { + "name": "events_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + } + } + }, + "public.files": { + "name": "files", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "varchar(255)", + "primaryKey": true, + "notNull": true + }, + "presigned_url": { + "name": "presigned_url", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "key": { + "name": "key", + "type": "varchar(500)", + "primaryKey": false, + "notNull": true + }, + "validated": { + "name": "validated", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "type": { + "name": "type", + "type": "type", + "typeSchema": "public", + "primaryKey": false, + "notNull": true + }, + "owner_id": { + "name": "owner_id", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "files_id_unique": { + "name": "files_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + }, + "files_key_unique": { + "name": "files_key_unique", + "nullsNotDistinct": false, + "columns": [ + "key" + ] + } + } + }, + "public.invites": { + "name": "invites", + "schema": "", + "columns": { + "invitee_id": { + "name": "invitee_id", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "team_id": { + "name": "team_id", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "status": { + "name": "status", + "type": "invite_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'pending'" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "invites_invitee_id_team_id_pk": { + "name": "invites_invitee_id_team_id_pk", + "columns": [ + "invitee_id", + "team_id" + ] + } + }, + "uniqueConstraints": {} + }, + "public.scans": { + "name": "scans", + "schema": "", + "columns": { + "updated_at": { + "name": "updated_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "user_id": { + "name": "user_id", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "event_id": { + "name": "event_id", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "count": { + "name": "count", + "type": "integer", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": { + "scans_user_id_event_id_pk": { + "name": "scans_user_id_event_id_pk", + "columns": [ + "user_id", + "event_id" + ] + } + }, + "uniqueConstraints": {} + }, + "public.teams": { + "name": "teams", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "varchar(50)", + "primaryKey": true, + "notNull": true + }, + "name": { + "name": "name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "tag": { + "name": "tag", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "bio": { + "name": "bio", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "photo": { + "name": "photo", + "type": "varchar(400)", + "primaryKey": false, + "notNull": true + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "owner_id": { + "name": "owner_id", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "devpost_url": { + "name": "devpost_url", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "teams_id_unique": { + "name": "teams_id_unique", + "nullsNotDistinct": false, + "columns": [ + "id" + ] + }, + "teams_tag_unique": { + "name": "teams_tag_unique", + "nullsNotDistinct": false, + "columns": [ + "tag" + ] + } + } + }, + "public.tickets": { + "name": "tickets", + "schema": "", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true + }, + "title": { + "name": "title", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "description": { + "name": "description", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "status": { + "name": "status", + "type": "ticket_status", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'awaiting'" + }, + "created_at": { + "name": "created_at", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, + "public.tickets_to_users": { + "name": "tickets_to_users", + "schema": "", + "columns": { + "ticket_id": { + "name": "ticket_id", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "name": "user_id", + "type": "text", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": { + "tickets_to_users_ticket_id_tickets_id_fk": { + "name": "tickets_to_users_ticket_id_tickets_id_fk", + "tableFrom": "tickets_to_users", + "tableTo": "tickets", + "columnsFrom": [ + "ticket_id" + ], + "columnsTo": [ + "id" + ], + "onDelete": "no action", + "onUpdate": "no action" + }, + "tickets_to_users_user_id_user_common_data_clerk_id_fk": { + "name": "tickets_to_users_user_id_user_common_data_clerk_id_fk", + "tableFrom": "tickets_to_users", + "tableTo": "user_common_data", + "columnsFrom": [ + "user_id" + ], + "columnsTo": [ + "clerk_id" + ], + "onDelete": "no action", + "onUpdate": "no action" + } + }, + "compositePrimaryKeys": { + "tickets_to_users_user_id_ticket_id_pk": { + "name": "tickets_to_users_user_id_ticket_id_pk", + "columns": [ + "user_id", + "ticket_id" + ] + } + }, + "uniqueConstraints": {} + }, + "public.user_common_data": { + "name": "user_common_data", + "schema": "", + "columns": { + "clerk_id": { + "name": "clerk_id", + "type": "varchar(255)", + "primaryKey": true, + "notNull": true + }, + "first_name": { + "name": "first_name", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "last_name": { + "name": "last_name", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "email": { + "name": "email", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "hacker_tag": { + "name": "hacker_tag", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "age": { + "name": "age", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "gender": { + "name": "gender", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "race": { + "name": "race", + "type": "varchar(75)", + "primaryKey": false, + "notNull": true + }, + "ethnicity": { + "name": "ethnicity", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "shirt_size": { + "name": "shirt_size", + "type": "varchar(5)", + "primaryKey": false, + "notNull": true + }, + "diet_restrictions": { + "name": "diet_restrictions", + "type": "json", + "primaryKey": false, + "notNull": true + }, + "accommodation_note": { + "name": "accommodation_note", + "type": "text", + "primaryKey": false, + "notNull": false + }, + "discord": { + "name": "discord", + "type": "varchar(60)", + "primaryKey": false, + "notNull": false + }, + "pronouns": { + "name": "pronouns", + "type": "varchar(20)", + "primaryKey": false, + "notNull": true + }, + "bio": { + "name": "bio", + "type": "text", + "primaryKey": false, + "notNull": true + }, + "skills": { + "name": "skills", + "type": "json", + "primaryKey": false, + "notNull": true, + "default": "'[]'::json" + }, + "profile_photo": { + "name": "profile_photo", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "phone_number": { + "name": "phone_number", + "type": "varchar(30)", + "primaryKey": false, + "notNull": true + }, + "country_of_residence": { + "name": "country_of_residence", + "type": "varchar(3)", + "primaryKey": false, + "notNull": true + }, + "is_fully_registered": { + "name": "is_fully_registered", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "signup_time": { + "name": "signup_time", + "type": "timestamp", + "primaryKey": false, + "notNull": true, + "default": "now()" + }, + "is_searchable": { + "name": "is_searchable", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": true + }, + "role": { + "name": "role", + "type": "role", + "typeSchema": "public", + "primaryKey": false, + "notNull": true, + "default": "'hacker'" + }, + "checkin_timestamp": { + "name": "checkin_timestamp", + "type": "timestamp", + "primaryKey": false, + "notNull": false + }, + "is_rsvped": { + "name": "is_rsvped", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + }, + "is_approved": { + "name": "is_approved", + "type": "boolean", + "primaryKey": false, + "notNull": true, + "default": false + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": { + "user_common_data_email_unique": { + "name": "user_common_data_email_unique", + "nullsNotDistinct": false, + "columns": [ + "email" + ] + }, + "user_common_data_hacker_tag_unique": { + "name": "user_common_data_hacker_tag_unique", + "nullsNotDistinct": false, + "columns": [ + "hacker_tag" + ] + } + } + }, + "public.user_hacker_data": { + "name": "user_hacker_data", + "schema": "", + "columns": { + "clerk_id": { + "name": "clerk_id", + "type": "varchar(255)", + "primaryKey": true, + "notNull": true + }, + "university": { + "name": "university", + "type": "varchar(200)", + "primaryKey": false, + "notNull": true + }, + "major": { + "name": "major", + "type": "varchar(200)", + "primaryKey": false, + "notNull": true + }, + "school_id": { + "name": "school_id", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "level_of_study": { + "name": "level_of_study", + "type": "varchar(50)", + "primaryKey": false, + "notNull": true + }, + "hackathons_attended": { + "name": "hackathons_attended", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "software_experience": { + "name": "software_experience", + "type": "varchar(25)", + "primaryKey": false, + "notNull": true + }, + "heard_from": { + "name": "heard_from", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "github": { + "name": "github", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "linkedin": { + "name": "linkedin", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "personal_website": { + "name": "personal_website", + "type": "varchar(100)", + "primaryKey": false, + "notNull": false + }, + "resume": { + "name": "resume", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true, + "default": "'https://static.acmutsa.org/No%20Resume%20Provided.pdf'" + }, + "group": { + "name": "group", + "type": "integer", + "primaryKey": false, + "notNull": true + }, + "team_id": { + "name": "team_id", + "type": "varchar(50)", + "primaryKey": false, + "notNull": false + }, + "points": { + "name": "points", + "type": "integer", + "primaryKey": false, + "notNull": true, + "default": 0 + }, + "has_accepted_mlh_coc": { + "name": "has_accepted_mlh_coc", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "has_shared_data_with_mlh": { + "name": "has_shared_data_with_mlh", + "type": "boolean", + "primaryKey": false, + "notNull": true + }, + "is_emailable": { + "name": "is_emailable", + "type": "boolean", + "primaryKey": false, + "notNull": true + } + }, + "indexes": {}, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + } + }, + "enums": { + "public.chat_type": { + "name": "chat_type", + "schema": "public", + "values": [ + "ticket" + ] + }, + "public.discord_status": { + "name": "discord_status", + "schema": "public", + "values": [ + "pending", + "expired", + "accepted", + "rejected" + ] + }, + "public.type": { + "name": "type", + "schema": "public", + "values": [ + "generic", + "resume" + ] + }, + "public.invite_status": { + "name": "invite_status", + "schema": "public", + "values": [ + "pending", + "accepted", + "declined" + ] + }, + "public.role": { + "name": "role", + "schema": "public", + "values": [ + "hacker", + "volunteer", + "mentor", + "mlh", + "admin", + "super_admin" + ] + }, + "public.ticket_status": { + "name": "ticket_status", + "schema": "public", + "values": [ + "awaiting", + "in_progress", + "completed" + ] + } + }, + "schemas": {}, + "_meta": { + "columns": {}, + "schemas": {}, + "tables": {} + } +} \ No newline at end of file diff --git a/packages/db/drizzle/meta/_journal.json b/packages/db/drizzle/meta/_journal.json index 83330b20..e5a2939f 100644 --- a/packages/db/drizzle/meta/_journal.json +++ b/packages/db/drizzle/meta/_journal.json @@ -134,6 +134,13 @@ "when": 1726078325574, "tag": "0018_melodic_starbolt", "breakpoints": true + }, + { + "idx": 19, + "version": "7", + "when": 1729878594525, + "tag": "0019_lyrical_thundra", + "breakpoints": true } ] } \ No newline at end of file