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
Some checks failed
Deploy with Docker Compose / deploy (push) Has been cancelled
This commit is contained in:
145
prisma/seed.ts
145
prisma/seed.ts
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user