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

@@ -238,7 +238,150 @@ async function main() {
})
);
console.log("Seed completed:", { admin, users, events });
// Créer les maisons Game of Thrones
const housesData = [
{
name: "Maison Stark",
description:
"Winter is Coming. La Maison Stark de Winterfell règne sur le Nord depuis des millénaires. Fiers, loyaux et honorables, les Stark sont connus pour leur sens de la justice et leur connexion avec les anciens dieux. Leur devise rappelle que l'hiver approche toujours.",
creatorId: users[0].id, // DragonSlayer99
},
{
name: "Maison Lannister",
description:
"Hear Me Roar. La Maison Lannister de Castral Roc est la plus riche des Sept Royaumes. Célèbres pour leur ruse, leur ambition et leur devise 'Un Lannister paie toujours ses dettes', ils contrôlent les terres de l'Ouest avec une main de fer.",
creatorId: users[1].id, // MineMaster
},
{
name: "Maison Targaryen",
description:
"Fire and Blood. Les Targaryen sont les derniers descendants des seigneurs dragons de Valyria. Maîtres des dragons et des flammes, ils ont conquis les Sept Royaumes il y a trois cents ans. Leur sang de feu coule dans leurs veines.",
creatorId: users[2].id, // CraftKing
},
{
name: "Maison Baratheon",
description:
"Ours is the Fury. La Maison Baratheon de Port-Réal règne sur les Terres de l'Orage. Fondée par Orys Baratheon, compagnon d'Aegon le Conquérant, cette maison est connue pour sa force, sa détermination et sa fureur au combat.",
creatorId: users[3].id, // ForestWalker
},
{
name: "Maison Tyrell",
description:
"Growing Strong. La Maison Tyrell de Hautjardin contrôle le Bief, la région la plus fertile des Sept Royaumes. Maîtres de l'agriculture et du commerce, ils sont réputés pour leur richesse, leur diplomatie et leur capacité à faire fleurir même les terres les plus arides.",
creatorId: users[4].id, // HolyGuardian
},
{
name: "Maison Martell",
description:
"Unbowed, Unbent, Unbroken. La Maison Martell de Dorne n'a jamais été conquise. Fiers et indépendants, les Martell gouvernent les terres du Sud avec sagesse. Leur résilience légendaire et leur refus de se soumettre font d'eux des alliés redoutables.",
creatorId: users[5].id, // TechSmith
},
{
name: "Maison Greyjoy",
description:
"We Do Not Sow. La Maison Greyjoy des Îles de Fer règne sur les mers. Fiers guerriers et pillards redoutés, les Greyjoy ne cultivent pas la terre mais prennent ce qu'ils veulent par la force. Leur devise reflète leur nature de conquérants des océans.",
creatorId: admin.id, // Admin crée seulement cette maison
},
];
// Supprimer toutes les maisons existantes avant de les recréer
await prisma.house.deleteMany({});
// Créer les maisons avec leurs membres
// On doit créer les maisons séquentiellement pour éviter les conflits de membres multiples
const houses = [];
const usedUserIds = new Set<string>();
for (let index = 0; index < housesData.length; index++) {
const houseData = housesData[index];
// Vérifier si le créateur est déjà utilisé
if (usedUserIds.has(houseData.creatorId)) {
// Trouver un utilisateur disponible
const availableUser = users.find((u) => !usedUserIds.has(u.id));
if (!availableUser) {
console.warn(
`Pas d'utilisateur disponible pour ${houseData.name}, utilisation de l'admin`
);
// Utiliser l'admin seulement si vraiment nécessaire
if (!usedUserIds.has(admin.id)) {
houseData.creatorId = admin.id;
} else {
console.error(
`Impossible de créer ${houseData.name}, tous les utilisateurs sont déjà dans une maison`
);
continue;
}
} else {
houseData.creatorId = availableUser.id;
}
}
const house = await prisma.house.create({
data: {
name: houseData.name,
description: houseData.description,
creatorId: houseData.creatorId,
memberships: {
create: {
userId: houseData.creatorId,
role: "OWNER",
},
},
},
});
usedUserIds.add(houseData.creatorId);
// Ajouter quelques membres supplémentaires pour certaines maisons
if (index === 0 && users.length > 1 && !usedUserIds.has(users[1].id)) {
// Stark : ajouter un membre
await prisma.houseMembership.create({
data: {
houseId: house.id,
userId: users[1].id,
role: "MEMBER",
},
});
usedUserIds.add(users[1].id);
}
if (index === 1 && users.length > 2 && !usedUserIds.has(users[2].id)) {
// Lannister : ajouter deux membres
await prisma.houseMembership.create({
data: {
houseId: house.id,
userId: users[2].id,
role: "MEMBER",
},
});
usedUserIds.add(users[2].id);
if (users.length > 3 && !usedUserIds.has(users[3].id)) {
await prisma.houseMembership.create({
data: {
houseId: house.id,
userId: users[3].id,
role: "ADMIN",
},
});
usedUserIds.add(users[3].id);
}
}
if (index === 2 && users.length > 4 && !usedUserIds.has(users[4].id)) {
// Targaryen : ajouter un membre
await prisma.houseMembership.create({
data: {
houseId: house.id,
userId: users[4].id,
role: "MEMBER",
},
});
usedUserIds.add(users[4].id);
}
houses.push(house);
}
console.log("Seed completed:", { admin, users, events, houses });
}
main()