100 lines
2.6 KiB
TypeScript
100 lines
2.6 KiB
TypeScript
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 }
|
|
);
|
|
}
|
|
}
|