Add house leaderboard feature: Integrate house leaderboard functionality in LeaderboardPage and LeaderboardSection components. Update userStatsService to fetch house leaderboard data, and enhance UI to display house rankings, scores, and member details. Update Prisma schema to include house-related models and relationships, and seed database with initial house data.
Some checks failed
Deploy with Docker Compose / deploy (push) Has been cancelled

This commit is contained in:
Julien Froidefond
2025-12-17 13:35:18 +01:00
parent cb02b494f4
commit 85ee812ab1
36 changed files with 5422 additions and 13 deletions

View File

@@ -31,6 +31,11 @@ model User {
challengesAsChallenged Challenge[] @relation("Challenged")
challengesAsAdmin Challenge[] @relation("AdminValidator")
challengesAsWinner Challenge[] @relation("ChallengeWinner")
houseMemberships HouseMembership[]
houseInvitationsSent HouseInvitation[] @relation("Inviter")
houseInvitationsReceived HouseInvitation[] @relation("Invitee")
houseRequestsSent HouseRequest[] @relation("Requester")
housesCreated House[] @relation("HouseCreator")
@@index([score])
@@index([email])
@@ -166,3 +171,87 @@ model Challenge {
@@index([status])
@@index([adminId])
}
model House {
id String @id @default(cuid())
name String
description String?
creatorId String
creator User @relation("HouseCreator", fields: [creatorId], references: [id], onDelete: Cascade)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
memberships HouseMembership[]
invitations HouseInvitation[]
requests HouseRequest[]
@@index([creatorId])
@@index([name])
}
model HouseMembership {
id String @id @default(cuid())
houseId String
userId String
role HouseRole @default(MEMBER)
joinedAt DateTime @default(now())
house House @relation(fields: [houseId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
@@unique([houseId, userId])
@@index([houseId])
@@index([userId])
}
model HouseInvitation {
id String @id @default(cuid())
houseId String
inviterId String // Utilisateur qui envoie l'invitation
inviteeId String // Utilisateur invité
status InvitationStatus @default(PENDING)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
house House @relation(fields: [houseId], references: [id], onDelete: Cascade)
inviter User @relation("Inviter", fields: [inviterId], references: [id], onDelete: Cascade)
invitee User @relation("Invitee", fields: [inviteeId], references: [id], onDelete: Cascade)
@@unique([houseId, inviteeId])
@@index([houseId])
@@index([inviteeId])
@@index([status])
}
model HouseRequest {
id String @id @default(cuid())
houseId String
requesterId String // Utilisateur qui demande à rejoindre
status RequestStatus @default(PENDING)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
house House @relation(fields: [houseId], references: [id], onDelete: Cascade)
requester User @relation("Requester", fields: [requesterId], references: [id], onDelete: Cascade)
@@unique([houseId, requesterId])
@@index([houseId])
@@index([requesterId])
@@index([status])
}
enum HouseRole {
OWNER
ADMIN
MEMBER
}
enum InvitationStatus {
PENDING
ACCEPTED
REJECTED
CANCELLED
}
enum RequestStatus {
PENDING
ACCEPTED
REJECTED
CANCELLED
}