diff --git a/client/src/types/huddle.ts b/client/src/types/huddle.ts
index 6fe139f..4dc09a1 100644
--- a/client/src/types/huddle.ts
+++ b/client/src/types/huddle.ts
@@ -67,7 +67,7 @@ export interface HuddleDetailResponse {
myClaim: { id: string; rosterId: number; status: ClaimStatus } | null;
}
-export interface HuddleAnnouncement {
+export interface Announcement {
id: string;
huddleId: string;
authorId: string;
@@ -289,7 +289,7 @@ export interface SurveyAnswerInput {
optionIds?: string[];
}
-export interface HuddleAward {
+export interface Award {
id: string;
huddleId: string;
rosterId: number;
diff --git a/client/src/widgets/dashboard/Announcements.tsx b/client/src/widgets/dashboard/Announcements.tsx
index 05b540d..ecafd2b 100644
--- a/client/src/widgets/dashboard/Announcements.tsx
+++ b/client/src/widgets/dashboard/Announcements.tsx
@@ -8,11 +8,11 @@
*/
import { useSelectedLeagueHuddle, useAnnouncements } from "../../hooks/useHuddles";
import { SectionHead } from "./_shared";
-import type { HuddleAnnouncement } from "../../types/huddle";
+import type { Announcement } from "../../types/huddle";
// ---- Single announcement card ----
-function AnnouncementCard({ item }: { item: HuddleAnnouncement }) {
+function AnnouncementCard({ item }: { item: Announcement }) {
const date = new Date(item.createdAt).toLocaleDateString("en-US", {
month: "short",
day: "numeric",
diff --git a/server/drizzle/0011_sticky_shockwave.sql b/server/drizzle/0011_sticky_shockwave.sql
new file mode 100644
index 0000000..496d33e
--- /dev/null
+++ b/server/drizzle/0011_sticky_shockwave.sql
@@ -0,0 +1,15 @@
+CREATE TABLE "users" (
+ "id" text PRIMARY KEY NOT NULL,
+ "email" text,
+ "username" text,
+ "sleeper_username" text,
+ "sleeper_user_id" text,
+ "synced_league_ids" text[] DEFAULT '{}'::text[] NOT NULL,
+ "is_placeholder" boolean DEFAULT false NOT NULL,
+ "identity_synced_at" timestamp with time zone DEFAULT now() NOT NULL,
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+CREATE INDEX "users_email_idx" ON "users" USING btree ("email");--> statement-breakpoint
+CREATE INDEX "users_username_idx" ON "users" USING btree ("username");
\ No newline at end of file
diff --git a/server/drizzle/0012_green_valkyrie.sql b/server/drizzle/0012_green_valkyrie.sql
new file mode 100644
index 0000000..f050589
--- /dev/null
+++ b/server/drizzle/0012_green_valkyrie.sql
@@ -0,0 +1,53 @@
+-- Hand-added seed step (the ALTER TABLEs below are Drizzle-generated).
+--
+-- Every user id already referenced by our data needs a `users` row before the
+-- foreign keys can be added. `db:migrate` applies 0011 and 0012 in the same
+-- run, so this cannot rely on scripts/backfill-users.mjs having been run in
+-- between — it seeds minimal placeholder rows itself, from the data alone, and
+-- is therefore guaranteed to satisfy every constraint that follows.
+--
+-- Run `npm run db:backfill-users --prefix server` afterwards to fill these in
+-- with real emails/usernames and the Sleeper links from Clerk's metadata; that
+-- script clears is_placeholder for every id Clerk still knows about. Whatever
+-- stays flagged is a deleted account we're keeping for attribution.
+INSERT INTO "users" ("id", "is_placeholder")
+SELECT DISTINCT "id", true FROM (
+ SELECT "user_id" AS id FROM "huddle_commissioners"
+ UNION SELECT "added_by" FROM "huddle_commissioners"
+ UNION SELECT "user_id" FROM "team_claims"
+ UNION SELECT "decided_by" FROM "team_claims"
+ UNION SELECT "author_id" FROM "huddle_announcements"
+ UNION SELECT "marked_by" FROM "huddle_dues_payments"
+ UNION SELECT "granted_by" FROM "huddle_awards"
+ UNION SELECT "proposer_id" FROM "side_bets"
+ UNION SELECT "opponent_id" FROM "side_bets"
+ UNION SELECT "winner_id" FROM "side_bets"
+ UNION SELECT "author_id" FROM "huddle_forum_topics"
+ UNION SELECT "deleted_by" FROM "huddle_forum_topics"
+ UNION SELECT "author_id" FROM "huddle_forum_replies"
+ UNION SELECT "deleted_by" FROM "huddle_forum_replies"
+ UNION SELECT "author_id" FROM "huddle_polls"
+ UNION SELECT "user_id" FROM "huddle_poll_votes"
+ UNION SELECT "author_id" FROM "huddle_surveys"
+ UNION SELECT "user_id" FROM "huddle_survey_responses"
+) refs
+WHERE "id" IS NOT NULL
+ON CONFLICT ("id") DO NOTHING;--> statement-breakpoint
+ALTER TABLE "huddle_announcements" ADD CONSTRAINT "huddle_announcements_author_id_users_id_fk" FOREIGN KEY ("author_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_awards" ADD CONSTRAINT "huddle_awards_granted_by_users_id_fk" FOREIGN KEY ("granted_by") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_commissioners" ADD CONSTRAINT "huddle_commissioners_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_commissioners" ADD CONSTRAINT "huddle_commissioners_added_by_users_id_fk" FOREIGN KEY ("added_by") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_dues_payments" ADD CONSTRAINT "huddle_dues_payments_marked_by_users_id_fk" FOREIGN KEY ("marked_by") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_forum_replies" ADD CONSTRAINT "huddle_forum_replies_author_id_users_id_fk" FOREIGN KEY ("author_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_forum_replies" ADD CONSTRAINT "huddle_forum_replies_deleted_by_users_id_fk" FOREIGN KEY ("deleted_by") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_forum_topics" ADD CONSTRAINT "huddle_forum_topics_author_id_users_id_fk" FOREIGN KEY ("author_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_forum_topics" ADD CONSTRAINT "huddle_forum_topics_deleted_by_users_id_fk" FOREIGN KEY ("deleted_by") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_poll_votes" ADD CONSTRAINT "huddle_poll_votes_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_polls" ADD CONSTRAINT "huddle_polls_author_id_users_id_fk" FOREIGN KEY ("author_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_survey_responses" ADD CONSTRAINT "huddle_survey_responses_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_surveys" ADD CONSTRAINT "huddle_surveys_author_id_users_id_fk" FOREIGN KEY ("author_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "side_bets" ADD CONSTRAINT "side_bets_proposer_id_users_id_fk" FOREIGN KEY ("proposer_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "side_bets" ADD CONSTRAINT "side_bets_opponent_id_users_id_fk" FOREIGN KEY ("opponent_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "side_bets" ADD CONSTRAINT "side_bets_winner_id_users_id_fk" FOREIGN KEY ("winner_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "team_claims" ADD CONSTRAINT "team_claims_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "team_claims" ADD CONSTRAINT "team_claims_decided_by_users_id_fk" FOREIGN KEY ("decided_by") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;
\ No newline at end of file
diff --git a/server/drizzle/0013_hot_cannonball.sql b/server/drizzle/0013_hot_cannonball.sql
new file mode 100644
index 0000000..d359bcc
--- /dev/null
+++ b/server/drizzle/0013_hot_cannonball.sql
@@ -0,0 +1,48 @@
+ALTER TABLE "side_bets" RENAME TO "huddle_side_bets";--> statement-breakpoint
+ALTER TABLE "team_claims" RENAME TO "huddle_team_claims";--> statement-breakpoint
+ALTER TABLE "huddle_side_bets" DROP CONSTRAINT "side_bets_huddle_id_huddles_id_fk";
+--> statement-breakpoint
+ALTER TABLE "huddle_side_bets" DROP CONSTRAINT "side_bets_proposer_id_users_id_fk";
+--> statement-breakpoint
+ALTER TABLE "huddle_side_bets" DROP CONSTRAINT "side_bets_opponent_id_users_id_fk";
+--> statement-breakpoint
+ALTER TABLE "huddle_side_bets" DROP CONSTRAINT "side_bets_winner_id_users_id_fk";
+--> statement-breakpoint
+ALTER TABLE "huddle_team_claims" DROP CONSTRAINT "team_claims_huddle_id_huddles_id_fk";
+--> statement-breakpoint
+ALTER TABLE "huddle_team_claims" DROP CONSTRAINT "team_claims_user_id_users_id_fk";
+--> statement-breakpoint
+ALTER TABLE "huddle_team_claims" DROP CONSTRAINT "team_claims_decided_by_users_id_fk";
+--> statement-breakpoint
+DROP INDEX "side_bets_huddle_idx";--> statement-breakpoint
+DROP INDEX "side_bets_proposer_idx";--> statement-breakpoint
+DROP INDEX "side_bets_opponent_idx";--> statement-breakpoint
+DROP INDEX "team_claims_huddle_roster_approved_uniq";--> statement-breakpoint
+DROP INDEX "team_claims_huddle_user_approved_uniq";--> statement-breakpoint
+DROP INDEX "team_claims_huddle_idx";--> statement-breakpoint
+DROP INDEX "team_claims_user_idx";--> statement-breakpoint
+-- Hand-edited: Drizzle emitted a bare `SET DATA TYPE boolean`, which Postgres
+-- rejects — integer has no implicit cast to boolean, and the existing
+-- `DEFAULT 1` can't be cast either. Drop the default, convert with an explicit
+-- USING, then restore it. (PLAYBOOK, "Sharp edges".)
+ALTER TABLE "huddle_active_trophies" ALTER COLUMN "enabled" DROP DEFAULT;--> statement-breakpoint
+ALTER TABLE "huddle_active_trophies" ALTER COLUMN "enabled" SET DATA TYPE boolean USING ("enabled" <> 0);--> statement-breakpoint
+ALTER TABLE "huddle_active_trophies" ALTER COLUMN "enabled" SET DEFAULT true;--> statement-breakpoint
+-- Hand-added: legacy constraint name left behind when 0001 renamed `groups`
+-- to `huddles`. Postgres keeps constraint names across a table rename, and
+-- Drizzle doesn't track them, so this never appears in a generated diff.
+ALTER INDEX IF EXISTS "groups_pkey" RENAME TO "huddles_pkey";--> statement-breakpoint
+ALTER TABLE "huddle_side_bets" ADD CONSTRAINT "huddle_side_bets_huddle_id_huddles_id_fk" FOREIGN KEY ("huddle_id") REFERENCES "public"."huddles"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_side_bets" ADD CONSTRAINT "huddle_side_bets_proposer_id_users_id_fk" FOREIGN KEY ("proposer_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_side_bets" ADD CONSTRAINT "huddle_side_bets_opponent_id_users_id_fk" FOREIGN KEY ("opponent_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_side_bets" ADD CONSTRAINT "huddle_side_bets_winner_id_users_id_fk" FOREIGN KEY ("winner_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_team_claims" ADD CONSTRAINT "huddle_team_claims_huddle_id_huddles_id_fk" FOREIGN KEY ("huddle_id") REFERENCES "public"."huddles"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_team_claims" ADD CONSTRAINT "huddle_team_claims_user_id_users_id_fk" FOREIGN KEY ("user_id") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "huddle_team_claims" ADD CONSTRAINT "huddle_team_claims_decided_by_users_id_fk" FOREIGN KEY ("decided_by") REFERENCES "public"."users"("id") ON DELETE restrict ON UPDATE no action;--> statement-breakpoint
+CREATE INDEX "huddle_side_bets_huddle_idx" ON "huddle_side_bets" USING btree ("huddle_id");--> statement-breakpoint
+CREATE INDEX "huddle_side_bets_proposer_idx" ON "huddle_side_bets" USING btree ("huddle_id","proposer_id");--> statement-breakpoint
+CREATE INDEX "huddle_side_bets_opponent_idx" ON "huddle_side_bets" USING btree ("huddle_id","opponent_id");--> statement-breakpoint
+CREATE UNIQUE INDEX "huddle_team_claims_huddle_roster_approved_uniq" ON "huddle_team_claims" USING btree ("huddle_id","roster_id") WHERE "huddle_team_claims"."status" = 'approved';--> statement-breakpoint
+CREATE UNIQUE INDEX "huddle_team_claims_huddle_user_approved_uniq" ON "huddle_team_claims" USING btree ("huddle_id","user_id") WHERE "huddle_team_claims"."status" = 'approved';--> statement-breakpoint
+CREATE INDEX "huddle_team_claims_huddle_idx" ON "huddle_team_claims" USING btree ("huddle_id");--> statement-breakpoint
+CREATE INDEX "huddle_team_claims_user_idx" ON "huddle_team_claims" USING btree ("user_id");
\ No newline at end of file
diff --git a/server/drizzle/0014_rename_legacy_pkeys.sql b/server/drizzle/0014_rename_legacy_pkeys.sql
new file mode 100644
index 0000000..10eae54
--- /dev/null
+++ b/server/drizzle/0014_rename_legacy_pkeys.sql
@@ -0,0 +1,10 @@
+-- Custom migration (`drizzle-kit generate --custom`), so the snapshot is
+-- written correctly even though Drizzle sees no schema change here.
+--
+-- Postgres keeps constraint names across `ALTER TABLE ... RENAME TO`, so 0013's
+-- table renames left the old names behind on the primary keys — the same wart
+-- `groups_pkey` was on `huddles`. Drizzle doesn't track PK constraint names, so
+-- these will never show up in a generated diff; they have to be renamed by hand
+-- or not at all.
+ALTER INDEX IF EXISTS "team_claims_pkey" RENAME TO "huddle_team_claims_pkey";--> statement-breakpoint
+ALTER INDEX IF EXISTS "side_bets_pkey" RENAME TO "huddle_side_bets_pkey";
diff --git a/server/drizzle/0015_drop_huddle_prefix.sql b/server/drizzle/0015_drop_huddle_prefix.sql
new file mode 100644
index 0000000..727a9a8
--- /dev/null
+++ b/server/drizzle/0015_drop_huddle_prefix.sql
@@ -0,0 +1,133 @@
+-- Hand-written, replacing Drizzle's generated SQL for this step.
+--
+-- Drizzle prompts "created or renamed?" once per table and cannot be answered
+-- reliably from a script for 21 tables, so it was answered "create" — which
+-- produces a correct *snapshot* (the snapshot records the end state, not the
+-- operations) alongside a DROP/CREATE migration that would discard every row.
+-- That SQL was replaced with the renames below, generated from the live schema
+-- so no index or constraint is missed.
+--
+-- Naming rule this establishes: tables are named for what they hold. The
+-- `huddle_` prefix said nothing — every table in the database belongs to
+-- Huddle — while making `\dt` and autocomplete useless. See PLAYBOOK,
+-- "Table naming".
+--
+-- Postgres does not rename constraints or indexes when a table is renamed, so
+-- each one is renamed explicitly; otherwise the next `db:generate` diffs
+-- against names that no longer match the snapshot.
+
+ALTER TABLE "huddle_active_trophies" RENAME TO "active_trophies";--> statement-breakpoint
+ALTER TABLE "active_trophies" RENAME CONSTRAINT "huddle_active_trophies_huddle_id_huddles_id_fk" TO "active_trophies_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "active_trophies" RENAME CONSTRAINT "huddle_active_trophies_huddle_id_trophy_type_pk" TO "active_trophies_huddle_id_trophy_type_pk";--> statement-breakpoint
+ALTER TABLE "huddle_announcements" RENAME TO "announcements";--> statement-breakpoint
+ALTER TABLE "announcements" RENAME CONSTRAINT "huddle_announcements_author_id_users_id_fk" TO "announcements_author_id_users_id_fk";--> statement-breakpoint
+ALTER TABLE "announcements" RENAME CONSTRAINT "huddle_announcements_huddle_id_huddles_id_fk" TO "announcements_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "announcements" RENAME CONSTRAINT "huddle_announcements_pkey" TO "announcements_pkey";--> statement-breakpoint
+ALTER INDEX "huddle_announcements_huddle_idx" RENAME TO "announcements_huddle_idx";--> statement-breakpoint
+ALTER TABLE "huddle_awards" RENAME TO "awards";--> statement-breakpoint
+ALTER TABLE "awards" RENAME CONSTRAINT "huddle_awards_granted_by_users_id_fk" TO "awards_granted_by_users_id_fk";--> statement-breakpoint
+ALTER TABLE "awards" RENAME CONSTRAINT "huddle_awards_huddle_id_huddles_id_fk" TO "awards_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "awards" RENAME CONSTRAINT "huddle_awards_pkey" TO "awards_pkey";--> statement-breakpoint
+ALTER INDEX "huddle_awards_huddle_idx" RENAME TO "awards_huddle_idx";--> statement-breakpoint
+ALTER INDEX "huddle_awards_huddle_roster_idx" RENAME TO "awards_huddle_roster_idx";--> statement-breakpoint
+ALTER TABLE "huddle_commissioners" RENAME TO "commissioners";--> statement-breakpoint
+ALTER TABLE "commissioners" RENAME CONSTRAINT "huddle_commissioners_added_by_users_id_fk" TO "commissioners_added_by_users_id_fk";--> statement-breakpoint
+ALTER TABLE "commissioners" RENAME CONSTRAINT "huddle_commissioners_huddle_id_huddles_id_fk" TO "commissioners_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "commissioners" RENAME CONSTRAINT "huddle_commissioners_huddle_id_user_id_pk" TO "commissioners_huddle_id_user_id_pk";--> statement-breakpoint
+ALTER TABLE "commissioners" RENAME CONSTRAINT "huddle_commissioners_user_id_users_id_fk" TO "commissioners_user_id_users_id_fk";--> statement-breakpoint
+ALTER INDEX "huddle_commissioners_user_idx" RENAME TO "commissioners_user_idx";--> statement-breakpoint
+ALTER TABLE "huddle_countdown_config" RENAME TO "countdown_config";--> statement-breakpoint
+ALTER TABLE "countdown_config" RENAME CONSTRAINT "huddle_countdown_config_huddle_id_huddles_id_fk" TO "countdown_config_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "countdown_config" RENAME CONSTRAINT "huddle_countdown_config_pkey" TO "countdown_config_pkey";--> statement-breakpoint
+ALTER TABLE "huddle_dues_config" RENAME TO "dues_config";--> statement-breakpoint
+ALTER TABLE "dues_config" RENAME CONSTRAINT "huddle_dues_config_huddle_id_huddles_id_fk" TO "dues_config_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "dues_config" RENAME CONSTRAINT "huddle_dues_config_pkey" TO "dues_config_pkey";--> statement-breakpoint
+ALTER TABLE "huddle_dues_payments" RENAME TO "dues_payments";--> statement-breakpoint
+ALTER TABLE "dues_payments" RENAME CONSTRAINT "huddle_dues_payments_huddle_id_huddles_id_fk" TO "dues_payments_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "dues_payments" RENAME CONSTRAINT "huddle_dues_payments_marked_by_users_id_fk" TO "dues_payments_marked_by_users_id_fk";--> statement-breakpoint
+ALTER TABLE "dues_payments" RENAME CONSTRAINT "huddle_dues_payments_pkey" TO "dues_payments_pkey";--> statement-breakpoint
+ALTER INDEX "huddle_dues_payments_huddle_roster_uniq" RENAME TO "dues_payments_huddle_roster_uniq";--> statement-breakpoint
+ALTER TABLE "huddle_forum_replies" RENAME TO "forum_replies";--> statement-breakpoint
+ALTER TABLE "forum_replies" RENAME CONSTRAINT "huddle_forum_replies_author_id_users_id_fk" TO "forum_replies_author_id_users_id_fk";--> statement-breakpoint
+ALTER TABLE "forum_replies" RENAME CONSTRAINT "huddle_forum_replies_deleted_by_users_id_fk" TO "forum_replies_deleted_by_users_id_fk";--> statement-breakpoint
+ALTER TABLE "forum_replies" RENAME CONSTRAINT "huddle_forum_replies_huddle_id_huddles_id_fk" TO "forum_replies_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "forum_replies" RENAME CONSTRAINT "huddle_forum_replies_pkey" TO "forum_replies_pkey";--> statement-breakpoint
+ALTER TABLE "forum_replies" RENAME CONSTRAINT "huddle_forum_replies_topic_id_huddle_forum_topics_id_fk" TO "forum_replies_topic_id_forum_topics_id_fk";--> statement-breakpoint
+ALTER INDEX "huddle_forum_replies_topic_idx" RENAME TO "forum_replies_topic_idx";--> statement-breakpoint
+ALTER TABLE "huddle_forum_topics" RENAME TO "forum_topics";--> statement-breakpoint
+ALTER TABLE "forum_topics" RENAME CONSTRAINT "huddle_forum_topics_author_id_users_id_fk" TO "forum_topics_author_id_users_id_fk";--> statement-breakpoint
+ALTER TABLE "forum_topics" RENAME CONSTRAINT "huddle_forum_topics_deleted_by_users_id_fk" TO "forum_topics_deleted_by_users_id_fk";--> statement-breakpoint
+ALTER TABLE "forum_topics" RENAME CONSTRAINT "huddle_forum_topics_huddle_id_huddles_id_fk" TO "forum_topics_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "forum_topics" RENAME CONSTRAINT "huddle_forum_topics_pkey" TO "forum_topics_pkey";--> statement-breakpoint
+ALTER INDEX "huddle_forum_topics_huddle_updated_idx" RENAME TO "forum_topics_huddle_updated_idx";--> statement-breakpoint
+ALTER TABLE "huddle_payout_entries" RENAME TO "payout_entries";--> statement-breakpoint
+ALTER TABLE "payout_entries" RENAME CONSTRAINT "huddle_payout_entries_huddle_id_huddles_id_fk" TO "payout_entries_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "payout_entries" RENAME CONSTRAINT "huddle_payout_entries_pkey" TO "payout_entries_pkey";--> statement-breakpoint
+ALTER INDEX "huddle_payout_entries_huddle_idx" RENAME TO "payout_entries_huddle_idx";--> statement-breakpoint
+ALTER TABLE "huddle_poll_options" RENAME TO "poll_options";--> statement-breakpoint
+ALTER TABLE "poll_options" RENAME CONSTRAINT "huddle_poll_options_pkey" TO "poll_options_pkey";--> statement-breakpoint
+ALTER TABLE "poll_options" RENAME CONSTRAINT "huddle_poll_options_poll_id_huddle_polls_id_fk" TO "poll_options_poll_id_polls_id_fk";--> statement-breakpoint
+ALTER INDEX "huddle_poll_options_poll_idx" RENAME TO "poll_options_poll_idx";--> statement-breakpoint
+ALTER TABLE "huddle_poll_votes" RENAME TO "poll_votes";--> statement-breakpoint
+ALTER TABLE "poll_votes" RENAME CONSTRAINT "huddle_poll_votes_option_id_huddle_poll_options_id_fk" TO "poll_votes_option_id_poll_options_id_fk";--> statement-breakpoint
+ALTER TABLE "poll_votes" RENAME CONSTRAINT "huddle_poll_votes_pkey" TO "poll_votes_pkey";--> statement-breakpoint
+ALTER TABLE "poll_votes" RENAME CONSTRAINT "huddle_poll_votes_poll_id_huddle_polls_id_fk" TO "poll_votes_poll_id_polls_id_fk";--> statement-breakpoint
+ALTER TABLE "poll_votes" RENAME CONSTRAINT "huddle_poll_votes_user_id_users_id_fk" TO "poll_votes_user_id_users_id_fk";--> statement-breakpoint
+ALTER INDEX "huddle_poll_votes_option_user_uniq" RENAME TO "poll_votes_option_user_uniq";--> statement-breakpoint
+ALTER INDEX "huddle_poll_votes_poll_user_idx" RENAME TO "poll_votes_poll_user_idx";--> statement-breakpoint
+ALTER TABLE "huddle_polls" RENAME TO "polls";--> statement-breakpoint
+ALTER TABLE "polls" RENAME CONSTRAINT "huddle_polls_author_id_users_id_fk" TO "polls_author_id_users_id_fk";--> statement-breakpoint
+ALTER TABLE "polls" RENAME CONSTRAINT "huddle_polls_huddle_id_huddles_id_fk" TO "polls_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "polls" RENAME CONSTRAINT "huddle_polls_pkey" TO "polls_pkey";--> statement-breakpoint
+ALTER TABLE "polls" RENAME CONSTRAINT "huddle_polls_topic_id_huddle_forum_topics_id_fk" TO "polls_topic_id_forum_topics_id_fk";--> statement-breakpoint
+ALTER INDEX "huddle_polls_dashboard_active_uniq" RENAME TO "polls_dashboard_active_uniq";--> statement-breakpoint
+ALTER INDEX "huddle_polls_topic_idx" RENAME TO "polls_topic_idx";--> statement-breakpoint
+ALTER TABLE "huddle_side_bets" RENAME TO "side_bets";--> statement-breakpoint
+ALTER TABLE "side_bets" RENAME CONSTRAINT "huddle_side_bets_huddle_id_huddles_id_fk" TO "side_bets_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "side_bets" RENAME CONSTRAINT "huddle_side_bets_opponent_id_users_id_fk" TO "side_bets_opponent_id_users_id_fk";--> statement-breakpoint
+ALTER TABLE "side_bets" RENAME CONSTRAINT "huddle_side_bets_pkey" TO "side_bets_pkey";--> statement-breakpoint
+ALTER TABLE "side_bets" RENAME CONSTRAINT "huddle_side_bets_proposer_id_users_id_fk" TO "side_bets_proposer_id_users_id_fk";--> statement-breakpoint
+ALTER TABLE "side_bets" RENAME CONSTRAINT "huddle_side_bets_winner_id_users_id_fk" TO "side_bets_winner_id_users_id_fk";--> statement-breakpoint
+ALTER INDEX "huddle_side_bets_huddle_idx" RENAME TO "side_bets_huddle_idx";--> statement-breakpoint
+ALTER INDEX "huddle_side_bets_opponent_idx" RENAME TO "side_bets_opponent_idx";--> statement-breakpoint
+ALTER INDEX "huddle_side_bets_proposer_idx" RENAME TO "side_bets_proposer_idx";--> statement-breakpoint
+ALTER TABLE "huddle_survey_answer_options" RENAME TO "survey_answer_options";--> statement-breakpoint
+ALTER TABLE "survey_answer_options" RENAME CONSTRAINT "huddle_survey_answer_options_option_id_huddle_survey_options_id" TO "survey_answer_options_option_id_survey_options_id";--> statement-breakpoint
+ALTER TABLE "survey_answer_options" RENAME CONSTRAINT "huddle_survey_answer_options_pkey" TO "survey_answer_options_pkey";--> statement-breakpoint
+ALTER TABLE "survey_answer_options" RENAME CONSTRAINT "huddle_survey_answer_options_question_id_huddle_survey_question" TO "survey_answer_options_question_id_survey_questions_id_fk";--> statement-breakpoint
+ALTER TABLE "survey_answer_options" RENAME CONSTRAINT "huddle_survey_answer_options_response_id_huddle_survey_response" TO "survey_answer_options_response_id_survey_responses_id_fk";--> statement-breakpoint
+ALTER INDEX "huddle_survey_answer_options_question_idx" RENAME TO "survey_answer_options_question_idx";--> statement-breakpoint
+ALTER INDEX "huddle_survey_answer_options_response_option_uniq" RENAME TO "survey_answer_options_response_option_uniq";--> statement-breakpoint
+ALTER TABLE "huddle_survey_answers" RENAME TO "survey_answers";--> statement-breakpoint
+ALTER TABLE "survey_answers" RENAME CONSTRAINT "huddle_survey_answers_pkey" TO "survey_answers_pkey";--> statement-breakpoint
+ALTER TABLE "survey_answers" RENAME CONSTRAINT "huddle_survey_answers_question_id_huddle_survey_questions_id_fk" TO "survey_answers_question_id_survey_questions_id_fk";--> statement-breakpoint
+ALTER TABLE "survey_answers" RENAME CONSTRAINT "huddle_survey_answers_response_id_huddle_survey_responses_id_fk" TO "survey_answers_response_id_survey_responses_id_fk";--> statement-breakpoint
+ALTER INDEX "huddle_survey_answers_question_idx" RENAME TO "survey_answers_question_idx";--> statement-breakpoint
+ALTER INDEX "huddle_survey_answers_response_idx" RENAME TO "survey_answers_response_idx";--> statement-breakpoint
+ALTER TABLE "huddle_survey_options" RENAME TO "survey_options";--> statement-breakpoint
+ALTER TABLE "survey_options" RENAME CONSTRAINT "huddle_survey_options_pkey" TO "survey_options_pkey";--> statement-breakpoint
+ALTER TABLE "survey_options" RENAME CONSTRAINT "huddle_survey_options_question_id_huddle_survey_questions_id_fk" TO "survey_options_question_id_survey_questions_id_fk";--> statement-breakpoint
+ALTER INDEX "huddle_survey_options_question_idx" RENAME TO "survey_options_question_idx";--> statement-breakpoint
+ALTER TABLE "huddle_survey_questions" RENAME TO "survey_questions";--> statement-breakpoint
+ALTER TABLE "survey_questions" RENAME CONSTRAINT "huddle_survey_questions_pkey" TO "survey_questions_pkey";--> statement-breakpoint
+ALTER TABLE "survey_questions" RENAME CONSTRAINT "huddle_survey_questions_survey_id_huddle_surveys_id_fk" TO "survey_questions_survey_id_surveys_id_fk";--> statement-breakpoint
+ALTER INDEX "huddle_survey_questions_survey_idx" RENAME TO "survey_questions_survey_idx";--> statement-breakpoint
+ALTER TABLE "huddle_survey_responses" RENAME TO "survey_responses";--> statement-breakpoint
+ALTER TABLE "survey_responses" RENAME CONSTRAINT "huddle_survey_responses_pkey" TO "survey_responses_pkey";--> statement-breakpoint
+ALTER TABLE "survey_responses" RENAME CONSTRAINT "huddle_survey_responses_survey_id_huddle_surveys_id_fk" TO "survey_responses_survey_id_surveys_id_fk";--> statement-breakpoint
+ALTER TABLE "survey_responses" RENAME CONSTRAINT "huddle_survey_responses_user_id_users_id_fk" TO "survey_responses_user_id_users_id_fk";--> statement-breakpoint
+ALTER INDEX "huddle_survey_responses_survey_user_uniq" RENAME TO "survey_responses_survey_user_uniq";--> statement-breakpoint
+ALTER TABLE "huddle_surveys" RENAME TO "surveys";--> statement-breakpoint
+ALTER TABLE "surveys" RENAME CONSTRAINT "huddle_surveys_author_id_users_id_fk" TO "surveys_author_id_users_id_fk";--> statement-breakpoint
+ALTER TABLE "surveys" RENAME CONSTRAINT "huddle_surveys_huddle_id_huddles_id_fk" TO "surveys_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "surveys" RENAME CONSTRAINT "huddle_surveys_pkey" TO "surveys_pkey";--> statement-breakpoint
+ALTER INDEX "huddle_surveys_huddle_created_idx" RENAME TO "surveys_huddle_created_idx";--> statement-breakpoint
+ALTER TABLE "huddle_team_claims" RENAME TO "team_claims";--> statement-breakpoint
+ALTER TABLE "team_claims" RENAME CONSTRAINT "huddle_team_claims_decided_by_users_id_fk" TO "team_claims_decided_by_users_id_fk";--> statement-breakpoint
+ALTER TABLE "team_claims" RENAME CONSTRAINT "huddle_team_claims_huddle_id_huddles_id_fk" TO "team_claims_huddle_id_huddles_id_fk";--> statement-breakpoint
+ALTER TABLE "team_claims" RENAME CONSTRAINT "huddle_team_claims_pkey" TO "team_claims_pkey";--> statement-breakpoint
+ALTER TABLE "team_claims" RENAME CONSTRAINT "huddle_team_claims_user_id_users_id_fk" TO "team_claims_user_id_users_id_fk";--> statement-breakpoint
+ALTER INDEX "huddle_team_claims_huddle_idx" RENAME TO "team_claims_huddle_idx";--> statement-breakpoint
+ALTER INDEX "huddle_team_claims_huddle_roster_approved_uniq" RENAME TO "team_claims_huddle_roster_approved_uniq";--> statement-breakpoint
+ALTER INDEX "huddle_team_claims_huddle_user_approved_uniq" RENAME TO "team_claims_huddle_user_approved_uniq";--> statement-breakpoint
+ALTER INDEX "huddle_team_claims_user_idx" RENAME TO "team_claims_user_idx";
diff --git a/server/drizzle/0016_fix_truncated_fk_name.sql b/server/drizzle/0016_fix_truncated_fk_name.sql
new file mode 100644
index 0000000..e209cf0
--- /dev/null
+++ b/server/drizzle/0016_fix_truncated_fk_name.sql
@@ -0,0 +1,12 @@
+-- Custom migration, so the snapshot is written even though schema.ts is unchanged.
+--
+-- This constraint was created before 0015 as
+-- `huddle_survey_answer_options_option_id_huddle_survey_options_id_fk`, which is
+-- 66 bytes — over Postgres's 63-byte identifier limit, so it was silently
+-- truncated, losing its `_fk` suffix. 0015 renamed the truncated name and so
+-- carried the truncation forward. Now that the `huddle_` prefixes are gone the
+-- full name fits (52 bytes), and it has to match what Drizzle's snapshot
+-- expects or every future `db:generate` will diff against it.
+ALTER TABLE "survey_answer_options"
+ RENAME CONSTRAINT "survey_answer_options_option_id_survey_options_id"
+ TO "survey_answer_options_option_id_survey_options_id_fk";
diff --git a/server/drizzle/meta/0011_snapshot.json b/server/drizzle/meta/0011_snapshot.json
new file mode 100644
index 0000000..7e8692b
--- /dev/null
+++ b/server/drizzle/meta/0011_snapshot.json
@@ -0,0 +1,2410 @@
+{
+ "id": "4fb314ac-fb58-467a-a0a7-7e4725a7c292",
+ "prevId": "6344b4e3-ad1b-40bc-9209-1c8c135255fd",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.huddle_active_trophies": {
+ "name": "huddle_active_trophies",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "trophy_type": {
+ "name": "trophy_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 1
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "huddle_active_trophies_huddle_id_huddles_id_fk": {
+ "name": "huddle_active_trophies_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_active_trophies",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "huddle_active_trophies_huddle_id_trophy_type_pk": {
+ "name": "huddle_active_trophies_huddle_id_trophy_type_pk",
+ "columns": [
+ "huddle_id",
+ "trophy_type"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_announcements": {
+ "name": "huddle_announcements",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_announcements_huddle_idx": {
+ "name": "huddle_announcements_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_announcements_huddle_id_huddles_id_fk": {
+ "name": "huddle_announcements_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_announcements",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_awards": {
+ "name": "huddle_awards",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "glyph": {
+ "name": "glyph",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "color": {
+ "name": "color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "granted_by": {
+ "name": "granted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_awards_huddle_idx": {
+ "name": "huddle_awards_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_awards_huddle_roster_idx": {
+ "name": "huddle_awards_huddle_roster_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_awards_huddle_id_huddles_id_fk": {
+ "name": "huddle_awards_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_awards",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_commissioners": {
+ "name": "huddle_commissioners",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "added_at": {
+ "name": "added_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "added_by": {
+ "name": "added_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "huddle_commissioners_user_idx": {
+ "name": "huddle_commissioners_user_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_commissioners_huddle_id_huddles_id_fk": {
+ "name": "huddle_commissioners_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_commissioners",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "huddle_commissioners_huddle_id_user_id_pk": {
+ "name": "huddle_commissioners_huddle_id_user_id_pk",
+ "columns": [
+ "huddle_id",
+ "user_id"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_countdown_config": {
+ "name": "huddle_countdown_config",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "subtitle": {
+ "name": "subtitle",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "target_at": {
+ "name": "target_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "huddle_countdown_config_huddle_id_huddles_id_fk": {
+ "name": "huddle_countdown_config_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_countdown_config",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_dues_config": {
+ "name": "huddle_dues_config",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "huddle_dues_config_huddle_id_huddles_id_fk": {
+ "name": "huddle_dues_config_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_dues_config",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_dues_payments": {
+ "name": "huddle_dues_payments",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "paid_at": {
+ "name": "paid_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "marked_by": {
+ "name": "marked_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_dues_payments_huddle_roster_uniq": {
+ "name": "huddle_dues_payments_huddle_roster_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_dues_payments_huddle_id_huddles_id_fk": {
+ "name": "huddle_dues_payments_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_dues_payments",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_forum_replies": {
+ "name": "huddle_forum_replies",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "topic_id": {
+ "name": "topic_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted_by": {
+ "name": "deleted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "huddle_forum_replies_topic_idx": {
+ "name": "huddle_forum_replies_topic_idx",
+ "columns": [
+ {
+ "expression": "topic_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_forum_replies_topic_id_huddle_forum_topics_id_fk": {
+ "name": "huddle_forum_replies_topic_id_huddle_forum_topics_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "tableTo": "huddle_forum_topics",
+ "columnsFrom": [
+ "topic_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_forum_replies_huddle_id_huddles_id_fk": {
+ "name": "huddle_forum_replies_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_forum_topics": {
+ "name": "huddle_forum_topics",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "reply_count": {
+ "name": "reply_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted_by": {
+ "name": "deleted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "huddle_forum_topics_huddle_updated_idx": {
+ "name": "huddle_forum_topics_huddle_updated_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "updated_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_forum_topics_huddle_id_huddles_id_fk": {
+ "name": "huddle_forum_topics_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_forum_topics",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_payout_entries": {
+ "name": "huddle_payout_entries",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_payout_entries_huddle_idx": {
+ "name": "huddle_payout_entries_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_payout_entries_huddle_id_huddles_id_fk": {
+ "name": "huddle_payout_entries_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_payout_entries",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_poll_options": {
+ "name": "huddle_poll_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "poll_id": {
+ "name": "poll_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "huddle_poll_options_poll_idx": {
+ "name": "huddle_poll_options_poll_idx",
+ "columns": [
+ {
+ "expression": "poll_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_poll_options_poll_id_huddle_polls_id_fk": {
+ "name": "huddle_poll_options_poll_id_huddle_polls_id_fk",
+ "tableFrom": "huddle_poll_options",
+ "tableTo": "huddle_polls",
+ "columnsFrom": [
+ "poll_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_poll_votes": {
+ "name": "huddle_poll_votes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "poll_id": {
+ "name": "poll_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "option_id": {
+ "name": "option_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_poll_votes_poll_user_idx": {
+ "name": "huddle_poll_votes_poll_user_idx",
+ "columns": [
+ {
+ "expression": "poll_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_poll_votes_option_user_uniq": {
+ "name": "huddle_poll_votes_option_user_uniq",
+ "columns": [
+ {
+ "expression": "option_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_poll_votes_poll_id_huddle_polls_id_fk": {
+ "name": "huddle_poll_votes_poll_id_huddle_polls_id_fk",
+ "tableFrom": "huddle_poll_votes",
+ "tableTo": "huddle_polls",
+ "columnsFrom": [
+ "poll_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_poll_votes_option_id_huddle_poll_options_id_fk": {
+ "name": "huddle_poll_votes_option_id_huddle_poll_options_id_fk",
+ "tableFrom": "huddle_poll_votes",
+ "tableTo": "huddle_poll_options",
+ "columnsFrom": [
+ "option_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_polls": {
+ "name": "huddle_polls",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "topic_id": {
+ "name": "topic_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_dashboard_poll": {
+ "name": "is_dashboard_poll",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "question": {
+ "name": "question",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "allow_multiple": {
+ "name": "allow_multiple",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "allow_vote_changes": {
+ "name": "allow_vote_changes",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "results_visibility": {
+ "name": "results_visibility",
+ "type": "poll_results_visibility",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'always'"
+ },
+ "closes_at": {
+ "name": "closes_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_polls_topic_idx": {
+ "name": "huddle_polls_topic_idx",
+ "columns": [
+ {
+ "expression": "topic_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_polls_dashboard_active_uniq": {
+ "name": "huddle_polls_dashboard_active_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"huddle_polls\".\"is_dashboard_poll\" = true",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_polls_huddle_id_huddles_id_fk": {
+ "name": "huddle_polls_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_polls",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_polls_topic_id_huddle_forum_topics_id_fk": {
+ "name": "huddle_polls_topic_id_huddle_forum_topics_id_fk",
+ "tableFrom": "huddle_polls",
+ "tableTo": "huddle_forum_topics",
+ "columnsFrom": [
+ "topic_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_answer_options": {
+ "name": "huddle_survey_answer_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "response_id": {
+ "name": "response_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "option_id": {
+ "name": "option_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "huddle_survey_answer_options_question_idx": {
+ "name": "huddle_survey_answer_options_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_survey_answer_options_response_option_uniq": {
+ "name": "huddle_survey_answer_options_response_option_uniq",
+ "columns": [
+ {
+ "expression": "response_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "option_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_answer_options_response_id_huddle_survey_responses_id_fk": {
+ "name": "huddle_survey_answer_options_response_id_huddle_survey_responses_id_fk",
+ "tableFrom": "huddle_survey_answer_options",
+ "tableTo": "huddle_survey_responses",
+ "columnsFrom": [
+ "response_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_survey_answer_options_question_id_huddle_survey_questions_id_fk": {
+ "name": "huddle_survey_answer_options_question_id_huddle_survey_questions_id_fk",
+ "tableFrom": "huddle_survey_answer_options",
+ "tableTo": "huddle_survey_questions",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_survey_answer_options_option_id_huddle_survey_options_id_fk": {
+ "name": "huddle_survey_answer_options_option_id_huddle_survey_options_id_fk",
+ "tableFrom": "huddle_survey_answer_options",
+ "tableTo": "huddle_survey_options",
+ "columnsFrom": [
+ "option_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_answers": {
+ "name": "huddle_survey_answers",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "response_id": {
+ "name": "response_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "text_value": {
+ "name": "text_value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "huddle_survey_answers_response_idx": {
+ "name": "huddle_survey_answers_response_idx",
+ "columns": [
+ {
+ "expression": "response_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_survey_answers_question_idx": {
+ "name": "huddle_survey_answers_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_answers_response_id_huddle_survey_responses_id_fk": {
+ "name": "huddle_survey_answers_response_id_huddle_survey_responses_id_fk",
+ "tableFrom": "huddle_survey_answers",
+ "tableTo": "huddle_survey_responses",
+ "columnsFrom": [
+ "response_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_survey_answers_question_id_huddle_survey_questions_id_fk": {
+ "name": "huddle_survey_answers_question_id_huddle_survey_questions_id_fk",
+ "tableFrom": "huddle_survey_answers",
+ "tableTo": "huddle_survey_questions",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_options": {
+ "name": "huddle_survey_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "huddle_survey_options_question_idx": {
+ "name": "huddle_survey_options_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_options_question_id_huddle_survey_questions_id_fk": {
+ "name": "huddle_survey_options_question_id_huddle_survey_questions_id_fk",
+ "tableFrom": "huddle_survey_options",
+ "tableTo": "huddle_survey_questions",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_questions": {
+ "name": "huddle_survey_questions",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "survey_id": {
+ "name": "survey_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "type": {
+ "name": "type",
+ "type": "survey_question_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "prompt": {
+ "name": "prompt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "required": {
+ "name": "required",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "huddle_survey_questions_survey_idx": {
+ "name": "huddle_survey_questions_survey_idx",
+ "columns": [
+ {
+ "expression": "survey_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "sort_order",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_questions_survey_id_huddle_surveys_id_fk": {
+ "name": "huddle_survey_questions_survey_id_huddle_surveys_id_fk",
+ "tableFrom": "huddle_survey_questions",
+ "tableTo": "huddle_surveys",
+ "columnsFrom": [
+ "survey_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_responses": {
+ "name": "huddle_survey_responses",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "survey_id": {
+ "name": "survey_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_survey_responses_survey_user_uniq": {
+ "name": "huddle_survey_responses_survey_user_uniq",
+ "columns": [
+ {
+ "expression": "survey_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_responses_survey_id_huddle_surveys_id_fk": {
+ "name": "huddle_survey_responses_survey_id_huddle_surveys_id_fk",
+ "tableFrom": "huddle_survey_responses",
+ "tableTo": "huddle_surveys",
+ "columnsFrom": [
+ "survey_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_surveys": {
+ "name": "huddle_surveys",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "closes_at": {
+ "name": "closes_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "results_published": {
+ "name": "results_published",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "auto_publish_on_close": {
+ "name": "auto_publish_on_close",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "anonymity": {
+ "name": "anonymity",
+ "type": "survey_anonymity",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'none'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_surveys_huddle_created_idx": {
+ "name": "huddle_surveys_huddle_created_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_surveys_huddle_id_huddles_id_fk": {
+ "name": "huddle_surveys_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_surveys",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddles": {
+ "name": "huddles",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "league_provider": {
+ "name": "league_provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "league_id": {
+ "name": "league_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "invite_code": {
+ "name": "invite_code",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "invite_code_updated_at": {
+ "name": "invite_code_updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "invite_link_token": {
+ "name": "invite_link_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "invite_link_expires_at": {
+ "name": "invite_link_expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddles_invite_code_uniq": {
+ "name": "huddles_invite_code_uniq",
+ "columns": [
+ {
+ "expression": "invite_code",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddles_invite_link_token_uniq": {
+ "name": "huddles_invite_link_token_uniq",
+ "columns": [
+ {
+ "expression": "invite_link_token",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.side_bets": {
+ "name": "side_bets",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "proposer_id": {
+ "name": "proposer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "opponent_id": {
+ "name": "opponent_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "proposer_roster_id": {
+ "name": "proposer_roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "opponent_roster_id": {
+ "name": "opponent_roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "week": {
+ "name": "week",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "prize_description": {
+ "name": "prize_description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "side_bet_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "winner_id": {
+ "name": "winner_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "settlement_note": {
+ "name": "settlement_note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "side_bets_huddle_idx": {
+ "name": "side_bets_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "side_bets_proposer_idx": {
+ "name": "side_bets_proposer_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "proposer_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "side_bets_opponent_idx": {
+ "name": "side_bets_opponent_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "opponent_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "side_bets_huddle_id_huddles_id_fk": {
+ "name": "side_bets_huddle_id_huddles_id_fk",
+ "tableFrom": "side_bets",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.team_claims": {
+ "name": "team_claims",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "claim_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "message": {
+ "name": "message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "decided_at": {
+ "name": "decided_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "decided_by": {
+ "name": "decided_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "team_claims_huddle_roster_approved_uniq": {
+ "name": "team_claims_huddle_roster_approved_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"team_claims\".\"status\" = 'approved'",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "team_claims_huddle_user_approved_uniq": {
+ "name": "team_claims_huddle_user_approved_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"team_claims\".\"status\" = 'approved'",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "team_claims_huddle_idx": {
+ "name": "team_claims_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "team_claims_user_idx": {
+ "name": "team_claims_user_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "team_claims_huddle_id_huddles_id_fk": {
+ "name": "team_claims_huddle_id_huddles_id_fk",
+ "tableFrom": "team_claims",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.users": {
+ "name": "users",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sleeper_username": {
+ "name": "sleeper_username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sleeper_user_id": {
+ "name": "sleeper_user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "synced_league_ids": {
+ "name": "synced_league_ids",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'::text[]"
+ },
+ "is_placeholder": {
+ "name": "is_placeholder",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "identity_synced_at": {
+ "name": "identity_synced_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "users_email_idx": {
+ "name": "users_email_idx",
+ "columns": [
+ {
+ "expression": "email",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "users_username_idx": {
+ "name": "users_username_idx",
+ "columns": [
+ {
+ "expression": "username",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "public.claim_status": {
+ "name": "claim_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "approved",
+ "rejected"
+ ]
+ },
+ "public.poll_results_visibility": {
+ "name": "poll_results_visibility",
+ "schema": "public",
+ "values": [
+ "always",
+ "after_vote",
+ "after_close"
+ ]
+ },
+ "public.side_bet_status": {
+ "name": "side_bet_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "accepted",
+ "rejected",
+ "cancelled",
+ "settled"
+ ]
+ },
+ "public.survey_anonymity": {
+ "name": "survey_anonymity",
+ "schema": "public",
+ "values": [
+ "none",
+ "anonymous_to_league",
+ "anonymous_to_all"
+ ]
+ },
+ "public.survey_question_type": {
+ "name": "survey_question_type",
+ "schema": "public",
+ "values": [
+ "short_text",
+ "paragraph",
+ "multiple_choice",
+ "checkboxes"
+ ]
+ }
+ },
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/server/drizzle/meta/0012_snapshot.json b/server/drizzle/meta/0012_snapshot.json
new file mode 100644
index 0000000..695452b
--- /dev/null
+++ b/server/drizzle/meta/0012_snapshot.json
@@ -0,0 +1,2644 @@
+{
+ "id": "48c4474c-9264-4e99-922a-8f1e3ed418a2",
+ "prevId": "4fb314ac-fb58-467a-a0a7-7e4725a7c292",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.huddle_active_trophies": {
+ "name": "huddle_active_trophies",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "trophy_type": {
+ "name": "trophy_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 1
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "huddle_active_trophies_huddle_id_huddles_id_fk": {
+ "name": "huddle_active_trophies_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_active_trophies",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "huddle_active_trophies_huddle_id_trophy_type_pk": {
+ "name": "huddle_active_trophies_huddle_id_trophy_type_pk",
+ "columns": [
+ "huddle_id",
+ "trophy_type"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_announcements": {
+ "name": "huddle_announcements",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_announcements_huddle_idx": {
+ "name": "huddle_announcements_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_announcements_huddle_id_huddles_id_fk": {
+ "name": "huddle_announcements_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_announcements",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_announcements_author_id_users_id_fk": {
+ "name": "huddle_announcements_author_id_users_id_fk",
+ "tableFrom": "huddle_announcements",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_awards": {
+ "name": "huddle_awards",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "glyph": {
+ "name": "glyph",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "color": {
+ "name": "color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "granted_by": {
+ "name": "granted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_awards_huddle_idx": {
+ "name": "huddle_awards_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_awards_huddle_roster_idx": {
+ "name": "huddle_awards_huddle_roster_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_awards_huddle_id_huddles_id_fk": {
+ "name": "huddle_awards_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_awards",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_awards_granted_by_users_id_fk": {
+ "name": "huddle_awards_granted_by_users_id_fk",
+ "tableFrom": "huddle_awards",
+ "tableTo": "users",
+ "columnsFrom": [
+ "granted_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_commissioners": {
+ "name": "huddle_commissioners",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "added_at": {
+ "name": "added_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "added_by": {
+ "name": "added_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "huddle_commissioners_user_idx": {
+ "name": "huddle_commissioners_user_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_commissioners_huddle_id_huddles_id_fk": {
+ "name": "huddle_commissioners_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_commissioners",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_commissioners_user_id_users_id_fk": {
+ "name": "huddle_commissioners_user_id_users_id_fk",
+ "tableFrom": "huddle_commissioners",
+ "tableTo": "users",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "huddle_commissioners_added_by_users_id_fk": {
+ "name": "huddle_commissioners_added_by_users_id_fk",
+ "tableFrom": "huddle_commissioners",
+ "tableTo": "users",
+ "columnsFrom": [
+ "added_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "huddle_commissioners_huddle_id_user_id_pk": {
+ "name": "huddle_commissioners_huddle_id_user_id_pk",
+ "columns": [
+ "huddle_id",
+ "user_id"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_countdown_config": {
+ "name": "huddle_countdown_config",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "subtitle": {
+ "name": "subtitle",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "target_at": {
+ "name": "target_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "huddle_countdown_config_huddle_id_huddles_id_fk": {
+ "name": "huddle_countdown_config_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_countdown_config",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_dues_config": {
+ "name": "huddle_dues_config",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "huddle_dues_config_huddle_id_huddles_id_fk": {
+ "name": "huddle_dues_config_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_dues_config",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_dues_payments": {
+ "name": "huddle_dues_payments",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "paid_at": {
+ "name": "paid_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "marked_by": {
+ "name": "marked_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_dues_payments_huddle_roster_uniq": {
+ "name": "huddle_dues_payments_huddle_roster_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_dues_payments_huddle_id_huddles_id_fk": {
+ "name": "huddle_dues_payments_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_dues_payments",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_dues_payments_marked_by_users_id_fk": {
+ "name": "huddle_dues_payments_marked_by_users_id_fk",
+ "tableFrom": "huddle_dues_payments",
+ "tableTo": "users",
+ "columnsFrom": [
+ "marked_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_forum_replies": {
+ "name": "huddle_forum_replies",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "topic_id": {
+ "name": "topic_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted_by": {
+ "name": "deleted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "huddle_forum_replies_topic_idx": {
+ "name": "huddle_forum_replies_topic_idx",
+ "columns": [
+ {
+ "expression": "topic_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_forum_replies_topic_id_huddle_forum_topics_id_fk": {
+ "name": "huddle_forum_replies_topic_id_huddle_forum_topics_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "tableTo": "huddle_forum_topics",
+ "columnsFrom": [
+ "topic_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_forum_replies_huddle_id_huddles_id_fk": {
+ "name": "huddle_forum_replies_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_forum_replies_author_id_users_id_fk": {
+ "name": "huddle_forum_replies_author_id_users_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "huddle_forum_replies_deleted_by_users_id_fk": {
+ "name": "huddle_forum_replies_deleted_by_users_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "tableTo": "users",
+ "columnsFrom": [
+ "deleted_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_forum_topics": {
+ "name": "huddle_forum_topics",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "reply_count": {
+ "name": "reply_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted_by": {
+ "name": "deleted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "huddle_forum_topics_huddle_updated_idx": {
+ "name": "huddle_forum_topics_huddle_updated_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "updated_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_forum_topics_huddle_id_huddles_id_fk": {
+ "name": "huddle_forum_topics_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_forum_topics",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_forum_topics_author_id_users_id_fk": {
+ "name": "huddle_forum_topics_author_id_users_id_fk",
+ "tableFrom": "huddle_forum_topics",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "huddle_forum_topics_deleted_by_users_id_fk": {
+ "name": "huddle_forum_topics_deleted_by_users_id_fk",
+ "tableFrom": "huddle_forum_topics",
+ "tableTo": "users",
+ "columnsFrom": [
+ "deleted_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_payout_entries": {
+ "name": "huddle_payout_entries",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_payout_entries_huddle_idx": {
+ "name": "huddle_payout_entries_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_payout_entries_huddle_id_huddles_id_fk": {
+ "name": "huddle_payout_entries_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_payout_entries",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_poll_options": {
+ "name": "huddle_poll_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "poll_id": {
+ "name": "poll_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "huddle_poll_options_poll_idx": {
+ "name": "huddle_poll_options_poll_idx",
+ "columns": [
+ {
+ "expression": "poll_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_poll_options_poll_id_huddle_polls_id_fk": {
+ "name": "huddle_poll_options_poll_id_huddle_polls_id_fk",
+ "tableFrom": "huddle_poll_options",
+ "tableTo": "huddle_polls",
+ "columnsFrom": [
+ "poll_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_poll_votes": {
+ "name": "huddle_poll_votes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "poll_id": {
+ "name": "poll_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "option_id": {
+ "name": "option_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_poll_votes_poll_user_idx": {
+ "name": "huddle_poll_votes_poll_user_idx",
+ "columns": [
+ {
+ "expression": "poll_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_poll_votes_option_user_uniq": {
+ "name": "huddle_poll_votes_option_user_uniq",
+ "columns": [
+ {
+ "expression": "option_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_poll_votes_poll_id_huddle_polls_id_fk": {
+ "name": "huddle_poll_votes_poll_id_huddle_polls_id_fk",
+ "tableFrom": "huddle_poll_votes",
+ "tableTo": "huddle_polls",
+ "columnsFrom": [
+ "poll_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_poll_votes_option_id_huddle_poll_options_id_fk": {
+ "name": "huddle_poll_votes_option_id_huddle_poll_options_id_fk",
+ "tableFrom": "huddle_poll_votes",
+ "tableTo": "huddle_poll_options",
+ "columnsFrom": [
+ "option_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_poll_votes_user_id_users_id_fk": {
+ "name": "huddle_poll_votes_user_id_users_id_fk",
+ "tableFrom": "huddle_poll_votes",
+ "tableTo": "users",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_polls": {
+ "name": "huddle_polls",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "topic_id": {
+ "name": "topic_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_dashboard_poll": {
+ "name": "is_dashboard_poll",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "question": {
+ "name": "question",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "allow_multiple": {
+ "name": "allow_multiple",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "allow_vote_changes": {
+ "name": "allow_vote_changes",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "results_visibility": {
+ "name": "results_visibility",
+ "type": "poll_results_visibility",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'always'"
+ },
+ "closes_at": {
+ "name": "closes_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_polls_topic_idx": {
+ "name": "huddle_polls_topic_idx",
+ "columns": [
+ {
+ "expression": "topic_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_polls_dashboard_active_uniq": {
+ "name": "huddle_polls_dashboard_active_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"huddle_polls\".\"is_dashboard_poll\" = true",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_polls_huddle_id_huddles_id_fk": {
+ "name": "huddle_polls_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_polls",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_polls_author_id_users_id_fk": {
+ "name": "huddle_polls_author_id_users_id_fk",
+ "tableFrom": "huddle_polls",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "huddle_polls_topic_id_huddle_forum_topics_id_fk": {
+ "name": "huddle_polls_topic_id_huddle_forum_topics_id_fk",
+ "tableFrom": "huddle_polls",
+ "tableTo": "huddle_forum_topics",
+ "columnsFrom": [
+ "topic_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_answer_options": {
+ "name": "huddle_survey_answer_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "response_id": {
+ "name": "response_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "option_id": {
+ "name": "option_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "huddle_survey_answer_options_question_idx": {
+ "name": "huddle_survey_answer_options_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_survey_answer_options_response_option_uniq": {
+ "name": "huddle_survey_answer_options_response_option_uniq",
+ "columns": [
+ {
+ "expression": "response_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "option_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_answer_options_response_id_huddle_survey_responses_id_fk": {
+ "name": "huddle_survey_answer_options_response_id_huddle_survey_responses_id_fk",
+ "tableFrom": "huddle_survey_answer_options",
+ "tableTo": "huddle_survey_responses",
+ "columnsFrom": [
+ "response_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_survey_answer_options_question_id_huddle_survey_questions_id_fk": {
+ "name": "huddle_survey_answer_options_question_id_huddle_survey_questions_id_fk",
+ "tableFrom": "huddle_survey_answer_options",
+ "tableTo": "huddle_survey_questions",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_survey_answer_options_option_id_huddle_survey_options_id_fk": {
+ "name": "huddle_survey_answer_options_option_id_huddle_survey_options_id_fk",
+ "tableFrom": "huddle_survey_answer_options",
+ "tableTo": "huddle_survey_options",
+ "columnsFrom": [
+ "option_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_answers": {
+ "name": "huddle_survey_answers",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "response_id": {
+ "name": "response_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "text_value": {
+ "name": "text_value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "huddle_survey_answers_response_idx": {
+ "name": "huddle_survey_answers_response_idx",
+ "columns": [
+ {
+ "expression": "response_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_survey_answers_question_idx": {
+ "name": "huddle_survey_answers_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_answers_response_id_huddle_survey_responses_id_fk": {
+ "name": "huddle_survey_answers_response_id_huddle_survey_responses_id_fk",
+ "tableFrom": "huddle_survey_answers",
+ "tableTo": "huddle_survey_responses",
+ "columnsFrom": [
+ "response_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_survey_answers_question_id_huddle_survey_questions_id_fk": {
+ "name": "huddle_survey_answers_question_id_huddle_survey_questions_id_fk",
+ "tableFrom": "huddle_survey_answers",
+ "tableTo": "huddle_survey_questions",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_options": {
+ "name": "huddle_survey_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "huddle_survey_options_question_idx": {
+ "name": "huddle_survey_options_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_options_question_id_huddle_survey_questions_id_fk": {
+ "name": "huddle_survey_options_question_id_huddle_survey_questions_id_fk",
+ "tableFrom": "huddle_survey_options",
+ "tableTo": "huddle_survey_questions",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_questions": {
+ "name": "huddle_survey_questions",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "survey_id": {
+ "name": "survey_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "type": {
+ "name": "type",
+ "type": "survey_question_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "prompt": {
+ "name": "prompt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "required": {
+ "name": "required",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "huddle_survey_questions_survey_idx": {
+ "name": "huddle_survey_questions_survey_idx",
+ "columns": [
+ {
+ "expression": "survey_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "sort_order",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_questions_survey_id_huddle_surveys_id_fk": {
+ "name": "huddle_survey_questions_survey_id_huddle_surveys_id_fk",
+ "tableFrom": "huddle_survey_questions",
+ "tableTo": "huddle_surveys",
+ "columnsFrom": [
+ "survey_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_responses": {
+ "name": "huddle_survey_responses",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "survey_id": {
+ "name": "survey_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_survey_responses_survey_user_uniq": {
+ "name": "huddle_survey_responses_survey_user_uniq",
+ "columns": [
+ {
+ "expression": "survey_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_responses_survey_id_huddle_surveys_id_fk": {
+ "name": "huddle_survey_responses_survey_id_huddle_surveys_id_fk",
+ "tableFrom": "huddle_survey_responses",
+ "tableTo": "huddle_surveys",
+ "columnsFrom": [
+ "survey_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_survey_responses_user_id_users_id_fk": {
+ "name": "huddle_survey_responses_user_id_users_id_fk",
+ "tableFrom": "huddle_survey_responses",
+ "tableTo": "users",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_surveys": {
+ "name": "huddle_surveys",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "closes_at": {
+ "name": "closes_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "results_published": {
+ "name": "results_published",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "auto_publish_on_close": {
+ "name": "auto_publish_on_close",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "anonymity": {
+ "name": "anonymity",
+ "type": "survey_anonymity",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'none'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_surveys_huddle_created_idx": {
+ "name": "huddle_surveys_huddle_created_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_surveys_huddle_id_huddles_id_fk": {
+ "name": "huddle_surveys_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_surveys",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_surveys_author_id_users_id_fk": {
+ "name": "huddle_surveys_author_id_users_id_fk",
+ "tableFrom": "huddle_surveys",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddles": {
+ "name": "huddles",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "league_provider": {
+ "name": "league_provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "league_id": {
+ "name": "league_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "invite_code": {
+ "name": "invite_code",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "invite_code_updated_at": {
+ "name": "invite_code_updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "invite_link_token": {
+ "name": "invite_link_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "invite_link_expires_at": {
+ "name": "invite_link_expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddles_invite_code_uniq": {
+ "name": "huddles_invite_code_uniq",
+ "columns": [
+ {
+ "expression": "invite_code",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddles_invite_link_token_uniq": {
+ "name": "huddles_invite_link_token_uniq",
+ "columns": [
+ {
+ "expression": "invite_link_token",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.side_bets": {
+ "name": "side_bets",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "proposer_id": {
+ "name": "proposer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "opponent_id": {
+ "name": "opponent_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "proposer_roster_id": {
+ "name": "proposer_roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "opponent_roster_id": {
+ "name": "opponent_roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "week": {
+ "name": "week",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "prize_description": {
+ "name": "prize_description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "side_bet_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "winner_id": {
+ "name": "winner_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "settlement_note": {
+ "name": "settlement_note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "side_bets_huddle_idx": {
+ "name": "side_bets_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "side_bets_proposer_idx": {
+ "name": "side_bets_proposer_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "proposer_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "side_bets_opponent_idx": {
+ "name": "side_bets_opponent_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "opponent_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "side_bets_huddle_id_huddles_id_fk": {
+ "name": "side_bets_huddle_id_huddles_id_fk",
+ "tableFrom": "side_bets",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "side_bets_proposer_id_users_id_fk": {
+ "name": "side_bets_proposer_id_users_id_fk",
+ "tableFrom": "side_bets",
+ "tableTo": "users",
+ "columnsFrom": [
+ "proposer_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "side_bets_opponent_id_users_id_fk": {
+ "name": "side_bets_opponent_id_users_id_fk",
+ "tableFrom": "side_bets",
+ "tableTo": "users",
+ "columnsFrom": [
+ "opponent_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "side_bets_winner_id_users_id_fk": {
+ "name": "side_bets_winner_id_users_id_fk",
+ "tableFrom": "side_bets",
+ "tableTo": "users",
+ "columnsFrom": [
+ "winner_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.team_claims": {
+ "name": "team_claims",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "claim_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "message": {
+ "name": "message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "decided_at": {
+ "name": "decided_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "decided_by": {
+ "name": "decided_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "team_claims_huddle_roster_approved_uniq": {
+ "name": "team_claims_huddle_roster_approved_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"team_claims\".\"status\" = 'approved'",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "team_claims_huddle_user_approved_uniq": {
+ "name": "team_claims_huddle_user_approved_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"team_claims\".\"status\" = 'approved'",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "team_claims_huddle_idx": {
+ "name": "team_claims_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "team_claims_user_idx": {
+ "name": "team_claims_user_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "team_claims_huddle_id_huddles_id_fk": {
+ "name": "team_claims_huddle_id_huddles_id_fk",
+ "tableFrom": "team_claims",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "team_claims_user_id_users_id_fk": {
+ "name": "team_claims_user_id_users_id_fk",
+ "tableFrom": "team_claims",
+ "tableTo": "users",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "team_claims_decided_by_users_id_fk": {
+ "name": "team_claims_decided_by_users_id_fk",
+ "tableFrom": "team_claims",
+ "tableTo": "users",
+ "columnsFrom": [
+ "decided_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.users": {
+ "name": "users",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sleeper_username": {
+ "name": "sleeper_username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sleeper_user_id": {
+ "name": "sleeper_user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "synced_league_ids": {
+ "name": "synced_league_ids",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'::text[]"
+ },
+ "is_placeholder": {
+ "name": "is_placeholder",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "identity_synced_at": {
+ "name": "identity_synced_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "users_email_idx": {
+ "name": "users_email_idx",
+ "columns": [
+ {
+ "expression": "email",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "users_username_idx": {
+ "name": "users_username_idx",
+ "columns": [
+ {
+ "expression": "username",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "public.claim_status": {
+ "name": "claim_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "approved",
+ "rejected"
+ ]
+ },
+ "public.poll_results_visibility": {
+ "name": "poll_results_visibility",
+ "schema": "public",
+ "values": [
+ "always",
+ "after_vote",
+ "after_close"
+ ]
+ },
+ "public.side_bet_status": {
+ "name": "side_bet_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "accepted",
+ "rejected",
+ "cancelled",
+ "settled"
+ ]
+ },
+ "public.survey_anonymity": {
+ "name": "survey_anonymity",
+ "schema": "public",
+ "values": [
+ "none",
+ "anonymous_to_league",
+ "anonymous_to_all"
+ ]
+ },
+ "public.survey_question_type": {
+ "name": "survey_question_type",
+ "schema": "public",
+ "values": [
+ "short_text",
+ "paragraph",
+ "multiple_choice",
+ "checkboxes"
+ ]
+ }
+ },
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/server/drizzle/meta/0013_snapshot.json b/server/drizzle/meta/0013_snapshot.json
new file mode 100644
index 0000000..95be831
--- /dev/null
+++ b/server/drizzle/meta/0013_snapshot.json
@@ -0,0 +1,2644 @@
+{
+ "id": "63c4d38b-4b6d-49ad-a885-3cc750ee2e2a",
+ "prevId": "48c4474c-9264-4e99-922a-8f1e3ed418a2",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.huddle_active_trophies": {
+ "name": "huddle_active_trophies",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "trophy_type": {
+ "name": "trophy_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "huddle_active_trophies_huddle_id_huddles_id_fk": {
+ "name": "huddle_active_trophies_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_active_trophies",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "huddle_active_trophies_huddle_id_trophy_type_pk": {
+ "name": "huddle_active_trophies_huddle_id_trophy_type_pk",
+ "columns": [
+ "huddle_id",
+ "trophy_type"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_announcements": {
+ "name": "huddle_announcements",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_announcements_huddle_idx": {
+ "name": "huddle_announcements_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_announcements_huddle_id_huddles_id_fk": {
+ "name": "huddle_announcements_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_announcements",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_announcements_author_id_users_id_fk": {
+ "name": "huddle_announcements_author_id_users_id_fk",
+ "tableFrom": "huddle_announcements",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_awards": {
+ "name": "huddle_awards",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "glyph": {
+ "name": "glyph",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "color": {
+ "name": "color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "granted_by": {
+ "name": "granted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_awards_huddle_idx": {
+ "name": "huddle_awards_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_awards_huddle_roster_idx": {
+ "name": "huddle_awards_huddle_roster_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_awards_huddle_id_huddles_id_fk": {
+ "name": "huddle_awards_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_awards",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_awards_granted_by_users_id_fk": {
+ "name": "huddle_awards_granted_by_users_id_fk",
+ "tableFrom": "huddle_awards",
+ "tableTo": "users",
+ "columnsFrom": [
+ "granted_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_commissioners": {
+ "name": "huddle_commissioners",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "added_at": {
+ "name": "added_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "added_by": {
+ "name": "added_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "huddle_commissioners_user_idx": {
+ "name": "huddle_commissioners_user_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_commissioners_huddle_id_huddles_id_fk": {
+ "name": "huddle_commissioners_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_commissioners",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_commissioners_user_id_users_id_fk": {
+ "name": "huddle_commissioners_user_id_users_id_fk",
+ "tableFrom": "huddle_commissioners",
+ "tableTo": "users",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "huddle_commissioners_added_by_users_id_fk": {
+ "name": "huddle_commissioners_added_by_users_id_fk",
+ "tableFrom": "huddle_commissioners",
+ "tableTo": "users",
+ "columnsFrom": [
+ "added_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "huddle_commissioners_huddle_id_user_id_pk": {
+ "name": "huddle_commissioners_huddle_id_user_id_pk",
+ "columns": [
+ "huddle_id",
+ "user_id"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_countdown_config": {
+ "name": "huddle_countdown_config",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "subtitle": {
+ "name": "subtitle",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "target_at": {
+ "name": "target_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "huddle_countdown_config_huddle_id_huddles_id_fk": {
+ "name": "huddle_countdown_config_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_countdown_config",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_dues_config": {
+ "name": "huddle_dues_config",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "huddle_dues_config_huddle_id_huddles_id_fk": {
+ "name": "huddle_dues_config_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_dues_config",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_dues_payments": {
+ "name": "huddle_dues_payments",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "paid_at": {
+ "name": "paid_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "marked_by": {
+ "name": "marked_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_dues_payments_huddle_roster_uniq": {
+ "name": "huddle_dues_payments_huddle_roster_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_dues_payments_huddle_id_huddles_id_fk": {
+ "name": "huddle_dues_payments_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_dues_payments",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_dues_payments_marked_by_users_id_fk": {
+ "name": "huddle_dues_payments_marked_by_users_id_fk",
+ "tableFrom": "huddle_dues_payments",
+ "tableTo": "users",
+ "columnsFrom": [
+ "marked_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_forum_replies": {
+ "name": "huddle_forum_replies",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "topic_id": {
+ "name": "topic_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted_by": {
+ "name": "deleted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "huddle_forum_replies_topic_idx": {
+ "name": "huddle_forum_replies_topic_idx",
+ "columns": [
+ {
+ "expression": "topic_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_forum_replies_topic_id_huddle_forum_topics_id_fk": {
+ "name": "huddle_forum_replies_topic_id_huddle_forum_topics_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "tableTo": "huddle_forum_topics",
+ "columnsFrom": [
+ "topic_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_forum_replies_huddle_id_huddles_id_fk": {
+ "name": "huddle_forum_replies_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_forum_replies_author_id_users_id_fk": {
+ "name": "huddle_forum_replies_author_id_users_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "huddle_forum_replies_deleted_by_users_id_fk": {
+ "name": "huddle_forum_replies_deleted_by_users_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "tableTo": "users",
+ "columnsFrom": [
+ "deleted_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_forum_topics": {
+ "name": "huddle_forum_topics",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "reply_count": {
+ "name": "reply_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted_by": {
+ "name": "deleted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "huddle_forum_topics_huddle_updated_idx": {
+ "name": "huddle_forum_topics_huddle_updated_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "updated_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_forum_topics_huddle_id_huddles_id_fk": {
+ "name": "huddle_forum_topics_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_forum_topics",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_forum_topics_author_id_users_id_fk": {
+ "name": "huddle_forum_topics_author_id_users_id_fk",
+ "tableFrom": "huddle_forum_topics",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "huddle_forum_topics_deleted_by_users_id_fk": {
+ "name": "huddle_forum_topics_deleted_by_users_id_fk",
+ "tableFrom": "huddle_forum_topics",
+ "tableTo": "users",
+ "columnsFrom": [
+ "deleted_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_payout_entries": {
+ "name": "huddle_payout_entries",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_payout_entries_huddle_idx": {
+ "name": "huddle_payout_entries_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_payout_entries_huddle_id_huddles_id_fk": {
+ "name": "huddle_payout_entries_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_payout_entries",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_poll_options": {
+ "name": "huddle_poll_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "poll_id": {
+ "name": "poll_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "huddle_poll_options_poll_idx": {
+ "name": "huddle_poll_options_poll_idx",
+ "columns": [
+ {
+ "expression": "poll_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_poll_options_poll_id_huddle_polls_id_fk": {
+ "name": "huddle_poll_options_poll_id_huddle_polls_id_fk",
+ "tableFrom": "huddle_poll_options",
+ "tableTo": "huddle_polls",
+ "columnsFrom": [
+ "poll_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_poll_votes": {
+ "name": "huddle_poll_votes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "poll_id": {
+ "name": "poll_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "option_id": {
+ "name": "option_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_poll_votes_poll_user_idx": {
+ "name": "huddle_poll_votes_poll_user_idx",
+ "columns": [
+ {
+ "expression": "poll_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_poll_votes_option_user_uniq": {
+ "name": "huddle_poll_votes_option_user_uniq",
+ "columns": [
+ {
+ "expression": "option_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_poll_votes_poll_id_huddle_polls_id_fk": {
+ "name": "huddle_poll_votes_poll_id_huddle_polls_id_fk",
+ "tableFrom": "huddle_poll_votes",
+ "tableTo": "huddle_polls",
+ "columnsFrom": [
+ "poll_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_poll_votes_option_id_huddle_poll_options_id_fk": {
+ "name": "huddle_poll_votes_option_id_huddle_poll_options_id_fk",
+ "tableFrom": "huddle_poll_votes",
+ "tableTo": "huddle_poll_options",
+ "columnsFrom": [
+ "option_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_poll_votes_user_id_users_id_fk": {
+ "name": "huddle_poll_votes_user_id_users_id_fk",
+ "tableFrom": "huddle_poll_votes",
+ "tableTo": "users",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_polls": {
+ "name": "huddle_polls",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "topic_id": {
+ "name": "topic_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_dashboard_poll": {
+ "name": "is_dashboard_poll",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "question": {
+ "name": "question",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "allow_multiple": {
+ "name": "allow_multiple",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "allow_vote_changes": {
+ "name": "allow_vote_changes",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "results_visibility": {
+ "name": "results_visibility",
+ "type": "poll_results_visibility",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'always'"
+ },
+ "closes_at": {
+ "name": "closes_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_polls_topic_idx": {
+ "name": "huddle_polls_topic_idx",
+ "columns": [
+ {
+ "expression": "topic_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_polls_dashboard_active_uniq": {
+ "name": "huddle_polls_dashboard_active_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"huddle_polls\".\"is_dashboard_poll\" = true",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_polls_huddle_id_huddles_id_fk": {
+ "name": "huddle_polls_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_polls",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_polls_author_id_users_id_fk": {
+ "name": "huddle_polls_author_id_users_id_fk",
+ "tableFrom": "huddle_polls",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "huddle_polls_topic_id_huddle_forum_topics_id_fk": {
+ "name": "huddle_polls_topic_id_huddle_forum_topics_id_fk",
+ "tableFrom": "huddle_polls",
+ "tableTo": "huddle_forum_topics",
+ "columnsFrom": [
+ "topic_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_side_bets": {
+ "name": "huddle_side_bets",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "proposer_id": {
+ "name": "proposer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "opponent_id": {
+ "name": "opponent_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "proposer_roster_id": {
+ "name": "proposer_roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "opponent_roster_id": {
+ "name": "opponent_roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "week": {
+ "name": "week",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "prize_description": {
+ "name": "prize_description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "side_bet_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "winner_id": {
+ "name": "winner_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "settlement_note": {
+ "name": "settlement_note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_side_bets_huddle_idx": {
+ "name": "huddle_side_bets_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_side_bets_proposer_idx": {
+ "name": "huddle_side_bets_proposer_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "proposer_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_side_bets_opponent_idx": {
+ "name": "huddle_side_bets_opponent_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "opponent_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_side_bets_huddle_id_huddles_id_fk": {
+ "name": "huddle_side_bets_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_side_bets",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_side_bets_proposer_id_users_id_fk": {
+ "name": "huddle_side_bets_proposer_id_users_id_fk",
+ "tableFrom": "huddle_side_bets",
+ "tableTo": "users",
+ "columnsFrom": [
+ "proposer_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "huddle_side_bets_opponent_id_users_id_fk": {
+ "name": "huddle_side_bets_opponent_id_users_id_fk",
+ "tableFrom": "huddle_side_bets",
+ "tableTo": "users",
+ "columnsFrom": [
+ "opponent_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "huddle_side_bets_winner_id_users_id_fk": {
+ "name": "huddle_side_bets_winner_id_users_id_fk",
+ "tableFrom": "huddle_side_bets",
+ "tableTo": "users",
+ "columnsFrom": [
+ "winner_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_answer_options": {
+ "name": "huddle_survey_answer_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "response_id": {
+ "name": "response_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "option_id": {
+ "name": "option_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "huddle_survey_answer_options_question_idx": {
+ "name": "huddle_survey_answer_options_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_survey_answer_options_response_option_uniq": {
+ "name": "huddle_survey_answer_options_response_option_uniq",
+ "columns": [
+ {
+ "expression": "response_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "option_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_answer_options_response_id_huddle_survey_responses_id_fk": {
+ "name": "huddle_survey_answer_options_response_id_huddle_survey_responses_id_fk",
+ "tableFrom": "huddle_survey_answer_options",
+ "tableTo": "huddle_survey_responses",
+ "columnsFrom": [
+ "response_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_survey_answer_options_question_id_huddle_survey_questions_id_fk": {
+ "name": "huddle_survey_answer_options_question_id_huddle_survey_questions_id_fk",
+ "tableFrom": "huddle_survey_answer_options",
+ "tableTo": "huddle_survey_questions",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_survey_answer_options_option_id_huddle_survey_options_id_fk": {
+ "name": "huddle_survey_answer_options_option_id_huddle_survey_options_id_fk",
+ "tableFrom": "huddle_survey_answer_options",
+ "tableTo": "huddle_survey_options",
+ "columnsFrom": [
+ "option_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_answers": {
+ "name": "huddle_survey_answers",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "response_id": {
+ "name": "response_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "text_value": {
+ "name": "text_value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "huddle_survey_answers_response_idx": {
+ "name": "huddle_survey_answers_response_idx",
+ "columns": [
+ {
+ "expression": "response_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_survey_answers_question_idx": {
+ "name": "huddle_survey_answers_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_answers_response_id_huddle_survey_responses_id_fk": {
+ "name": "huddle_survey_answers_response_id_huddle_survey_responses_id_fk",
+ "tableFrom": "huddle_survey_answers",
+ "tableTo": "huddle_survey_responses",
+ "columnsFrom": [
+ "response_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_survey_answers_question_id_huddle_survey_questions_id_fk": {
+ "name": "huddle_survey_answers_question_id_huddle_survey_questions_id_fk",
+ "tableFrom": "huddle_survey_answers",
+ "tableTo": "huddle_survey_questions",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_options": {
+ "name": "huddle_survey_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "huddle_survey_options_question_idx": {
+ "name": "huddle_survey_options_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_options_question_id_huddle_survey_questions_id_fk": {
+ "name": "huddle_survey_options_question_id_huddle_survey_questions_id_fk",
+ "tableFrom": "huddle_survey_options",
+ "tableTo": "huddle_survey_questions",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_questions": {
+ "name": "huddle_survey_questions",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "survey_id": {
+ "name": "survey_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "type": {
+ "name": "type",
+ "type": "survey_question_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "prompt": {
+ "name": "prompt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "required": {
+ "name": "required",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "huddle_survey_questions_survey_idx": {
+ "name": "huddle_survey_questions_survey_idx",
+ "columns": [
+ {
+ "expression": "survey_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "sort_order",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_questions_survey_id_huddle_surveys_id_fk": {
+ "name": "huddle_survey_questions_survey_id_huddle_surveys_id_fk",
+ "tableFrom": "huddle_survey_questions",
+ "tableTo": "huddle_surveys",
+ "columnsFrom": [
+ "survey_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_responses": {
+ "name": "huddle_survey_responses",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "survey_id": {
+ "name": "survey_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_survey_responses_survey_user_uniq": {
+ "name": "huddle_survey_responses_survey_user_uniq",
+ "columns": [
+ {
+ "expression": "survey_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_responses_survey_id_huddle_surveys_id_fk": {
+ "name": "huddle_survey_responses_survey_id_huddle_surveys_id_fk",
+ "tableFrom": "huddle_survey_responses",
+ "tableTo": "huddle_surveys",
+ "columnsFrom": [
+ "survey_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_survey_responses_user_id_users_id_fk": {
+ "name": "huddle_survey_responses_user_id_users_id_fk",
+ "tableFrom": "huddle_survey_responses",
+ "tableTo": "users",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_surveys": {
+ "name": "huddle_surveys",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "closes_at": {
+ "name": "closes_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "results_published": {
+ "name": "results_published",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "auto_publish_on_close": {
+ "name": "auto_publish_on_close",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "anonymity": {
+ "name": "anonymity",
+ "type": "survey_anonymity",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'none'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_surveys_huddle_created_idx": {
+ "name": "huddle_surveys_huddle_created_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_surveys_huddle_id_huddles_id_fk": {
+ "name": "huddle_surveys_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_surveys",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_surveys_author_id_users_id_fk": {
+ "name": "huddle_surveys_author_id_users_id_fk",
+ "tableFrom": "huddle_surveys",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_team_claims": {
+ "name": "huddle_team_claims",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "claim_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "message": {
+ "name": "message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "decided_at": {
+ "name": "decided_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "decided_by": {
+ "name": "decided_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "huddle_team_claims_huddle_roster_approved_uniq": {
+ "name": "huddle_team_claims_huddle_roster_approved_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"huddle_team_claims\".\"status\" = 'approved'",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_team_claims_huddle_user_approved_uniq": {
+ "name": "huddle_team_claims_huddle_user_approved_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"huddle_team_claims\".\"status\" = 'approved'",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_team_claims_huddle_idx": {
+ "name": "huddle_team_claims_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddle_team_claims_user_idx": {
+ "name": "huddle_team_claims_user_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "huddle_team_claims_huddle_id_huddles_id_fk": {
+ "name": "huddle_team_claims_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_team_claims",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "huddle_team_claims_user_id_users_id_fk": {
+ "name": "huddle_team_claims_user_id_users_id_fk",
+ "tableFrom": "huddle_team_claims",
+ "tableTo": "users",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "huddle_team_claims_decided_by_users_id_fk": {
+ "name": "huddle_team_claims_decided_by_users_id_fk",
+ "tableFrom": "huddle_team_claims",
+ "tableTo": "users",
+ "columnsFrom": [
+ "decided_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddles": {
+ "name": "huddles",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "league_provider": {
+ "name": "league_provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "league_id": {
+ "name": "league_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "invite_code": {
+ "name": "invite_code",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "invite_code_updated_at": {
+ "name": "invite_code_updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "invite_link_token": {
+ "name": "invite_link_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "invite_link_expires_at": {
+ "name": "invite_link_expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddles_invite_code_uniq": {
+ "name": "huddles_invite_code_uniq",
+ "columns": [
+ {
+ "expression": "invite_code",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddles_invite_link_token_uniq": {
+ "name": "huddles_invite_link_token_uniq",
+ "columns": [
+ {
+ "expression": "invite_link_token",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.users": {
+ "name": "users",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sleeper_username": {
+ "name": "sleeper_username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sleeper_user_id": {
+ "name": "sleeper_user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "synced_league_ids": {
+ "name": "synced_league_ids",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'::text[]"
+ },
+ "is_placeholder": {
+ "name": "is_placeholder",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "identity_synced_at": {
+ "name": "identity_synced_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "users_email_idx": {
+ "name": "users_email_idx",
+ "columns": [
+ {
+ "expression": "email",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "users_username_idx": {
+ "name": "users_username_idx",
+ "columns": [
+ {
+ "expression": "username",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "public.claim_status": {
+ "name": "claim_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "approved",
+ "rejected"
+ ]
+ },
+ "public.poll_results_visibility": {
+ "name": "poll_results_visibility",
+ "schema": "public",
+ "values": [
+ "always",
+ "after_vote",
+ "after_close"
+ ]
+ },
+ "public.side_bet_status": {
+ "name": "side_bet_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "accepted",
+ "rejected",
+ "cancelled",
+ "settled"
+ ]
+ },
+ "public.survey_anonymity": {
+ "name": "survey_anonymity",
+ "schema": "public",
+ "values": [
+ "none",
+ "anonymous_to_league",
+ "anonymous_to_all"
+ ]
+ },
+ "public.survey_question_type": {
+ "name": "survey_question_type",
+ "schema": "public",
+ "values": [
+ "short_text",
+ "paragraph",
+ "multiple_choice",
+ "checkboxes"
+ ]
+ }
+ },
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/server/drizzle/meta/0014_snapshot.json b/server/drizzle/meta/0014_snapshot.json
new file mode 100644
index 0000000..b62dbe0
--- /dev/null
+++ b/server/drizzle/meta/0014_snapshot.json
@@ -0,0 +1,2644 @@
+{
+ "id": "f9994cad-9a04-4600-976e-240953d6631c",
+ "prevId": "63c4d38b-4b6d-49ad-a885-3cc750ee2e2a",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.huddle_active_trophies": {
+ "name": "huddle_active_trophies",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "trophy_type": {
+ "name": "trophy_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "huddle_active_trophies_huddle_id_huddles_id_fk": {
+ "name": "huddle_active_trophies_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_active_trophies",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {
+ "huddle_active_trophies_huddle_id_trophy_type_pk": {
+ "name": "huddle_active_trophies_huddle_id_trophy_type_pk",
+ "columns": [
+ "huddle_id",
+ "trophy_type"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_announcements": {
+ "name": "huddle_announcements",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_announcements_huddle_idx": {
+ "name": "huddle_announcements_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_announcements_huddle_id_huddles_id_fk": {
+ "name": "huddle_announcements_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_announcements",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_announcements_author_id_users_id_fk": {
+ "name": "huddle_announcements_author_id_users_id_fk",
+ "tableFrom": "huddle_announcements",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_awards": {
+ "name": "huddle_awards",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "glyph": {
+ "name": "glyph",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "color": {
+ "name": "color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "granted_by": {
+ "name": "granted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_awards_huddle_idx": {
+ "name": "huddle_awards_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "huddle_awards_huddle_roster_idx": {
+ "name": "huddle_awards_huddle_roster_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_awards_huddle_id_huddles_id_fk": {
+ "name": "huddle_awards_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_awards",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_awards_granted_by_users_id_fk": {
+ "name": "huddle_awards_granted_by_users_id_fk",
+ "tableFrom": "huddle_awards",
+ "columnsFrom": [
+ "granted_by"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_commissioners": {
+ "name": "huddle_commissioners",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "added_at": {
+ "name": "added_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "added_by": {
+ "name": "added_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "huddle_commissioners_user_idx": {
+ "name": "huddle_commissioners_user_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_commissioners_huddle_id_huddles_id_fk": {
+ "name": "huddle_commissioners_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_commissioners",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_commissioners_user_id_users_id_fk": {
+ "name": "huddle_commissioners_user_id_users_id_fk",
+ "tableFrom": "huddle_commissioners",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "huddle_commissioners_added_by_users_id_fk": {
+ "name": "huddle_commissioners_added_by_users_id_fk",
+ "tableFrom": "huddle_commissioners",
+ "columnsFrom": [
+ "added_by"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {
+ "huddle_commissioners_huddle_id_user_id_pk": {
+ "name": "huddle_commissioners_huddle_id_user_id_pk",
+ "columns": [
+ "huddle_id",
+ "user_id"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_countdown_config": {
+ "name": "huddle_countdown_config",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "subtitle": {
+ "name": "subtitle",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "target_at": {
+ "name": "target_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "huddle_countdown_config_huddle_id_huddles_id_fk": {
+ "name": "huddle_countdown_config_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_countdown_config",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_dues_config": {
+ "name": "huddle_dues_config",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "huddle_dues_config_huddle_id_huddles_id_fk": {
+ "name": "huddle_dues_config_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_dues_config",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_dues_payments": {
+ "name": "huddle_dues_payments",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "paid_at": {
+ "name": "paid_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "marked_by": {
+ "name": "marked_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_dues_payments_huddle_roster_uniq": {
+ "name": "huddle_dues_payments_huddle_roster_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_dues_payments_huddle_id_huddles_id_fk": {
+ "name": "huddle_dues_payments_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_dues_payments",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_dues_payments_marked_by_users_id_fk": {
+ "name": "huddle_dues_payments_marked_by_users_id_fk",
+ "tableFrom": "huddle_dues_payments",
+ "columnsFrom": [
+ "marked_by"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_forum_replies": {
+ "name": "huddle_forum_replies",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "topic_id": {
+ "name": "topic_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted_by": {
+ "name": "deleted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "huddle_forum_replies_topic_idx": {
+ "name": "huddle_forum_replies_topic_idx",
+ "columns": [
+ {
+ "expression": "topic_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_forum_replies_topic_id_huddle_forum_topics_id_fk": {
+ "name": "huddle_forum_replies_topic_id_huddle_forum_topics_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "columnsFrom": [
+ "topic_id"
+ ],
+ "tableTo": "huddle_forum_topics",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_forum_replies_huddle_id_huddles_id_fk": {
+ "name": "huddle_forum_replies_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_forum_replies_author_id_users_id_fk": {
+ "name": "huddle_forum_replies_author_id_users_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "huddle_forum_replies_deleted_by_users_id_fk": {
+ "name": "huddle_forum_replies_deleted_by_users_id_fk",
+ "tableFrom": "huddle_forum_replies",
+ "columnsFrom": [
+ "deleted_by"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_forum_topics": {
+ "name": "huddle_forum_topics",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "reply_count": {
+ "name": "reply_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted_by": {
+ "name": "deleted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "huddle_forum_topics_huddle_updated_idx": {
+ "name": "huddle_forum_topics_huddle_updated_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "updated_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_forum_topics_huddle_id_huddles_id_fk": {
+ "name": "huddle_forum_topics_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_forum_topics",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_forum_topics_author_id_users_id_fk": {
+ "name": "huddle_forum_topics_author_id_users_id_fk",
+ "tableFrom": "huddle_forum_topics",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "huddle_forum_topics_deleted_by_users_id_fk": {
+ "name": "huddle_forum_topics_deleted_by_users_id_fk",
+ "tableFrom": "huddle_forum_topics",
+ "columnsFrom": [
+ "deleted_by"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_payout_entries": {
+ "name": "huddle_payout_entries",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_payout_entries_huddle_idx": {
+ "name": "huddle_payout_entries_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_payout_entries_huddle_id_huddles_id_fk": {
+ "name": "huddle_payout_entries_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_payout_entries",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_poll_options": {
+ "name": "huddle_poll_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "poll_id": {
+ "name": "poll_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "huddle_poll_options_poll_idx": {
+ "name": "huddle_poll_options_poll_idx",
+ "columns": [
+ {
+ "expression": "poll_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_poll_options_poll_id_huddle_polls_id_fk": {
+ "name": "huddle_poll_options_poll_id_huddle_polls_id_fk",
+ "tableFrom": "huddle_poll_options",
+ "columnsFrom": [
+ "poll_id"
+ ],
+ "tableTo": "huddle_polls",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_poll_votes": {
+ "name": "huddle_poll_votes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "poll_id": {
+ "name": "poll_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "option_id": {
+ "name": "option_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_poll_votes_poll_user_idx": {
+ "name": "huddle_poll_votes_poll_user_idx",
+ "columns": [
+ {
+ "expression": "poll_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "huddle_poll_votes_option_user_uniq": {
+ "name": "huddle_poll_votes_option_user_uniq",
+ "columns": [
+ {
+ "expression": "option_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_poll_votes_poll_id_huddle_polls_id_fk": {
+ "name": "huddle_poll_votes_poll_id_huddle_polls_id_fk",
+ "tableFrom": "huddle_poll_votes",
+ "columnsFrom": [
+ "poll_id"
+ ],
+ "tableTo": "huddle_polls",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_poll_votes_option_id_huddle_poll_options_id_fk": {
+ "name": "huddle_poll_votes_option_id_huddle_poll_options_id_fk",
+ "tableFrom": "huddle_poll_votes",
+ "columnsFrom": [
+ "option_id"
+ ],
+ "tableTo": "huddle_poll_options",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_poll_votes_user_id_users_id_fk": {
+ "name": "huddle_poll_votes_user_id_users_id_fk",
+ "tableFrom": "huddle_poll_votes",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_polls": {
+ "name": "huddle_polls",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "topic_id": {
+ "name": "topic_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_dashboard_poll": {
+ "name": "is_dashboard_poll",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "question": {
+ "name": "question",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "allow_multiple": {
+ "name": "allow_multiple",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "allow_vote_changes": {
+ "name": "allow_vote_changes",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "results_visibility": {
+ "name": "results_visibility",
+ "type": "poll_results_visibility",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'always'"
+ },
+ "closes_at": {
+ "name": "closes_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_polls_topic_idx": {
+ "name": "huddle_polls_topic_idx",
+ "columns": [
+ {
+ "expression": "topic_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "huddle_polls_dashboard_active_uniq": {
+ "name": "huddle_polls_dashboard_active_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "where": "\"huddle_polls\".\"is_dashboard_poll\" = true",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_polls_huddle_id_huddles_id_fk": {
+ "name": "huddle_polls_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_polls",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_polls_author_id_users_id_fk": {
+ "name": "huddle_polls_author_id_users_id_fk",
+ "tableFrom": "huddle_polls",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "huddle_polls_topic_id_huddle_forum_topics_id_fk": {
+ "name": "huddle_polls_topic_id_huddle_forum_topics_id_fk",
+ "tableFrom": "huddle_polls",
+ "columnsFrom": [
+ "topic_id"
+ ],
+ "tableTo": "huddle_forum_topics",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_side_bets": {
+ "name": "huddle_side_bets",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "proposer_id": {
+ "name": "proposer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "opponent_id": {
+ "name": "opponent_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "proposer_roster_id": {
+ "name": "proposer_roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "opponent_roster_id": {
+ "name": "opponent_roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "week": {
+ "name": "week",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "prize_description": {
+ "name": "prize_description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "side_bet_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "winner_id": {
+ "name": "winner_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "settlement_note": {
+ "name": "settlement_note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_side_bets_huddle_idx": {
+ "name": "huddle_side_bets_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "huddle_side_bets_proposer_idx": {
+ "name": "huddle_side_bets_proposer_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "proposer_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "huddle_side_bets_opponent_idx": {
+ "name": "huddle_side_bets_opponent_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "opponent_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_side_bets_huddle_id_huddles_id_fk": {
+ "name": "huddle_side_bets_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_side_bets",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_side_bets_proposer_id_users_id_fk": {
+ "name": "huddle_side_bets_proposer_id_users_id_fk",
+ "tableFrom": "huddle_side_bets",
+ "columnsFrom": [
+ "proposer_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "huddle_side_bets_opponent_id_users_id_fk": {
+ "name": "huddle_side_bets_opponent_id_users_id_fk",
+ "tableFrom": "huddle_side_bets",
+ "columnsFrom": [
+ "opponent_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "huddle_side_bets_winner_id_users_id_fk": {
+ "name": "huddle_side_bets_winner_id_users_id_fk",
+ "tableFrom": "huddle_side_bets",
+ "columnsFrom": [
+ "winner_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_answer_options": {
+ "name": "huddle_survey_answer_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "response_id": {
+ "name": "response_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "option_id": {
+ "name": "option_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "huddle_survey_answer_options_question_idx": {
+ "name": "huddle_survey_answer_options_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "huddle_survey_answer_options_response_option_uniq": {
+ "name": "huddle_survey_answer_options_response_option_uniq",
+ "columns": [
+ {
+ "expression": "response_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "option_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_answer_options_response_id_huddle_survey_responses_id_fk": {
+ "name": "huddle_survey_answer_options_response_id_huddle_survey_responses_id_fk",
+ "tableFrom": "huddle_survey_answer_options",
+ "columnsFrom": [
+ "response_id"
+ ],
+ "tableTo": "huddle_survey_responses",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_survey_answer_options_question_id_huddle_survey_questions_id_fk": {
+ "name": "huddle_survey_answer_options_question_id_huddle_survey_questions_id_fk",
+ "tableFrom": "huddle_survey_answer_options",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "tableTo": "huddle_survey_questions",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_survey_answer_options_option_id_huddle_survey_options_id_fk": {
+ "name": "huddle_survey_answer_options_option_id_huddle_survey_options_id_fk",
+ "tableFrom": "huddle_survey_answer_options",
+ "columnsFrom": [
+ "option_id"
+ ],
+ "tableTo": "huddle_survey_options",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_answers": {
+ "name": "huddle_survey_answers",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "response_id": {
+ "name": "response_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "text_value": {
+ "name": "text_value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "huddle_survey_answers_response_idx": {
+ "name": "huddle_survey_answers_response_idx",
+ "columns": [
+ {
+ "expression": "response_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "huddle_survey_answers_question_idx": {
+ "name": "huddle_survey_answers_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_answers_response_id_huddle_survey_responses_id_fk": {
+ "name": "huddle_survey_answers_response_id_huddle_survey_responses_id_fk",
+ "tableFrom": "huddle_survey_answers",
+ "columnsFrom": [
+ "response_id"
+ ],
+ "tableTo": "huddle_survey_responses",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_survey_answers_question_id_huddle_survey_questions_id_fk": {
+ "name": "huddle_survey_answers_question_id_huddle_survey_questions_id_fk",
+ "tableFrom": "huddle_survey_answers",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "tableTo": "huddle_survey_questions",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_options": {
+ "name": "huddle_survey_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "huddle_survey_options_question_idx": {
+ "name": "huddle_survey_options_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_options_question_id_huddle_survey_questions_id_fk": {
+ "name": "huddle_survey_options_question_id_huddle_survey_questions_id_fk",
+ "tableFrom": "huddle_survey_options",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "tableTo": "huddle_survey_questions",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_questions": {
+ "name": "huddle_survey_questions",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "survey_id": {
+ "name": "survey_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "type": {
+ "name": "type",
+ "type": "survey_question_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "prompt": {
+ "name": "prompt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "required": {
+ "name": "required",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "huddle_survey_questions_survey_idx": {
+ "name": "huddle_survey_questions_survey_idx",
+ "columns": [
+ {
+ "expression": "survey_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "sort_order",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_questions_survey_id_huddle_surveys_id_fk": {
+ "name": "huddle_survey_questions_survey_id_huddle_surveys_id_fk",
+ "tableFrom": "huddle_survey_questions",
+ "columnsFrom": [
+ "survey_id"
+ ],
+ "tableTo": "huddle_surveys",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_survey_responses": {
+ "name": "huddle_survey_responses",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "survey_id": {
+ "name": "survey_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_survey_responses_survey_user_uniq": {
+ "name": "huddle_survey_responses_survey_user_uniq",
+ "columns": [
+ {
+ "expression": "survey_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_survey_responses_survey_id_huddle_surveys_id_fk": {
+ "name": "huddle_survey_responses_survey_id_huddle_surveys_id_fk",
+ "tableFrom": "huddle_survey_responses",
+ "columnsFrom": [
+ "survey_id"
+ ],
+ "tableTo": "huddle_surveys",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_survey_responses_user_id_users_id_fk": {
+ "name": "huddle_survey_responses_user_id_users_id_fk",
+ "tableFrom": "huddle_survey_responses",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_surveys": {
+ "name": "huddle_surveys",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "closes_at": {
+ "name": "closes_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "results_published": {
+ "name": "results_published",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "auto_publish_on_close": {
+ "name": "auto_publish_on_close",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "anonymity": {
+ "name": "anonymity",
+ "type": "survey_anonymity",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'none'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddle_surveys_huddle_created_idx": {
+ "name": "huddle_surveys_huddle_created_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_surveys_huddle_id_huddles_id_fk": {
+ "name": "huddle_surveys_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_surveys",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_surveys_author_id_users_id_fk": {
+ "name": "huddle_surveys_author_id_users_id_fk",
+ "tableFrom": "huddle_surveys",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddle_team_claims": {
+ "name": "huddle_team_claims",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "claim_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "message": {
+ "name": "message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "decided_at": {
+ "name": "decided_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "decided_by": {
+ "name": "decided_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "huddle_team_claims_huddle_roster_approved_uniq": {
+ "name": "huddle_team_claims_huddle_roster_approved_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "where": "\"huddle_team_claims\".\"status\" = 'approved'",
+ "concurrently": false
+ },
+ "huddle_team_claims_huddle_user_approved_uniq": {
+ "name": "huddle_team_claims_huddle_user_approved_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "where": "\"huddle_team_claims\".\"status\" = 'approved'",
+ "concurrently": false
+ },
+ "huddle_team_claims_huddle_idx": {
+ "name": "huddle_team_claims_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "huddle_team_claims_user_idx": {
+ "name": "huddle_team_claims_user_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "huddle_team_claims_huddle_id_huddles_id_fk": {
+ "name": "huddle_team_claims_huddle_id_huddles_id_fk",
+ "tableFrom": "huddle_team_claims",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "huddle_team_claims_user_id_users_id_fk": {
+ "name": "huddle_team_claims_user_id_users_id_fk",
+ "tableFrom": "huddle_team_claims",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "huddle_team_claims_decided_by_users_id_fk": {
+ "name": "huddle_team_claims_decided_by_users_id_fk",
+ "tableFrom": "huddle_team_claims",
+ "columnsFrom": [
+ "decided_by"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddles": {
+ "name": "huddles",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "league_provider": {
+ "name": "league_provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "league_id": {
+ "name": "league_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "invite_code": {
+ "name": "invite_code",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "invite_code_updated_at": {
+ "name": "invite_code_updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "invite_link_token": {
+ "name": "invite_link_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "invite_link_expires_at": {
+ "name": "invite_link_expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddles_invite_code_uniq": {
+ "name": "huddles_invite_code_uniq",
+ "columns": [
+ {
+ "expression": "invite_code",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "huddles_invite_link_token_uniq": {
+ "name": "huddles_invite_link_token_uniq",
+ "columns": [
+ {
+ "expression": "invite_link_token",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.users": {
+ "name": "users",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sleeper_username": {
+ "name": "sleeper_username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sleeper_user_id": {
+ "name": "sleeper_user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "synced_league_ids": {
+ "name": "synced_league_ids",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'::text[]"
+ },
+ "is_placeholder": {
+ "name": "is_placeholder",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "identity_synced_at": {
+ "name": "identity_synced_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "users_email_idx": {
+ "name": "users_email_idx",
+ "columns": [
+ {
+ "expression": "email",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "users_username_idx": {
+ "name": "users_username_idx",
+ "columns": [
+ {
+ "expression": "username",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "public.claim_status": {
+ "name": "claim_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "approved",
+ "rejected"
+ ]
+ },
+ "public.poll_results_visibility": {
+ "name": "poll_results_visibility",
+ "schema": "public",
+ "values": [
+ "always",
+ "after_vote",
+ "after_close"
+ ]
+ },
+ "public.side_bet_status": {
+ "name": "side_bet_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "accepted",
+ "rejected",
+ "cancelled",
+ "settled"
+ ]
+ },
+ "public.survey_anonymity": {
+ "name": "survey_anonymity",
+ "schema": "public",
+ "values": [
+ "none",
+ "anonymous_to_league",
+ "anonymous_to_all"
+ ]
+ },
+ "public.survey_question_type": {
+ "name": "survey_question_type",
+ "schema": "public",
+ "values": [
+ "short_text",
+ "paragraph",
+ "multiple_choice",
+ "checkboxes"
+ ]
+ }
+ },
+ "schemas": {},
+ "views": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/server/drizzle/meta/0015_snapshot.json b/server/drizzle/meta/0015_snapshot.json
new file mode 100644
index 0000000..9a8e0bf
--- /dev/null
+++ b/server/drizzle/meta/0015_snapshot.json
@@ -0,0 +1,2644 @@
+{
+ "id": "a0ea729f-abdb-42b6-8bfd-4ed4c0d8b1a9",
+ "prevId": "f9994cad-9a04-4600-976e-240953d6631c",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.active_trophies": {
+ "name": "active_trophies",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "trophy_type": {
+ "name": "trophy_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "active_trophies_huddle_id_huddles_id_fk": {
+ "name": "active_trophies_huddle_id_huddles_id_fk",
+ "tableFrom": "active_trophies",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "active_trophies_huddle_id_trophy_type_pk": {
+ "name": "active_trophies_huddle_id_trophy_type_pk",
+ "columns": [
+ "huddle_id",
+ "trophy_type"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.announcements": {
+ "name": "announcements",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "announcements_huddle_idx": {
+ "name": "announcements_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "announcements_huddle_id_huddles_id_fk": {
+ "name": "announcements_huddle_id_huddles_id_fk",
+ "tableFrom": "announcements",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "announcements_author_id_users_id_fk": {
+ "name": "announcements_author_id_users_id_fk",
+ "tableFrom": "announcements",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.awards": {
+ "name": "awards",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "glyph": {
+ "name": "glyph",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "color": {
+ "name": "color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "granted_by": {
+ "name": "granted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "awards_huddle_idx": {
+ "name": "awards_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "awards_huddle_roster_idx": {
+ "name": "awards_huddle_roster_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "awards_huddle_id_huddles_id_fk": {
+ "name": "awards_huddle_id_huddles_id_fk",
+ "tableFrom": "awards",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "awards_granted_by_users_id_fk": {
+ "name": "awards_granted_by_users_id_fk",
+ "tableFrom": "awards",
+ "tableTo": "users",
+ "columnsFrom": [
+ "granted_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.commissioners": {
+ "name": "commissioners",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "added_at": {
+ "name": "added_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "added_by": {
+ "name": "added_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "commissioners_user_idx": {
+ "name": "commissioners_user_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "commissioners_huddle_id_huddles_id_fk": {
+ "name": "commissioners_huddle_id_huddles_id_fk",
+ "tableFrom": "commissioners",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "commissioners_user_id_users_id_fk": {
+ "name": "commissioners_user_id_users_id_fk",
+ "tableFrom": "commissioners",
+ "tableTo": "users",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "commissioners_added_by_users_id_fk": {
+ "name": "commissioners_added_by_users_id_fk",
+ "tableFrom": "commissioners",
+ "tableTo": "users",
+ "columnsFrom": [
+ "added_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "commissioners_huddle_id_user_id_pk": {
+ "name": "commissioners_huddle_id_user_id_pk",
+ "columns": [
+ "huddle_id",
+ "user_id"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.countdown_config": {
+ "name": "countdown_config",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "subtitle": {
+ "name": "subtitle",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "target_at": {
+ "name": "target_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "countdown_config_huddle_id_huddles_id_fk": {
+ "name": "countdown_config_huddle_id_huddles_id_fk",
+ "tableFrom": "countdown_config",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.dues_config": {
+ "name": "dues_config",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "dues_config_huddle_id_huddles_id_fk": {
+ "name": "dues_config_huddle_id_huddles_id_fk",
+ "tableFrom": "dues_config",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.dues_payments": {
+ "name": "dues_payments",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "paid_at": {
+ "name": "paid_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "marked_by": {
+ "name": "marked_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "dues_payments_huddle_roster_uniq": {
+ "name": "dues_payments_huddle_roster_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "dues_payments_huddle_id_huddles_id_fk": {
+ "name": "dues_payments_huddle_id_huddles_id_fk",
+ "tableFrom": "dues_payments",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "dues_payments_marked_by_users_id_fk": {
+ "name": "dues_payments_marked_by_users_id_fk",
+ "tableFrom": "dues_payments",
+ "tableTo": "users",
+ "columnsFrom": [
+ "marked_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.forum_replies": {
+ "name": "forum_replies",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "topic_id": {
+ "name": "topic_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted_by": {
+ "name": "deleted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "forum_replies_topic_idx": {
+ "name": "forum_replies_topic_idx",
+ "columns": [
+ {
+ "expression": "topic_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "forum_replies_topic_id_forum_topics_id_fk": {
+ "name": "forum_replies_topic_id_forum_topics_id_fk",
+ "tableFrom": "forum_replies",
+ "tableTo": "forum_topics",
+ "columnsFrom": [
+ "topic_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "forum_replies_huddle_id_huddles_id_fk": {
+ "name": "forum_replies_huddle_id_huddles_id_fk",
+ "tableFrom": "forum_replies",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "forum_replies_author_id_users_id_fk": {
+ "name": "forum_replies_author_id_users_id_fk",
+ "tableFrom": "forum_replies",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "forum_replies_deleted_by_users_id_fk": {
+ "name": "forum_replies_deleted_by_users_id_fk",
+ "tableFrom": "forum_replies",
+ "tableTo": "users",
+ "columnsFrom": [
+ "deleted_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.forum_topics": {
+ "name": "forum_topics",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "reply_count": {
+ "name": "reply_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted_by": {
+ "name": "deleted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "forum_topics_huddle_updated_idx": {
+ "name": "forum_topics_huddle_updated_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "updated_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "forum_topics_huddle_id_huddles_id_fk": {
+ "name": "forum_topics_huddle_id_huddles_id_fk",
+ "tableFrom": "forum_topics",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "forum_topics_author_id_users_id_fk": {
+ "name": "forum_topics_author_id_users_id_fk",
+ "tableFrom": "forum_topics",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "forum_topics_deleted_by_users_id_fk": {
+ "name": "forum_topics_deleted_by_users_id_fk",
+ "tableFrom": "forum_topics",
+ "tableTo": "users",
+ "columnsFrom": [
+ "deleted_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddles": {
+ "name": "huddles",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "league_provider": {
+ "name": "league_provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "league_id": {
+ "name": "league_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "invite_code": {
+ "name": "invite_code",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "invite_code_updated_at": {
+ "name": "invite_code_updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "invite_link_token": {
+ "name": "invite_link_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "invite_link_expires_at": {
+ "name": "invite_link_expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddles_invite_code_uniq": {
+ "name": "huddles_invite_code_uniq",
+ "columns": [
+ {
+ "expression": "invite_code",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "huddles_invite_link_token_uniq": {
+ "name": "huddles_invite_link_token_uniq",
+ "columns": [
+ {
+ "expression": "invite_link_token",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.payout_entries": {
+ "name": "payout_entries",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "payout_entries_huddle_idx": {
+ "name": "payout_entries_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "payout_entries_huddle_id_huddles_id_fk": {
+ "name": "payout_entries_huddle_id_huddles_id_fk",
+ "tableFrom": "payout_entries",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.poll_options": {
+ "name": "poll_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "poll_id": {
+ "name": "poll_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "poll_options_poll_idx": {
+ "name": "poll_options_poll_idx",
+ "columns": [
+ {
+ "expression": "poll_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "poll_options_poll_id_polls_id_fk": {
+ "name": "poll_options_poll_id_polls_id_fk",
+ "tableFrom": "poll_options",
+ "tableTo": "polls",
+ "columnsFrom": [
+ "poll_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.poll_votes": {
+ "name": "poll_votes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "poll_id": {
+ "name": "poll_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "option_id": {
+ "name": "option_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "poll_votes_poll_user_idx": {
+ "name": "poll_votes_poll_user_idx",
+ "columns": [
+ {
+ "expression": "poll_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "poll_votes_option_user_uniq": {
+ "name": "poll_votes_option_user_uniq",
+ "columns": [
+ {
+ "expression": "option_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "poll_votes_poll_id_polls_id_fk": {
+ "name": "poll_votes_poll_id_polls_id_fk",
+ "tableFrom": "poll_votes",
+ "tableTo": "polls",
+ "columnsFrom": [
+ "poll_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "poll_votes_option_id_poll_options_id_fk": {
+ "name": "poll_votes_option_id_poll_options_id_fk",
+ "tableFrom": "poll_votes",
+ "tableTo": "poll_options",
+ "columnsFrom": [
+ "option_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "poll_votes_user_id_users_id_fk": {
+ "name": "poll_votes_user_id_users_id_fk",
+ "tableFrom": "poll_votes",
+ "tableTo": "users",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.polls": {
+ "name": "polls",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "topic_id": {
+ "name": "topic_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_dashboard_poll": {
+ "name": "is_dashboard_poll",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "question": {
+ "name": "question",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "allow_multiple": {
+ "name": "allow_multiple",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "allow_vote_changes": {
+ "name": "allow_vote_changes",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "results_visibility": {
+ "name": "results_visibility",
+ "type": "poll_results_visibility",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'always'"
+ },
+ "closes_at": {
+ "name": "closes_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "polls_topic_idx": {
+ "name": "polls_topic_idx",
+ "columns": [
+ {
+ "expression": "topic_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "polls_dashboard_active_uniq": {
+ "name": "polls_dashboard_active_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"polls\".\"is_dashboard_poll\" = true",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "polls_huddle_id_huddles_id_fk": {
+ "name": "polls_huddle_id_huddles_id_fk",
+ "tableFrom": "polls",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "polls_author_id_users_id_fk": {
+ "name": "polls_author_id_users_id_fk",
+ "tableFrom": "polls",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "polls_topic_id_forum_topics_id_fk": {
+ "name": "polls_topic_id_forum_topics_id_fk",
+ "tableFrom": "polls",
+ "tableTo": "forum_topics",
+ "columnsFrom": [
+ "topic_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.side_bets": {
+ "name": "side_bets",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "proposer_id": {
+ "name": "proposer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "opponent_id": {
+ "name": "opponent_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "proposer_roster_id": {
+ "name": "proposer_roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "opponent_roster_id": {
+ "name": "opponent_roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "week": {
+ "name": "week",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "prize_description": {
+ "name": "prize_description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "side_bet_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "winner_id": {
+ "name": "winner_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "settlement_note": {
+ "name": "settlement_note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "side_bets_huddle_idx": {
+ "name": "side_bets_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "side_bets_proposer_idx": {
+ "name": "side_bets_proposer_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "proposer_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "side_bets_opponent_idx": {
+ "name": "side_bets_opponent_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "opponent_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "side_bets_huddle_id_huddles_id_fk": {
+ "name": "side_bets_huddle_id_huddles_id_fk",
+ "tableFrom": "side_bets",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "side_bets_proposer_id_users_id_fk": {
+ "name": "side_bets_proposer_id_users_id_fk",
+ "tableFrom": "side_bets",
+ "tableTo": "users",
+ "columnsFrom": [
+ "proposer_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "side_bets_opponent_id_users_id_fk": {
+ "name": "side_bets_opponent_id_users_id_fk",
+ "tableFrom": "side_bets",
+ "tableTo": "users",
+ "columnsFrom": [
+ "opponent_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "side_bets_winner_id_users_id_fk": {
+ "name": "side_bets_winner_id_users_id_fk",
+ "tableFrom": "side_bets",
+ "tableTo": "users",
+ "columnsFrom": [
+ "winner_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.survey_answer_options": {
+ "name": "survey_answer_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "response_id": {
+ "name": "response_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "option_id": {
+ "name": "option_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "survey_answer_options_question_idx": {
+ "name": "survey_answer_options_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "survey_answer_options_response_option_uniq": {
+ "name": "survey_answer_options_response_option_uniq",
+ "columns": [
+ {
+ "expression": "response_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "option_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "survey_answer_options_response_id_survey_responses_id_fk": {
+ "name": "survey_answer_options_response_id_survey_responses_id_fk",
+ "tableFrom": "survey_answer_options",
+ "tableTo": "survey_responses",
+ "columnsFrom": [
+ "response_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "survey_answer_options_question_id_survey_questions_id_fk": {
+ "name": "survey_answer_options_question_id_survey_questions_id_fk",
+ "tableFrom": "survey_answer_options",
+ "tableTo": "survey_questions",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "survey_answer_options_option_id_survey_options_id_fk": {
+ "name": "survey_answer_options_option_id_survey_options_id_fk",
+ "tableFrom": "survey_answer_options",
+ "tableTo": "survey_options",
+ "columnsFrom": [
+ "option_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.survey_answers": {
+ "name": "survey_answers",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "response_id": {
+ "name": "response_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "text_value": {
+ "name": "text_value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "survey_answers_response_idx": {
+ "name": "survey_answers_response_idx",
+ "columns": [
+ {
+ "expression": "response_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "survey_answers_question_idx": {
+ "name": "survey_answers_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "survey_answers_response_id_survey_responses_id_fk": {
+ "name": "survey_answers_response_id_survey_responses_id_fk",
+ "tableFrom": "survey_answers",
+ "tableTo": "survey_responses",
+ "columnsFrom": [
+ "response_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "survey_answers_question_id_survey_questions_id_fk": {
+ "name": "survey_answers_question_id_survey_questions_id_fk",
+ "tableFrom": "survey_answers",
+ "tableTo": "survey_questions",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.survey_options": {
+ "name": "survey_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "survey_options_question_idx": {
+ "name": "survey_options_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "survey_options_question_id_survey_questions_id_fk": {
+ "name": "survey_options_question_id_survey_questions_id_fk",
+ "tableFrom": "survey_options",
+ "tableTo": "survey_questions",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.survey_questions": {
+ "name": "survey_questions",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "survey_id": {
+ "name": "survey_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "type": {
+ "name": "type",
+ "type": "survey_question_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "prompt": {
+ "name": "prompt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "required": {
+ "name": "required",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "survey_questions_survey_idx": {
+ "name": "survey_questions_survey_idx",
+ "columns": [
+ {
+ "expression": "survey_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "sort_order",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "survey_questions_survey_id_surveys_id_fk": {
+ "name": "survey_questions_survey_id_surveys_id_fk",
+ "tableFrom": "survey_questions",
+ "tableTo": "surveys",
+ "columnsFrom": [
+ "survey_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.survey_responses": {
+ "name": "survey_responses",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "survey_id": {
+ "name": "survey_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "survey_responses_survey_user_uniq": {
+ "name": "survey_responses_survey_user_uniq",
+ "columns": [
+ {
+ "expression": "survey_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "survey_responses_survey_id_surveys_id_fk": {
+ "name": "survey_responses_survey_id_surveys_id_fk",
+ "tableFrom": "survey_responses",
+ "tableTo": "surveys",
+ "columnsFrom": [
+ "survey_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "survey_responses_user_id_users_id_fk": {
+ "name": "survey_responses_user_id_users_id_fk",
+ "tableFrom": "survey_responses",
+ "tableTo": "users",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.surveys": {
+ "name": "surveys",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "closes_at": {
+ "name": "closes_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "results_published": {
+ "name": "results_published",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "auto_publish_on_close": {
+ "name": "auto_publish_on_close",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "anonymity": {
+ "name": "anonymity",
+ "type": "survey_anonymity",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'none'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "surveys_huddle_created_idx": {
+ "name": "surveys_huddle_created_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "surveys_huddle_id_huddles_id_fk": {
+ "name": "surveys_huddle_id_huddles_id_fk",
+ "tableFrom": "surveys",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "surveys_author_id_users_id_fk": {
+ "name": "surveys_author_id_users_id_fk",
+ "tableFrom": "surveys",
+ "tableTo": "users",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.team_claims": {
+ "name": "team_claims",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "claim_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "message": {
+ "name": "message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "decided_at": {
+ "name": "decided_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "decided_by": {
+ "name": "decided_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "team_claims_huddle_roster_approved_uniq": {
+ "name": "team_claims_huddle_roster_approved_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"team_claims\".\"status\" = 'approved'",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "team_claims_huddle_user_approved_uniq": {
+ "name": "team_claims_huddle_user_approved_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "where": "\"team_claims\".\"status\" = 'approved'",
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "team_claims_huddle_idx": {
+ "name": "team_claims_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "team_claims_user_idx": {
+ "name": "team_claims_user_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "team_claims_huddle_id_huddles_id_fk": {
+ "name": "team_claims_huddle_id_huddles_id_fk",
+ "tableFrom": "team_claims",
+ "tableTo": "huddles",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "team_claims_user_id_users_id_fk": {
+ "name": "team_claims_user_id_users_id_fk",
+ "tableFrom": "team_claims",
+ "tableTo": "users",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ },
+ "team_claims_decided_by_users_id_fk": {
+ "name": "team_claims_decided_by_users_id_fk",
+ "tableFrom": "team_claims",
+ "tableTo": "users",
+ "columnsFrom": [
+ "decided_by"
+ ],
+ "columnsTo": [
+ "id"
+ ],
+ "onDelete": "restrict",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.users": {
+ "name": "users",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sleeper_username": {
+ "name": "sleeper_username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sleeper_user_id": {
+ "name": "sleeper_user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "synced_league_ids": {
+ "name": "synced_league_ids",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'::text[]"
+ },
+ "is_placeholder": {
+ "name": "is_placeholder",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "identity_synced_at": {
+ "name": "identity_synced_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "users_email_idx": {
+ "name": "users_email_idx",
+ "columns": [
+ {
+ "expression": "email",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "users_username_idx": {
+ "name": "users_username_idx",
+ "columns": [
+ {
+ "expression": "username",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "public.claim_status": {
+ "name": "claim_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "approved",
+ "rejected"
+ ]
+ },
+ "public.poll_results_visibility": {
+ "name": "poll_results_visibility",
+ "schema": "public",
+ "values": [
+ "always",
+ "after_vote",
+ "after_close"
+ ]
+ },
+ "public.side_bet_status": {
+ "name": "side_bet_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "accepted",
+ "rejected",
+ "cancelled",
+ "settled"
+ ]
+ },
+ "public.survey_anonymity": {
+ "name": "survey_anonymity",
+ "schema": "public",
+ "values": [
+ "none",
+ "anonymous_to_league",
+ "anonymous_to_all"
+ ]
+ },
+ "public.survey_question_type": {
+ "name": "survey_question_type",
+ "schema": "public",
+ "values": [
+ "short_text",
+ "paragraph",
+ "multiple_choice",
+ "checkboxes"
+ ]
+ }
+ },
+ "schemas": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/server/drizzle/meta/0016_snapshot.json b/server/drizzle/meta/0016_snapshot.json
new file mode 100644
index 0000000..2ffc141
--- /dev/null
+++ b/server/drizzle/meta/0016_snapshot.json
@@ -0,0 +1,2644 @@
+{
+ "id": "3c16b521-2e1c-4bbc-ad6a-c63e04b2e2b5",
+ "prevId": "a0ea729f-abdb-42b6-8bfd-4ed4c0d8b1a9",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "public.active_trophies": {
+ "name": "active_trophies",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "trophy_type": {
+ "name": "trophy_type",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "active_trophies_huddle_id_huddles_id_fk": {
+ "name": "active_trophies_huddle_id_huddles_id_fk",
+ "tableFrom": "active_trophies",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {
+ "active_trophies_huddle_id_trophy_type_pk": {
+ "name": "active_trophies_huddle_id_trophy_type_pk",
+ "columns": [
+ "huddle_id",
+ "trophy_type"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.announcements": {
+ "name": "announcements",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "announcements_huddle_idx": {
+ "name": "announcements_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "announcements_huddle_id_huddles_id_fk": {
+ "name": "announcements_huddle_id_huddles_id_fk",
+ "tableFrom": "announcements",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "announcements_author_id_users_id_fk": {
+ "name": "announcements_author_id_users_id_fk",
+ "tableFrom": "announcements",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.awards": {
+ "name": "awards",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "glyph": {
+ "name": "glyph",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "color": {
+ "name": "color",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "granted_by": {
+ "name": "granted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "awards_huddle_idx": {
+ "name": "awards_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "awards_huddle_roster_idx": {
+ "name": "awards_huddle_roster_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "awards_huddle_id_huddles_id_fk": {
+ "name": "awards_huddle_id_huddles_id_fk",
+ "tableFrom": "awards",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "awards_granted_by_users_id_fk": {
+ "name": "awards_granted_by_users_id_fk",
+ "tableFrom": "awards",
+ "columnsFrom": [
+ "granted_by"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.commissioners": {
+ "name": "commissioners",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "added_at": {
+ "name": "added_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "added_by": {
+ "name": "added_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "commissioners_user_idx": {
+ "name": "commissioners_user_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "commissioners_huddle_id_huddles_id_fk": {
+ "name": "commissioners_huddle_id_huddles_id_fk",
+ "tableFrom": "commissioners",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "commissioners_user_id_users_id_fk": {
+ "name": "commissioners_user_id_users_id_fk",
+ "tableFrom": "commissioners",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "commissioners_added_by_users_id_fk": {
+ "name": "commissioners_added_by_users_id_fk",
+ "tableFrom": "commissioners",
+ "columnsFrom": [
+ "added_by"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {
+ "commissioners_huddle_id_user_id_pk": {
+ "name": "commissioners_huddle_id_user_id_pk",
+ "columns": [
+ "huddle_id",
+ "user_id"
+ ]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.countdown_config": {
+ "name": "countdown_config",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "subtitle": {
+ "name": "subtitle",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "target_at": {
+ "name": "target_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "enabled": {
+ "name": "enabled",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "countdown_config_huddle_id_huddles_id_fk": {
+ "name": "countdown_config_huddle_id_huddles_id_fk",
+ "tableFrom": "countdown_config",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.dues_config": {
+ "name": "dues_config",
+ "schema": "",
+ "columns": {
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "dues_config_huddle_id_huddles_id_fk": {
+ "name": "dues_config_huddle_id_huddles_id_fk",
+ "tableFrom": "dues_config",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.dues_payments": {
+ "name": "dues_payments",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "paid_at": {
+ "name": "paid_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "marked_by": {
+ "name": "marked_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "note": {
+ "name": "note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "dues_payments_huddle_roster_uniq": {
+ "name": "dues_payments_huddle_roster_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "dues_payments_huddle_id_huddles_id_fk": {
+ "name": "dues_payments_huddle_id_huddles_id_fk",
+ "tableFrom": "dues_payments",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "dues_payments_marked_by_users_id_fk": {
+ "name": "dues_payments_marked_by_users_id_fk",
+ "tableFrom": "dues_payments",
+ "columnsFrom": [
+ "marked_by"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.forum_replies": {
+ "name": "forum_replies",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "topic_id": {
+ "name": "topic_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted_by": {
+ "name": "deleted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "forum_replies_topic_idx": {
+ "name": "forum_replies_topic_idx",
+ "columns": [
+ {
+ "expression": "topic_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "forum_replies_topic_id_forum_topics_id_fk": {
+ "name": "forum_replies_topic_id_forum_topics_id_fk",
+ "tableFrom": "forum_replies",
+ "columnsFrom": [
+ "topic_id"
+ ],
+ "tableTo": "forum_topics",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "forum_replies_huddle_id_huddles_id_fk": {
+ "name": "forum_replies_huddle_id_huddles_id_fk",
+ "tableFrom": "forum_replies",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "forum_replies_author_id_users_id_fk": {
+ "name": "forum_replies_author_id_users_id_fk",
+ "tableFrom": "forum_replies",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "forum_replies_deleted_by_users_id_fk": {
+ "name": "forum_replies_deleted_by_users_id_fk",
+ "tableFrom": "forum_replies",
+ "columnsFrom": [
+ "deleted_by"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.forum_topics": {
+ "name": "forum_topics",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "body": {
+ "name": "body",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "reply_count": {
+ "name": "reply_count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted_at": {
+ "name": "deleted_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "deleted_by": {
+ "name": "deleted_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "forum_topics_huddle_updated_idx": {
+ "name": "forum_topics_huddle_updated_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "updated_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "forum_topics_huddle_id_huddles_id_fk": {
+ "name": "forum_topics_huddle_id_huddles_id_fk",
+ "tableFrom": "forum_topics",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "forum_topics_author_id_users_id_fk": {
+ "name": "forum_topics_author_id_users_id_fk",
+ "tableFrom": "forum_topics",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "forum_topics_deleted_by_users_id_fk": {
+ "name": "forum_topics_deleted_by_users_id_fk",
+ "tableFrom": "forum_topics",
+ "columnsFrom": [
+ "deleted_by"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.huddles": {
+ "name": "huddles",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "league_provider": {
+ "name": "league_provider",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "league_id": {
+ "name": "league_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "invite_code": {
+ "name": "invite_code",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "invite_code_updated_at": {
+ "name": "invite_code_updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "invite_link_token": {
+ "name": "invite_link_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "invite_link_expires_at": {
+ "name": "invite_link_expires_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "huddles_invite_code_uniq": {
+ "name": "huddles_invite_code_uniq",
+ "columns": [
+ {
+ "expression": "invite_code",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "huddles_invite_link_token_uniq": {
+ "name": "huddles_invite_link_token_uniq",
+ "columns": [
+ {
+ "expression": "invite_link_token",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.payout_entries": {
+ "name": "payout_entries",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "payout_entries_huddle_idx": {
+ "name": "payout_entries_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "payout_entries_huddle_id_huddles_id_fk": {
+ "name": "payout_entries_huddle_id_huddles_id_fk",
+ "tableFrom": "payout_entries",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.poll_options": {
+ "name": "poll_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "poll_id": {
+ "name": "poll_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "poll_options_poll_idx": {
+ "name": "poll_options_poll_idx",
+ "columns": [
+ {
+ "expression": "poll_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "poll_options_poll_id_polls_id_fk": {
+ "name": "poll_options_poll_id_polls_id_fk",
+ "tableFrom": "poll_options",
+ "columnsFrom": [
+ "poll_id"
+ ],
+ "tableTo": "polls",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.poll_votes": {
+ "name": "poll_votes",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "poll_id": {
+ "name": "poll_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "option_id": {
+ "name": "option_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "poll_votes_poll_user_idx": {
+ "name": "poll_votes_poll_user_idx",
+ "columns": [
+ {
+ "expression": "poll_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "poll_votes_option_user_uniq": {
+ "name": "poll_votes_option_user_uniq",
+ "columns": [
+ {
+ "expression": "option_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "poll_votes_poll_id_polls_id_fk": {
+ "name": "poll_votes_poll_id_polls_id_fk",
+ "tableFrom": "poll_votes",
+ "columnsFrom": [
+ "poll_id"
+ ],
+ "tableTo": "polls",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "poll_votes_option_id_poll_options_id_fk": {
+ "name": "poll_votes_option_id_poll_options_id_fk",
+ "tableFrom": "poll_votes",
+ "columnsFrom": [
+ "option_id"
+ ],
+ "tableTo": "poll_options",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "poll_votes_user_id_users_id_fk": {
+ "name": "poll_votes_user_id_users_id_fk",
+ "tableFrom": "poll_votes",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.polls": {
+ "name": "polls",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "topic_id": {
+ "name": "topic_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "is_dashboard_poll": {
+ "name": "is_dashboard_poll",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "question": {
+ "name": "question",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "allow_multiple": {
+ "name": "allow_multiple",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "allow_vote_changes": {
+ "name": "allow_vote_changes",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "results_visibility": {
+ "name": "results_visibility",
+ "type": "poll_results_visibility",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'always'"
+ },
+ "closes_at": {
+ "name": "closes_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "polls_topic_idx": {
+ "name": "polls_topic_idx",
+ "columns": [
+ {
+ "expression": "topic_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "polls_dashboard_active_uniq": {
+ "name": "polls_dashboard_active_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "where": "\"polls\".\"is_dashboard_poll\" = true",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "polls_huddle_id_huddles_id_fk": {
+ "name": "polls_huddle_id_huddles_id_fk",
+ "tableFrom": "polls",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "polls_author_id_users_id_fk": {
+ "name": "polls_author_id_users_id_fk",
+ "tableFrom": "polls",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "polls_topic_id_forum_topics_id_fk": {
+ "name": "polls_topic_id_forum_topics_id_fk",
+ "tableFrom": "polls",
+ "columnsFrom": [
+ "topic_id"
+ ],
+ "tableTo": "forum_topics",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.side_bets": {
+ "name": "side_bets",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "proposer_id": {
+ "name": "proposer_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "opponent_id": {
+ "name": "opponent_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "proposer_roster_id": {
+ "name": "proposer_roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "opponent_roster_id": {
+ "name": "opponent_roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "week": {
+ "name": "week",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "season": {
+ "name": "season",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "amount": {
+ "name": "amount",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "prize_description": {
+ "name": "prize_description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "side_bet_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "winner_id": {
+ "name": "winner_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "settlement_note": {
+ "name": "settlement_note",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "side_bets_huddle_idx": {
+ "name": "side_bets_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "side_bets_proposer_idx": {
+ "name": "side_bets_proposer_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "proposer_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "side_bets_opponent_idx": {
+ "name": "side_bets_opponent_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "opponent_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "side_bets_huddle_id_huddles_id_fk": {
+ "name": "side_bets_huddle_id_huddles_id_fk",
+ "tableFrom": "side_bets",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "side_bets_proposer_id_users_id_fk": {
+ "name": "side_bets_proposer_id_users_id_fk",
+ "tableFrom": "side_bets",
+ "columnsFrom": [
+ "proposer_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "side_bets_opponent_id_users_id_fk": {
+ "name": "side_bets_opponent_id_users_id_fk",
+ "tableFrom": "side_bets",
+ "columnsFrom": [
+ "opponent_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "side_bets_winner_id_users_id_fk": {
+ "name": "side_bets_winner_id_users_id_fk",
+ "tableFrom": "side_bets",
+ "columnsFrom": [
+ "winner_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.survey_answer_options": {
+ "name": "survey_answer_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "response_id": {
+ "name": "response_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "option_id": {
+ "name": "option_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "survey_answer_options_question_idx": {
+ "name": "survey_answer_options_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "survey_answer_options_response_option_uniq": {
+ "name": "survey_answer_options_response_option_uniq",
+ "columns": [
+ {
+ "expression": "response_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "option_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "survey_answer_options_response_id_survey_responses_id_fk": {
+ "name": "survey_answer_options_response_id_survey_responses_id_fk",
+ "tableFrom": "survey_answer_options",
+ "columnsFrom": [
+ "response_id"
+ ],
+ "tableTo": "survey_responses",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "survey_answer_options_question_id_survey_questions_id_fk": {
+ "name": "survey_answer_options_question_id_survey_questions_id_fk",
+ "tableFrom": "survey_answer_options",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "tableTo": "survey_questions",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "survey_answer_options_option_id_survey_options_id_fk": {
+ "name": "survey_answer_options_option_id_survey_options_id_fk",
+ "tableFrom": "survey_answer_options",
+ "columnsFrom": [
+ "option_id"
+ ],
+ "tableTo": "survey_options",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.survey_answers": {
+ "name": "survey_answers",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "response_id": {
+ "name": "response_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "text_value": {
+ "name": "text_value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {
+ "survey_answers_response_idx": {
+ "name": "survey_answers_response_idx",
+ "columns": [
+ {
+ "expression": "response_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "survey_answers_question_idx": {
+ "name": "survey_answers_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "survey_answers_response_id_survey_responses_id_fk": {
+ "name": "survey_answers_response_id_survey_responses_id_fk",
+ "tableFrom": "survey_answers",
+ "columnsFrom": [
+ "response_id"
+ ],
+ "tableTo": "survey_responses",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "survey_answers_question_id_survey_questions_id_fk": {
+ "name": "survey_answers_question_id_survey_questions_id_fk",
+ "tableFrom": "survey_answers",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "tableTo": "survey_questions",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.survey_options": {
+ "name": "survey_options",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "question_id": {
+ "name": "question_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "label": {
+ "name": "label",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "survey_options_question_idx": {
+ "name": "survey_options_question_idx",
+ "columns": [
+ {
+ "expression": "question_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "survey_options_question_id_survey_questions_id_fk": {
+ "name": "survey_options_question_id_survey_questions_id_fk",
+ "tableFrom": "survey_options",
+ "columnsFrom": [
+ "question_id"
+ ],
+ "tableTo": "survey_questions",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.survey_questions": {
+ "name": "survey_questions",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "survey_id": {
+ "name": "survey_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "type": {
+ "name": "type",
+ "type": "survey_question_type",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "prompt": {
+ "name": "prompt",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "required": {
+ "name": "required",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": true
+ },
+ "sort_order": {
+ "name": "sort_order",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ }
+ },
+ "indexes": {
+ "survey_questions_survey_idx": {
+ "name": "survey_questions_survey_idx",
+ "columns": [
+ {
+ "expression": "survey_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "sort_order",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "survey_questions_survey_id_surveys_id_fk": {
+ "name": "survey_questions_survey_id_surveys_id_fk",
+ "tableFrom": "survey_questions",
+ "columnsFrom": [
+ "survey_id"
+ ],
+ "tableTo": "surveys",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.survey_responses": {
+ "name": "survey_responses",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "survey_id": {
+ "name": "survey_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "survey_responses_survey_user_uniq": {
+ "name": "survey_responses_survey_user_uniq",
+ "columns": [
+ {
+ "expression": "survey_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "survey_responses_survey_id_surveys_id_fk": {
+ "name": "survey_responses_survey_id_surveys_id_fk",
+ "tableFrom": "survey_responses",
+ "columnsFrom": [
+ "survey_id"
+ ],
+ "tableTo": "surveys",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "survey_responses_user_id_users_id_fk": {
+ "name": "survey_responses_user_id_users_id_fk",
+ "tableFrom": "survey_responses",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.surveys": {
+ "name": "surveys",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "author_id": {
+ "name": "author_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "title": {
+ "name": "title",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "description": {
+ "name": "description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "closes_at": {
+ "name": "closes_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "results_published": {
+ "name": "results_published",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "auto_publish_on_close": {
+ "name": "auto_publish_on_close",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "anonymity": {
+ "name": "anonymity",
+ "type": "survey_anonymity",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'none'"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "surveys_huddle_created_idx": {
+ "name": "surveys_huddle_created_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "created_at",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "surveys_huddle_id_huddles_id_fk": {
+ "name": "surveys_huddle_id_huddles_id_fk",
+ "tableFrom": "surveys",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "surveys_author_id_users_id_fk": {
+ "name": "surveys_author_id_users_id_fk",
+ "tableFrom": "surveys",
+ "columnsFrom": [
+ "author_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.team_claims": {
+ "name": "team_claims",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "uuid",
+ "primaryKey": true,
+ "notNull": true,
+ "default": "gen_random_uuid()"
+ },
+ "huddle_id": {
+ "name": "huddle_id",
+ "type": "uuid",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "roster_id": {
+ "name": "roster_id",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "status": {
+ "name": "status",
+ "type": "claim_status",
+ "typeSchema": "public",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'pending'"
+ },
+ "message": {
+ "name": "message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "decided_at": {
+ "name": "decided_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "decided_by": {
+ "name": "decided_by",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "team_claims_huddle_roster_approved_uniq": {
+ "name": "team_claims_huddle_roster_approved_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "roster_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "where": "\"team_claims\".\"status\" = 'approved'",
+ "concurrently": false
+ },
+ "team_claims_huddle_user_approved_uniq": {
+ "name": "team_claims_huddle_user_approved_uniq",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "with": {},
+ "method": "btree",
+ "where": "\"team_claims\".\"status\" = 'approved'",
+ "concurrently": false
+ },
+ "team_claims_huddle_idx": {
+ "name": "team_claims_huddle_idx",
+ "columns": [
+ {
+ "expression": "huddle_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "team_claims_user_idx": {
+ "name": "team_claims_user_idx",
+ "columns": [
+ {
+ "expression": "user_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {
+ "team_claims_huddle_id_huddles_id_fk": {
+ "name": "team_claims_huddle_id_huddles_id_fk",
+ "tableFrom": "team_claims",
+ "columnsFrom": [
+ "huddle_id"
+ ],
+ "tableTo": "huddles",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "cascade"
+ },
+ "team_claims_user_id_users_id_fk": {
+ "name": "team_claims_user_id_users_id_fk",
+ "tableFrom": "team_claims",
+ "columnsFrom": [
+ "user_id"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ },
+ "team_claims_decided_by_users_id_fk": {
+ "name": "team_claims_decided_by_users_id_fk",
+ "tableFrom": "team_claims",
+ "columnsFrom": [
+ "decided_by"
+ ],
+ "tableTo": "users",
+ "columnsTo": [
+ "id"
+ ],
+ "onUpdate": "no action",
+ "onDelete": "restrict"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "public.users": {
+ "name": "users",
+ "schema": "",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sleeper_username": {
+ "name": "sleeper_username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "sleeper_user_id": {
+ "name": "sleeper_user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "synced_league_ids": {
+ "name": "synced_league_ids",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'{}'::text[]"
+ },
+ "is_placeholder": {
+ "name": "is_placeholder",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true,
+ "default": false
+ },
+ "identity_synced_at": {
+ "name": "identity_synced_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {
+ "users_email_idx": {
+ "name": "users_email_idx",
+ "columns": [
+ {
+ "expression": "email",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ },
+ "users_username_idx": {
+ "name": "users_username_idx",
+ "columns": [
+ {
+ "expression": "username",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "with": {},
+ "method": "btree",
+ "concurrently": false
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "public.claim_status": {
+ "name": "claim_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "approved",
+ "rejected"
+ ]
+ },
+ "public.poll_results_visibility": {
+ "name": "poll_results_visibility",
+ "schema": "public",
+ "values": [
+ "always",
+ "after_vote",
+ "after_close"
+ ]
+ },
+ "public.side_bet_status": {
+ "name": "side_bet_status",
+ "schema": "public",
+ "values": [
+ "pending",
+ "accepted",
+ "rejected",
+ "cancelled",
+ "settled"
+ ]
+ },
+ "public.survey_anonymity": {
+ "name": "survey_anonymity",
+ "schema": "public",
+ "values": [
+ "none",
+ "anonymous_to_league",
+ "anonymous_to_all"
+ ]
+ },
+ "public.survey_question_type": {
+ "name": "survey_question_type",
+ "schema": "public",
+ "values": [
+ "short_text",
+ "paragraph",
+ "multiple_choice",
+ "checkboxes"
+ ]
+ }
+ },
+ "schemas": {},
+ "views": {},
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
\ No newline at end of file
diff --git a/server/drizzle/meta/_journal.json b/server/drizzle/meta/_journal.json
index 6033dc1..ba2d22a 100644
--- a/server/drizzle/meta/_journal.json
+++ b/server/drizzle/meta/_journal.json
@@ -78,6 +78,48 @@
"when": 1785791787209,
"tag": "0010_romantic_captain_america",
"breakpoints": true
+ },
+ {
+ "idx": 11,
+ "version": "7",
+ "when": 1786314864383,
+ "tag": "0011_sticky_shockwave",
+ "breakpoints": true
+ },
+ {
+ "idx": 12,
+ "version": "7",
+ "when": 1786315059916,
+ "tag": "0012_green_valkyrie",
+ "breakpoints": true
+ },
+ {
+ "idx": 13,
+ "version": "7",
+ "when": 1786317198957,
+ "tag": "0013_hot_cannonball",
+ "breakpoints": true
+ },
+ {
+ "idx": 14,
+ "version": "7",
+ "when": 1786317326520,
+ "tag": "0014_rename_legacy_pkeys",
+ "breakpoints": true
+ },
+ {
+ "idx": 15,
+ "version": "7",
+ "when": 1786317846534,
+ "tag": "0015_drop_huddle_prefix",
+ "breakpoints": true
+ },
+ {
+ "idx": 16,
+ "version": "7",
+ "when": 1786318032277,
+ "tag": "0016_fix_truncated_fk_name",
+ "breakpoints": true
}
]
}
\ No newline at end of file
diff --git a/server/package.json b/server/package.json
index bd90671..dbe9922 100644
--- a/server/package.json
+++ b/server/package.json
@@ -10,7 +10,9 @@
"db:push": "dotenv -e ../.env -- drizzle-kit push",
"db:studio": "dotenv -e ../.env -- drizzle-kit studio",
"db:migrate": "dotenv -e ../.env -- node scripts/migrate.mjs",
- "db:migrate:prod": "dotenv -e .env.production -- node scripts/migrate.mjs"
+ "db:migrate:prod": "dotenv -e .env.production -- node scripts/migrate.mjs",
+ "db:backfill-users": "dotenv -e ../.env -- node scripts/backfill-users.mjs",
+ "db:backfill-users:prod": "dotenv -e .env.production -e ../.env -- node scripts/backfill-users.mjs"
},
"dependencies": {
"@clerk/express": "^1.7.0",
diff --git a/server/scripts/backfill-users.mjs b/server/scripts/backfill-users.mjs
new file mode 100644
index 0000000..eb0e89b
--- /dev/null
+++ b/server/scripts/backfill-users.mjs
@@ -0,0 +1,161 @@
+/**
+ * Mirrors Clerk's user list into our own `users` table.
+ *
+ * This serves two purposes, and is safe to run repeatedly for both:
+ *
+ * 1. **One-time backfill.** Before the foreign keys in migration 0012 can be
+ * applied, every user id already referenced by our data needs a `users`
+ * row. That includes ids belonging to *deleted* Clerk accounts, which get
+ * a placeholder row so attribution ("posted by") survives.
+ *
+ * 2. **Recurring snapshot.** Run it on a schedule and a Clerk outage — or a
+ * Clerk exit — never costs us the identity data. Nothing here is
+ * destructive.
+ *
+ * Re-run safety: identity fields (email, username) are always refreshed from
+ * Clerk, because Clerk owns them. Sleeper fields and syncedLeagueIds are only
+ * written when our row doesn't already have a value — after the cutover *we*
+ * own those, and Clerk's `unsafeMetadata` copy is frozen at migration time.
+ * Overwriting from it would silently roll back a user's later edits.
+ *
+ * Usage:
+ * npm run db:backfill-users --prefix server (dev DB, from ../.env)
+ * npm run db:backfill-users:prod --prefix server (prod DB, from .env.production)
+ */
+import { neon } from "@neondatabase/serverless";
+import { createClerkClient } from "@clerk/express";
+
+const url = process.env.DATABASE_URL;
+if (!url) throw new Error("Missing DATABASE_URL");
+const secretKey = process.env.CLERK_SECRET_KEY;
+if (!secretKey) throw new Error("Missing CLERK_SECRET_KEY");
+
+const sql = neon(url);
+const clerk = createClerkClient({ secretKey });
+
+/**
+ * Every column in the schema that holds a user id. Keep this in sync with the
+ * foreign keys in schema.ts — if you add a new user-referencing column, it
+ * belongs here too, or the next FK migration will fail on orphaned rows.
+ */
+const USER_ID_COLUMNS = [
+ ["commissioners", "user_id"],
+ ["commissioners", "added_by"],
+ ["team_claims", "user_id"],
+ ["team_claims", "decided_by"],
+ ["announcements", "author_id"],
+ ["dues_payments", "marked_by"],
+ ["awards", "granted_by"],
+ ["side_bets", "proposer_id"],
+ ["side_bets", "opponent_id"],
+ ["side_bets", "winner_id"],
+ ["forum_topics", "author_id"],
+ ["forum_topics", "deleted_by"],
+ ["forum_replies", "author_id"],
+ ["forum_replies", "deleted_by"],
+ ["polls", "author_id"],
+ ["poll_votes", "user_id"],
+ ["surveys", "author_id"],
+ ["survey_responses", "user_id"],
+];
+
+const PAGE_SIZE = 500;
+
+async function fetchAllClerkUsers() {
+ const all = [];
+ for (let offset = 0; ; offset += PAGE_SIZE) {
+ const page = await clerk.users.getUserList({ limit: PAGE_SIZE, offset });
+ all.push(...page.data);
+ if (page.data.length < PAGE_SIZE) break;
+ }
+ return all;
+}
+
+async function upsertFromClerk(u) {
+ const meta = u.unsafeMetadata ?? {};
+ const email =
+ u.primaryEmailAddress?.emailAddress ??
+ u.emailAddresses?.[0]?.emailAddress ??
+ null;
+ const syncedLeagueIds = Array.isArray(meta.syncedLeagueIds)
+ ? meta.syncedLeagueIds.filter((id) => typeof id === "string")
+ : [];
+
+ await sql.query(
+ `insert into users
+ (id, email, username, sleeper_username, sleeper_user_id,
+ synced_league_ids, is_placeholder, identity_synced_at)
+ values ($1, $2, $3, $4, $5, $6, false, now())
+ on conflict (id) do update set
+ email = excluded.email,
+ username = excluded.username,
+ -- ours wins: only fill what we don't already have
+ sleeper_username = coalesce(users.sleeper_username, excluded.sleeper_username),
+ sleeper_user_id = coalesce(users.sleeper_user_id, excluded.sleeper_user_id),
+ synced_league_ids = case
+ when coalesce(array_length(users.synced_league_ids, 1), 0) = 0
+ then excluded.synced_league_ids
+ else users.synced_league_ids
+ end,
+ is_placeholder = false,
+ identity_synced_at = now(),
+ updated_at = now()`,
+ [
+ u.id,
+ email,
+ u.username ?? null,
+ typeof meta.sleeperUsername === "string" ? meta.sleeperUsername : null,
+ typeof meta.sleeperUserId === "string" ? meta.sleeperUserId : null,
+ syncedLeagueIds,
+ ],
+ );
+}
+
+/** User ids that appear somewhere in our data but have no `users` row. */
+async function findOrphanIds() {
+ const union = USER_ID_COLUMNS.map(
+ ([table, col]) =>
+ `select distinct "${col}" as id from "${table}" where "${col}" is not null`,
+ ).join(" union ");
+
+ const rows = await sql.query(
+ `select id from (${union}) refs
+ where not exists (select 1 from users u where u.id = refs.id)`,
+ );
+ return rows.map((r) => r.id);
+}
+
+console.log("Fetching users from Clerk…");
+const clerkUsers = await fetchAllClerkUsers();
+console.log(` ${clerkUsers.length} Clerk user(s).`);
+
+let mirrored = 0;
+for (const u of clerkUsers) {
+ await upsertFromClerk(u);
+ mirrored++;
+}
+console.log(` Mirrored ${mirrored} user(s) into "users".`);
+
+console.log("Scanning for user ids referenced by data but absent from Clerk…");
+const orphans = await findOrphanIds();
+
+if (orphans.length === 0) {
+ console.log(" None — every referenced user id has a row.");
+} else {
+ for (const id of orphans) {
+ // DO NOTHING, not DO UPDATE: if a row already exists we must never
+ // downgrade a real user to a placeholder.
+ await sql.query(
+ `insert into users (id, is_placeholder) values ($1, true)
+ on conflict (id) do nothing`,
+ [id],
+ );
+ }
+ console.log(
+ ` Created ${orphans.length} placeholder row(s) for deleted/unknown accounts:`,
+ );
+ for (const id of orphans) console.log(` ${id}`);
+}
+
+const [{ n }] = await sql.query(`select count(*)::int as n from users`);
+console.log(`\nDone. "users" now holds ${n} row(s).`);
diff --git a/server/src/db/schema.ts b/server/src/db/schema.ts
index 6bbb1e9..5fe1e35 100644
--- a/server/src/db/schema.ts
+++ b/server/src/db/schema.ts
@@ -18,6 +18,68 @@ export const claimStatus = pgEnum("claim_status", [
"rejected",
]);
+// ── Users ─────────────────────────────────────────────────────────────────────
+// Our own mirror of the identity provider's user record, and the home for the
+// product data that used to live in Clerk's `unsafeMetadata`.
+//
+// `id` is deliberately the *Clerk* user id (`user_2ab...`), not a fresh uuid.
+// Every other table stores that same string in its `user_id`/`author_id`/etc.
+// column, so keeping it as the primary key means swapping auth providers later
+// is "issue our own JWTs with the same `sub`" rather than a rewrite of 18
+// columns across 11 tables. Do not renumber these — see PLAYBOOK, "Users and
+// auth ownership".
+//
+// Identity fields (email, username) are a cache of the provider's copy,
+// refreshed by usersService.ensureUser on a TTL. Sleeper fields and
+// syncedLeagueIds are *owned* here — Clerk no longer holds them.
+//
+// All 18 references to this table are `ON DELETE RESTRICT`, deliberately: a
+// user's forum posts, votes and survey answers are league history and must
+// outlive their account. To "delete" a user, blank the identity fields and set
+// isPlaceholder — never DELETE the row, or Postgres will (correctly) refuse.
+
+export const users = pgTable(
+ "users",
+ {
+ /** Clerk user id. Also the join key used by every other table. */
+ id: text("id").primaryKey(),
+ /** Mirrored from Clerk. Nullable because Clerk doesn't guarantee either. */
+ email: text("email"),
+ username: text("username"),
+ /** Sleeper account link — migrated out of Clerk `unsafeMetadata`. */
+ sleeperUsername: text("sleeper_username"),
+ sleeperUserId: text("sleeper_user_id"),
+ /** League ids the user has opted into syncing. */
+ syncedLeagueIds: text("synced_league_ids")
+ .array()
+ .notNull()
+ .default(sql`'{}'::text[]`),
+ /**
+ * True for rows created by the backfill for a user id that appears in our
+ * data but no longer exists in Clerk (deleted account). Keeps the foreign
+ * keys satisfiable without inventing fake identity data.
+ */
+ isPlaceholder: boolean("is_placeholder").notNull().default(false),
+ /** Last time email/username were refreshed from Clerk. */
+ identitySyncedAt: timestamp("identity_synced_at", { withTimezone: true })
+ .defaultNow()
+ .notNull(),
+ createdAt: timestamp("created_at", { withTimezone: true })
+ .defaultNow()
+ .notNull(),
+ updatedAt: timestamp("updated_at", { withTimezone: true })
+ .defaultNow()
+ .notNull(),
+ },
+ (t) => ({
+ byEmail: index("users_email_idx").on(t.email),
+ byUsername: index("users_username_idx").on(t.username),
+ }),
+);
+
+export type User = typeof users.$inferSelect;
+export type NewUser = typeof users.$inferInsert;
+
export const huddles = pgTable(
"huddles",
{
@@ -48,21 +110,25 @@ export const huddles = pgTable(
}),
);
-export const huddleCommissioners = pgTable(
- "huddle_commissioners",
+export const commissioners = pgTable(
+ "commissioners",
{
huddleId: uuid("huddle_id")
.notNull()
.references(() => huddles.id, { onDelete: "cascade" }),
- userId: text("user_id").notNull(),
+ userId: text("user_id")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
addedAt: timestamp("added_at", { withTimezone: true })
.defaultNow()
.notNull(),
- addedBy: text("added_by").notNull(),
+ addedBy: text("added_by")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
},
(t) => ({
pk: primaryKey({ columns: [t.huddleId, t.userId] }),
- byUser: index("huddle_commissioners_user_idx").on(t.userId),
+ byUser: index("commissioners_user_idx").on(t.userId),
}),
);
@@ -73,7 +139,9 @@ export const teamClaims = pgTable(
huddleId: uuid("huddle_id")
.notNull()
.references(() => huddles.id, { onDelete: "cascade" }),
- userId: text("user_id").notNull(),
+ userId: text("user_id")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
rosterId: integer("roster_id").notNull(),
status: claimStatus("status").notNull().default("pending"),
message: text("message"),
@@ -81,7 +149,9 @@ export const teamClaims = pgTable(
.defaultNow()
.notNull(),
decidedAt: timestamp("decided_at", { withTimezone: true }),
- decidedBy: text("decided_by"),
+ decidedBy: text("decided_by").references(() => users.id, {
+ onDelete: "restrict",
+ }),
},
(t) => ({
uniqApprovedRoster: uniqueIndex("team_claims_huddle_roster_approved_uniq")
@@ -97,14 +167,16 @@ export const teamClaims = pgTable(
// ── Announcements ─────────────────────────────────────────────────────────────
-export const huddleAnnouncements = pgTable(
- "huddle_announcements",
+export const announcements = pgTable(
+ "announcements",
{
id: uuid("id").defaultRandom().primaryKey(),
huddleId: uuid("huddle_id")
.notNull()
.references(() => huddles.id, { onDelete: "cascade" }),
- authorId: text("author_id").notNull(),
+ authorId: text("author_id")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
title: text("title").notNull(),
body: text("body").notNull(),
createdAt: timestamp("created_at", { withTimezone: true })
@@ -115,13 +187,13 @@ export const huddleAnnouncements = pgTable(
.notNull(),
},
(t) => ({
- byHuddle: index("huddle_announcements_huddle_idx").on(t.huddleId),
+ byHuddle: index("announcements_huddle_idx").on(t.huddleId),
}),
);
// ── Dues tracker ──────────────────────────────────────────────────────────────
-export const huddleDuesConfig = pgTable("huddle_dues_config", {
+export const duesConfig = pgTable("dues_config", {
huddleId: uuid("huddle_id")
.primaryKey()
.references(() => huddles.id, { onDelete: "cascade" }),
@@ -133,8 +205,8 @@ export const huddleDuesConfig = pgTable("huddle_dues_config", {
.notNull(),
});
-export const huddleDuesPayments = pgTable(
- "huddle_dues_payments",
+export const duesPayments = pgTable(
+ "dues_payments",
{
id: uuid("id").defaultRandom().primaryKey(),
huddleId: uuid("huddle_id")
@@ -142,14 +214,16 @@ export const huddleDuesPayments = pgTable(
.references(() => huddles.id, { onDelete: "cascade" }),
rosterId: integer("roster_id").notNull(),
paidAt: timestamp("paid_at", { withTimezone: true }),
- markedBy: text("marked_by").notNull(),
+ markedBy: text("marked_by")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
note: text("note"),
updatedAt: timestamp("updated_at", { withTimezone: true })
.defaultNow()
.notNull(),
},
(t) => ({
- uniqRoster: uniqueIndex("huddle_dues_payments_huddle_roster_uniq").on(
+ uniqRoster: uniqueIndex("dues_payments_huddle_roster_uniq").on(
t.huddleId,
t.rosterId,
),
@@ -158,18 +232,18 @@ export const huddleDuesPayments = pgTable(
export type Huddle = typeof huddles.$inferSelect;
export type NewHuddle = typeof huddles.$inferInsert;
-export type HuddleCommissioner = typeof huddleCommissioners.$inferSelect;
+export type Commissioner = typeof commissioners.$inferSelect;
export type TeamClaim = typeof teamClaims.$inferSelect;
export type NewTeamClaim = typeof teamClaims.$inferInsert;
-export type HuddleAnnouncement = typeof huddleAnnouncements.$inferSelect;
-export type NewHuddleAnnouncement = typeof huddleAnnouncements.$inferInsert;
-export type HuddleDuesConfig = typeof huddleDuesConfig.$inferSelect;
-export type HuddleDuesPayment = typeof huddleDuesPayments.$inferSelect;
+export type Announcement = typeof announcements.$inferSelect;
+export type NewAnnouncement = typeof announcements.$inferInsert;
+export type DuesConfig = typeof duesConfig.$inferSelect;
+export type DuesPayment = typeof duesPayments.$inferSelect;
// ── Custom awards ─────────────────────────────────────────────────────────────
-export const huddleAwards = pgTable(
- "huddle_awards",
+export const awards = pgTable(
+ "awards",
{
id: uuid("id").defaultRandom().primaryKey(),
huddleId: uuid("huddle_id")
@@ -180,7 +254,9 @@ export const huddleAwards = pgTable(
color: text("color").notNull(),
title: text("title").notNull(),
description: text("description"),
- grantedBy: text("granted_by").notNull(),
+ grantedBy: text("granted_by")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
season: text("season"),
createdAt: timestamp("created_at", { withTimezone: true })
.defaultNow()
@@ -190,18 +266,18 @@ export const huddleAwards = pgTable(
.notNull(),
},
(t) => ({
- byHuddle: index("huddle_awards_huddle_idx").on(t.huddleId),
- byHuddleRoster: index("huddle_awards_huddle_roster_idx").on(t.huddleId, t.rosterId),
+ byHuddle: index("awards_huddle_idx").on(t.huddleId),
+ byHuddleRoster: index("awards_huddle_roster_idx").on(t.huddleId, t.rosterId),
}),
);
-export type HuddleAward = typeof huddleAwards.$inferSelect;
-export type NewHuddleAward = typeof huddleAwards.$inferInsert;
+export type Award = typeof awards.$inferSelect;
+export type NewAward = typeof awards.$inferInsert;
// ── Payout structure ──────────────────────────────────────────────────────────
-export const huddlePayoutEntries = pgTable(
- "huddle_payout_entries",
+export const payoutEntries = pgTable(
+ "payout_entries",
{
id: uuid("id").defaultRandom().primaryKey(),
huddleId: uuid("huddle_id")
@@ -218,27 +294,27 @@ export const huddlePayoutEntries = pgTable(
.notNull(),
},
(t) => ({
- byHuddle: index("huddle_payout_entries_huddle_idx").on(t.huddleId),
+ byHuddle: index("payout_entries_huddle_idx").on(t.huddleId),
}),
);
-export type HuddlePayoutEntry = typeof huddlePayoutEntries.$inferSelect;
-export type NewHuddlePayoutEntry = typeof huddlePayoutEntries.$inferInsert;
+export type PayoutEntry = typeof payoutEntries.$inferSelect;
+export type NewPayoutEntry = typeof payoutEntries.$inferInsert;
// ── Active trophy control ─────────────────────────────────────────────────────
// Commissioners choose which built-in auto-trophies are shown for their league.
// A row exists for each type the commissioner has explicitly toggled; if no row
// exists, the trophy is considered enabled (opt-out model, not opt-in).
-export const huddleActiveTrophies = pgTable(
- "huddle_active_trophies",
+export const activeTrophies = pgTable(
+ "active_trophies",
{
huddleId: uuid("huddle_id")
.notNull()
.references(() => huddles.id, { onDelete: "cascade" }),
/** Built-in trophy type key, e.g. "champion", "high_score". */
trophyType: text("trophy_type").notNull(),
- enabled: integer("enabled").notNull().default(1), // 1 = on, 0 = off
+ enabled: boolean("enabled").notNull().default(true),
updatedAt: timestamp("updated_at", { withTimezone: true })
.defaultNow()
.notNull(),
@@ -248,7 +324,7 @@ export const huddleActiveTrophies = pgTable(
}),
);
-export type HuddleActiveTrophy = typeof huddleActiveTrophies.$inferSelect;
+export type ActiveTrophy = typeof activeTrophies.$inferSelect;
// ── Side bets ──────────────────────────────────────────────────────────────────
// League members propose bets against each other, tied to a specific week.
@@ -269,8 +345,12 @@ export const sideBets = pgTable(
huddleId: uuid("huddle_id")
.notNull()
.references(() => huddles.id, { onDelete: "cascade" }),
- proposerId: text("proposer_id").notNull(),
- opponentId: text("opponent_id").notNull(),
+ proposerId: text("proposer_id")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
+ opponentId: text("opponent_id")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
proposerRosterId: integer("proposer_roster_id"),
opponentRosterId: integer("opponent_roster_id"),
week: integer("week").notNull(),
@@ -280,8 +360,10 @@ export const sideBets = pgTable(
/** Free-text prize description when the wager isn't cash (e.g. "loser buys dinner"). Null for cash bets. */
prizeDescription: text("prize_description"),
status: sideBetStatus("status").notNull().default("pending"),
- /** Clerk userId of the winner. Null until settled. */
- winnerId: text("winner_id"),
+ /** Winner. Null until settled. */
+ winnerId: text("winner_id").references(() => users.id, {
+ onDelete: "restrict",
+ }),
settlementNote: text("settlement_note"),
createdAt: timestamp("created_at", { withTimezone: true })
.defaultNow()
@@ -304,7 +386,7 @@ export type NewSideBet = typeof sideBets.$inferInsert;
// Commissioner-configured countdown shown on the dashboard, e.g. counting down
// to draft night or the trade deadline. One row per huddle.
-export const huddleCountdownConfig = pgTable("huddle_countdown_config", {
+export const countdownConfig = pgTable("countdown_config", {
huddleId: uuid("huddle_id")
.primaryKey()
.references(() => huddles.id, { onDelete: "cascade" }),
@@ -317,7 +399,7 @@ export const huddleCountdownConfig = pgTable("huddle_countdown_config", {
.notNull(),
});
-export type HuddleCountdownConfig = typeof huddleCountdownConfig.$inferSelect;
+export type CountdownConfig = typeof countdownConfig.$inferSelect;
// ── League forum ──────────────────────────────────────────────────────────────
// Message-board style discussion, scoped to a huddle (persists across seasons).
@@ -325,14 +407,16 @@ export type HuddleCountdownConfig = typeof huddleCountdownConfig.$inferSelect;
// Deletes are soft (deletedAt/deletedBy) so pagination stays stable and
// moderation leaves an audit trail.
-export const huddleForumTopics = pgTable(
- "huddle_forum_topics",
+export const forumTopics = pgTable(
+ "forum_topics",
{
id: uuid("id").defaultRandom().primaryKey(),
huddleId: uuid("huddle_id")
.notNull()
.references(() => huddles.id, { onDelete: "cascade" }),
- authorId: text("author_id").notNull(),
+ authorId: text("author_id")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
title: text("title").notNull(),
body: text("body").notNull(),
/** Bumped whenever a reply is posted, for "recent activity" sort. */
@@ -345,42 +429,48 @@ export const huddleForumTopics = pgTable(
.defaultNow()
.notNull(),
deletedAt: timestamp("deleted_at", { withTimezone: true }),
- deletedBy: text("deleted_by"),
+ deletedBy: text("deleted_by").references(() => users.id, {
+ onDelete: "restrict",
+ }),
},
(t) => ({
- byHuddleActivity: index("huddle_forum_topics_huddle_updated_idx").on(
+ byHuddleActivity: index("forum_topics_huddle_updated_idx").on(
t.huddleId,
t.updatedAt,
),
}),
);
-export const huddleForumReplies = pgTable(
- "huddle_forum_replies",
+export const forumReplies = pgTable(
+ "forum_replies",
{
id: uuid("id").defaultRandom().primaryKey(),
topicId: uuid("topic_id")
.notNull()
- .references(() => huddleForumTopics.id, { onDelete: "cascade" }),
+ .references(() => forumTopics.id, { onDelete: "cascade" }),
/** Denormalized from the topic so replies can be queried/indexed directly. */
huddleId: uuid("huddle_id")
.notNull()
.references(() => huddles.id, { onDelete: "cascade" }),
- authorId: text("author_id").notNull(),
+ authorId: text("author_id")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
body: text("body").notNull(),
createdAt: timestamp("created_at", { withTimezone: true })
.defaultNow()
.notNull(),
deletedAt: timestamp("deleted_at", { withTimezone: true }),
- deletedBy: text("deleted_by"),
+ deletedBy: text("deleted_by").references(() => users.id, {
+ onDelete: "restrict",
+ }),
},
(t) => ({
- byTopic: index("huddle_forum_replies_topic_idx").on(t.topicId, t.createdAt),
+ byTopic: index("forum_replies_topic_idx").on(t.topicId, t.createdAt),
}),
);
-export type HuddleForumTopic = typeof huddleForumTopics.$inferSelect;
-export type HuddleForumReply = typeof huddleForumReplies.$inferSelect;
+export type ForumTopic = typeof forumTopics.$inferSelect;
+export type ForumReply = typeof forumReplies.$inferSelect;
// ── Polls ─────────────────────────────────────────────────────────────────────
// Two contexts share the same tables: a poll attached to a forum topic
@@ -396,15 +486,17 @@ export const pollResultsVisibility = pgEnum("poll_results_visibility", [
"after_close", // results hidden until the poll's closesAt has passed
]);
-export const huddlePolls = pgTable(
- "huddle_polls",
+export const polls = pgTable(
+ "polls",
{
id: uuid("id").defaultRandom().primaryKey(),
huddleId: uuid("huddle_id")
.notNull()
.references(() => huddles.id, { onDelete: "cascade" }),
- authorId: text("author_id").notNull(),
- topicId: uuid("topic_id").references(() => huddleForumTopics.id, { onDelete: "cascade" }),
+ authorId: text("author_id")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
+ topicId: uuid("topic_id").references(() => forumTopics.id, { onDelete: "cascade" }),
isDashboardPoll: boolean("is_dashboard_poll").notNull().default(false),
question: text("question").notNull(),
allowMultiple: boolean("allow_multiple").notNull().default(false),
@@ -417,63 +509,65 @@ export const huddlePolls = pgTable(
.notNull(),
},
(t) => ({
- byTopic: index("huddle_polls_topic_idx").on(t.topicId),
+ byTopic: index("polls_topic_idx").on(t.topicId),
// Enforces "at most one active dashboard poll per huddle" at the DB level.
- uniqActiveDashboardPoll: uniqueIndex("huddle_polls_dashboard_active_uniq")
+ uniqActiveDashboardPoll: uniqueIndex("polls_dashboard_active_uniq")
.on(t.huddleId)
.where(sql`${t.isDashboardPoll} = true`),
}),
);
-export const huddlePollOptions = pgTable(
- "huddle_poll_options",
+export const pollOptions = pgTable(
+ "poll_options",
{
id: uuid("id").defaultRandom().primaryKey(),
pollId: uuid("poll_id")
.notNull()
- .references(() => huddlePolls.id, { onDelete: "cascade" }),
+ .references(() => polls.id, { onDelete: "cascade" }),
label: text("label").notNull(),
sortOrder: integer("sort_order").notNull().default(0),
},
(t) => ({
- byPoll: index("huddle_poll_options_poll_idx").on(t.pollId),
+ byPoll: index("poll_options_poll_idx").on(t.pollId),
}),
);
-export const huddlePollVotes = pgTable(
- "huddle_poll_votes",
+export const pollVotes = pgTable(
+ "poll_votes",
{
id: uuid("id").defaultRandom().primaryKey(),
pollId: uuid("poll_id")
.notNull()
- .references(() => huddlePolls.id, { onDelete: "cascade" }),
+ .references(() => polls.id, { onDelete: "cascade" }),
optionId: uuid("option_id")
.notNull()
- .references(() => huddlePollOptions.id, { onDelete: "cascade" }),
- userId: text("user_id").notNull(),
+ .references(() => pollOptions.id, { onDelete: "cascade" }),
+ userId: text("user_id")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
createdAt: timestamp("created_at", { withTimezone: true })
.defaultNow()
.notNull(),
},
(t) => ({
- byPollUser: index("huddle_poll_votes_poll_user_idx").on(t.pollId, t.userId),
- uniqOptionVote: uniqueIndex("huddle_poll_votes_option_user_uniq").on(t.optionId, t.userId),
+ byPollUser: index("poll_votes_poll_user_idx").on(t.pollId, t.userId),
+ uniqOptionVote: uniqueIndex("poll_votes_option_user_uniq").on(t.optionId, t.userId),
}),
);
-export type HuddlePoll = typeof huddlePolls.$inferSelect;
-export type HuddlePollOption = typeof huddlePollOptions.$inferSelect;
-export type HuddlePollVote = typeof huddlePollVotes.$inferSelect;
+export type Poll = typeof polls.$inferSelect;
+export type PollOption = typeof pollOptions.$inferSelect;
+export type PollVote = typeof pollVotes.$inferSelect;
// ── Surveys ───────────────────────────────────────────────────────────────────
// A commissioner-authored, multi-question form (short/long text or
// single/multi-select), scoped to a huddle. Modeled as "a poll with several
-// questions": huddleSurveyOptions plays the role of huddlePollOptions, and
-// huddleSurveyAnswerOptions plays the role of huddlePollVotes (one row per
-// selected option). Text-type answers live in the separate huddleSurveyAnswers
+// questions": surveyOptions plays the role of pollOptions, and
+// surveyAnswerOptions plays the role of pollVotes (one row per
+// selected option). Text-type answers live in the separate surveyAnswers
// table since they don't reference an option row.
//
-// Each member gets at most one huddleSurveyResponses row per survey; editing
+// Each member gets at most one surveyResponses row per survey; editing
// a response deletes and reinserts its answers (see surveyService.submitResponse),
// mirroring pollService.castVote. Editing is only allowed before closesAt.
@@ -498,14 +592,16 @@ export const surveyAnonymity = pgEnum("survey_anonymity", [
"anonymous_to_all",
]);
-export const huddleSurveys = pgTable(
- "huddle_surveys",
+export const surveys = pgTable(
+ "surveys",
{
id: uuid("id").defaultRandom().primaryKey(),
huddleId: uuid("huddle_id")
.notNull()
.references(() => huddles.id, { onDelete: "cascade" }),
- authorId: text("author_id").notNull(),
+ authorId: text("author_id")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
title: text("title").notNull(),
description: text("description"),
/** Responses can no longer be submitted or edited once this passes. */
@@ -520,51 +616,53 @@ export const huddleSurveys = pgTable(
.notNull(),
},
(t) => ({
- byHuddleActivity: index("huddle_surveys_huddle_created_idx").on(t.huddleId, t.createdAt),
+ byHuddleActivity: index("surveys_huddle_created_idx").on(t.huddleId, t.createdAt),
}),
);
-export const huddleSurveyQuestions = pgTable(
- "huddle_survey_questions",
+export const surveyQuestions = pgTable(
+ "survey_questions",
{
id: uuid("id").defaultRandom().primaryKey(),
surveyId: uuid("survey_id")
.notNull()
- .references(() => huddleSurveys.id, { onDelete: "cascade" }),
+ .references(() => surveys.id, { onDelete: "cascade" }),
type: surveyQuestionType("type").notNull(),
prompt: text("prompt").notNull(),
required: boolean("required").notNull().default(true),
sortOrder: integer("sort_order").notNull().default(0),
},
(t) => ({
- bySurvey: index("huddle_survey_questions_survey_idx").on(t.surveyId, t.sortOrder),
+ bySurvey: index("survey_questions_survey_idx").on(t.surveyId, t.sortOrder),
}),
);
/** Choices for multiple_choice / checkboxes questions. */
-export const huddleSurveyOptions = pgTable(
- "huddle_survey_options",
+export const surveyOptions = pgTable(
+ "survey_options",
{
id: uuid("id").defaultRandom().primaryKey(),
questionId: uuid("question_id")
.notNull()
- .references(() => huddleSurveyQuestions.id, { onDelete: "cascade" }),
+ .references(() => surveyQuestions.id, { onDelete: "cascade" }),
label: text("label").notNull(),
sortOrder: integer("sort_order").notNull().default(0),
},
(t) => ({
- byQuestion: index("huddle_survey_options_question_idx").on(t.questionId),
+ byQuestion: index("survey_options_question_idx").on(t.questionId),
}),
);
-export const huddleSurveyResponses = pgTable(
- "huddle_survey_responses",
+export const surveyResponses = pgTable(
+ "survey_responses",
{
id: uuid("id").defaultRandom().primaryKey(),
surveyId: uuid("survey_id")
.notNull()
- .references(() => huddleSurveys.id, { onDelete: "cascade" }),
- userId: text("user_id").notNull(),
+ .references(() => surveys.id, { onDelete: "cascade" }),
+ userId: text("user_id")
+ .notNull()
+ .references(() => users.id, { onDelete: "restrict" }),
createdAt: timestamp("created_at", { withTimezone: true })
.defaultNow()
.notNull(),
@@ -573,7 +671,7 @@ export const huddleSurveyResponses = pgTable(
.notNull(),
},
(t) => ({
- uniqSurveyUser: uniqueIndex("huddle_survey_responses_survey_user_uniq").on(
+ uniqSurveyUser: uniqueIndex("survey_responses_survey_user_uniq").on(
t.surveyId,
t.userId,
),
@@ -581,51 +679,51 @@ export const huddleSurveyResponses = pgTable(
);
/** short_text / paragraph answers — one row per question per response. */
-export const huddleSurveyAnswers = pgTable(
- "huddle_survey_answers",
+export const surveyAnswers = pgTable(
+ "survey_answers",
{
id: uuid("id").defaultRandom().primaryKey(),
responseId: uuid("response_id")
.notNull()
- .references(() => huddleSurveyResponses.id, { onDelete: "cascade" }),
+ .references(() => surveyResponses.id, { onDelete: "cascade" }),
questionId: uuid("question_id")
.notNull()
- .references(() => huddleSurveyQuestions.id, { onDelete: "cascade" }),
+ .references(() => surveyQuestions.id, { onDelete: "cascade" }),
textValue: text("text_value").notNull(),
},
(t) => ({
- byResponse: index("huddle_survey_answers_response_idx").on(t.responseId),
- byQuestion: index("huddle_survey_answers_question_idx").on(t.questionId),
+ byResponse: index("survey_answers_response_idx").on(t.responseId),
+ byQuestion: index("survey_answers_question_idx").on(t.questionId),
}),
);
/** multiple_choice / checkboxes answers — one row per selected option. */
-export const huddleSurveyAnswerOptions = pgTable(
- "huddle_survey_answer_options",
+export const surveyAnswerOptions = pgTable(
+ "survey_answer_options",
{
id: uuid("id").defaultRandom().primaryKey(),
responseId: uuid("response_id")
.notNull()
- .references(() => huddleSurveyResponses.id, { onDelete: "cascade" }),
+ .references(() => surveyResponses.id, { onDelete: "cascade" }),
questionId: uuid("question_id")
.notNull()
- .references(() => huddleSurveyQuestions.id, { onDelete: "cascade" }),
+ .references(() => surveyQuestions.id, { onDelete: "cascade" }),
optionId: uuid("option_id")
.notNull()
- .references(() => huddleSurveyOptions.id, { onDelete: "cascade" }),
+ .references(() => surveyOptions.id, { onDelete: "cascade" }),
},
(t) => ({
- byQuestion: index("huddle_survey_answer_options_question_idx").on(t.questionId),
- uniqResponseOption: uniqueIndex("huddle_survey_answer_options_response_option_uniq").on(
+ byQuestion: index("survey_answer_options_question_idx").on(t.questionId),
+ uniqResponseOption: uniqueIndex("survey_answer_options_response_option_uniq").on(
t.responseId,
t.optionId,
),
}),
);
-export type HuddleSurvey = typeof huddleSurveys.$inferSelect;
-export type HuddleSurveyQuestion = typeof huddleSurveyQuestions.$inferSelect;
-export type HuddleSurveyOption = typeof huddleSurveyOptions.$inferSelect;
-export type HuddleSurveyResponse = typeof huddleSurveyResponses.$inferSelect;
-export type HuddleSurveyAnswer = typeof huddleSurveyAnswers.$inferSelect;
-export type HuddleSurveyAnswerOption = typeof huddleSurveyAnswerOptions.$inferSelect;
+export type Survey = typeof surveys.$inferSelect;
+export type SurveyQuestion = typeof surveyQuestions.$inferSelect;
+export type SurveyOption = typeof surveyOptions.$inferSelect;
+export type SurveyResponse = typeof surveyResponses.$inferSelect;
+export type SurveyAnswer = typeof surveyAnswers.$inferSelect;
+export type SurveyAnswerOption = typeof surveyAnswerOptions.$inferSelect;
diff --git a/server/src/routes/huddleRoutes.ts b/server/src/routes/huddleRoutes.ts
index e243d9a..9304f41 100644
--- a/server/src/routes/huddleRoutes.ts
+++ b/server/src/routes/huddleRoutes.ts
@@ -1,5 +1,5 @@
import { type Express, type Request, type Response } from "express";
-import { getAuth, createClerkClient } from "@clerk/express";
+import { getAuth } from "@clerk/express";
import { requireAuth } from "../middleware/requireAuth.js";
import {
HuddlesServiceError,
@@ -44,41 +44,16 @@ import {
import { listPayouts, setPayouts } from "../services/payoutsService.js";
import { getActiveTrophies, setTrophyEnabled } from "../services/trophyControlService.js";
import { getCountdownConfig, setCountdownConfig } from "../services/countdownService.js";
+import {
+ displayHandle,
+ ensureUser,
+ getUserSummaries,
+} from "../services/usersService.js";
-const clerkSecretKey = process.env["CLERK_SECRET_KEY"];
-if (!clerkSecretKey) {
- throw new Error("Missing required environment variable: CLERK_SECRET_KEY");
-}
-const clerkClient = createClerkClient({ secretKey: clerkSecretKey });
-
-interface ClerkUserSummary {
- id: string;
- username: string | null;
- email: string | null;
-}
-
-async function fetchUserSummaries(
- userIds: string[],
-): Promise