feat: implement club admin dashboard with activity feed and settings
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "matches" DROP CONSTRAINT "matches_player1P1Id_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "matches" DROP CONSTRAINT "matches_player1P2Id_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "matches" DROP CONSTRAINT "matches_player2P1Id_fkey";
|
||||
|
||||
-- DropForeignKey
|
||||
ALTER TABLE "matches" DROP CONSTRAINT "matches_player2P2Id_fkey";
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "activities" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
"description" TEXT NOT NULL,
|
||||
"userId" TEXT,
|
||||
"playerId" INTEGER,
|
||||
"eventId" INTEGER,
|
||||
"matchId" INTEGER,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "activities_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "club_settings" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"clubName" TEXT NOT NULL DEFAULT 'Euchre Club',
|
||||
"defaultEloRating" INTEGER NOT NULL DEFAULT 1200,
|
||||
"partnershipEnabled" BOOLEAN NOT NULL DEFAULT true,
|
||||
"notificationsEnabled" BOOLEAN NOT NULL DEFAULT true,
|
||||
"matchVerification" BOOLEAN NOT NULL DEFAULT false,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "club_settings_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "matches" ADD CONSTRAINT "matches_player1P1Id_fkey" FOREIGN KEY ("player1P1Id") REFERENCES "players"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "matches" ADD CONSTRAINT "matches_player1P2Id_fkey" FOREIGN KEY ("player1P2Id") REFERENCES "players"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "matches" ADD CONSTRAINT "matches_player2P1Id_fkey" FOREIGN KEY ("player2P1Id") REFERENCES "players"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "matches" ADD CONSTRAINT "matches_player2P2Id_fkey" FOREIGN KEY ("player2P2Id") REFERENCES "players"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "activities" ADD CONSTRAINT "activities_userId_fkey" FOREIGN KEY ("userId") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "activities" ADD CONSTRAINT "activities_playerId_fkey" FOREIGN KEY ("playerId") REFERENCES "players"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "activities" ADD CONSTRAINT "activities_eventId_fkey" FOREIGN KEY ("eventId") REFERENCES "events"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "activities" ADD CONSTRAINT "activities_matchId_fkey" FOREIGN KEY ("matchId") REFERENCES "matches"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
@@ -27,6 +27,7 @@ model Player {
|
||||
partnershipGames2 PartnershipGame[] @relation("PartnershipPlayer2")
|
||||
partnershipStats PartnershipStat[] @relation("StatPlayer1")
|
||||
partnershipStats2 PartnershipStat[] @relation("StatPlayer2")
|
||||
activities Activity[]
|
||||
user User?
|
||||
eloRating EloRating?
|
||||
glicko2Rating Glicko2Rating?
|
||||
@@ -53,6 +54,7 @@ model User {
|
||||
ownedTournaments Event[] @relation("TournamentOwner")
|
||||
createdMatches Match[] @relation("MatchCreator")
|
||||
sessions Session[]
|
||||
activities Activity[]
|
||||
player Player? @relation(fields: [playerId], references: [id])
|
||||
|
||||
@@map("users")
|
||||
@@ -79,6 +81,7 @@ model Event {
|
||||
owner User? @relation("TournamentOwner", fields: [ownerId], references: [id])
|
||||
matches Match[]
|
||||
rounds TournamentRound[]
|
||||
activities Activity[]
|
||||
|
||||
// Team configuration fields
|
||||
teamDurability String @default("permanent") // permanent, variable, per_round
|
||||
@@ -167,6 +170,7 @@ model Match {
|
||||
isCasual Boolean @default(false)
|
||||
bracketMatchups BracketMatchup[]
|
||||
eloSnapshots EloSnapshot[]
|
||||
activities Activity[]
|
||||
createdBy User? @relation("MatchCreator", fields: [createdById], references: [id])
|
||||
event Event? @relation(fields: [eventId], references: [id], onDelete: Cascade)
|
||||
player1P1 Player? @relation("MatchPlayer1", fields: [player1P1Id], references: [id])
|
||||
@@ -325,3 +329,34 @@ model OpenSkillRating {
|
||||
|
||||
@@map("open_skill_ratings")
|
||||
}
|
||||
|
||||
model Activity {
|
||||
id Int @id @default(autoincrement())
|
||||
type String // "player_registration", "tournament_created", "match_completed", "partnership_recorded"
|
||||
description String
|
||||
userId String?
|
||||
playerId Int?
|
||||
eventId Int?
|
||||
matchId Int?
|
||||
createdAt DateTime @default(now())
|
||||
|
||||
user User? @relation(fields: [userId], references: [id])
|
||||
player Player? @relation(fields: [playerId], references: [id])
|
||||
event Event? @relation(fields: [eventId], references: [id])
|
||||
match Match? @relation(fields: [matchId], references: [id])
|
||||
|
||||
@@map("activities")
|
||||
}
|
||||
|
||||
model ClubSettings {
|
||||
id Int @id @default(autoincrement())
|
||||
clubName String @default("Euchre Club")
|
||||
defaultEloRating Int @default(1200)
|
||||
partnershipEnabled Boolean @default(true)
|
||||
notificationsEnabled Boolean @default(true)
|
||||
matchVerification Boolean @default(false)
|
||||
createdAt DateTime @default(now())
|
||||
updatedAt DateTime @updatedAt
|
||||
|
||||
@@map("club_settings")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user