import { NextResponse } from "next/server"; import { auth } from "@/lib/auth"; import { houseService } from "@/services/houses/house.service"; import { Role, Prisma } from "@/prisma/generated/prisma/client"; export async function GET() { try { const session = await auth(); if (!session?.user || session.user.role !== Role.ADMIN) { return NextResponse.json({ error: "Accès refusé" }, { status: 403 }); } // Récupérer toutes les maisons avec leurs membres type HouseWithIncludes = Prisma.HouseGetPayload<{ include: { creator: { select: { id: true; username: true; avatar: true; }; }; memberships: { include: { user: { select: { id: true; username: true; avatar: true; score: true; level: true; }; }; }; }; }; }>; const houses = (await houseService.getAllHouses({ include: { creator: { select: { id: true, username: true, avatar: true, }, }, memberships: { include: { user: { select: { id: true, username: true, avatar: true, score: true, level: true, }, }, }, orderBy: [ { role: "asc" }, // OWNER, ADMIN, MEMBER { joinedAt: "asc" }, ], }, }, orderBy: { createdAt: "desc", }, })) as unknown as HouseWithIncludes[]; // Transformer les données pour la sérialisation const housesWithData = houses.map((house) => ({ id: house.id, name: house.name, description: house.description, creatorId: house.creatorId, creator: house.creator, createdAt: house.createdAt.toISOString(), updatedAt: house.updatedAt.toISOString(), membersCount: house.memberships?.length || 0, memberships: house.memberships?.map((membership) => ({ id: membership.id, role: membership.role, joinedAt: membership.joinedAt.toISOString(), user: membership.user, })) || [], })); return NextResponse.json(housesWithData); } catch (error) { console.error("Error fetching houses:", error); return NextResponse.json( { error: "Erreur lors de la récupération des maisons" }, { status: 500 } ); } }