feat: implement club admin dashboard with activity feed and settings
Pull Request / unit-tests (pull_request) Successful in 57s
Pull Request / e2e-tests (pull_request) Successful in 3m10s
Pull Request / analyze-bump-type (pull_request) Successful in 12s

This commit is contained in:
2026-04-26 17:17:52 -07:00
parent 2658dc07cb
commit 31fc26478d
12 changed files with 686 additions and 3 deletions
+35
View File
@@ -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")
}