Files
projectbrain-Public/backend/src/repositories/featureGroupsRepository.ts
T

44 lines
1.2 KiB
TypeScript

import { prisma } from "../db/prisma.js";
import type { FeatureGroupDto, FocusAreaPurpose } from "../types/api.js";
const toPublicId = (value: { slug: string | null; readableId: string | null; id: string }) =>
value.slug ?? value.readableId ?? value.id;
const findProjectRecordBySlugOrId = (projectIdOrSlug: string) =>
prisma.project.findFirst({
where: {
deletedAt: null,
OR: [{ id: projectIdOrSlug }, { slug: projectIdOrSlug }],
},
});
export const listFeatureGroupsForProject = async (
projectIdOrSlug: string,
): Promise<FeatureGroupDto[] | undefined> => {
const project = await findProjectRecordBySlugOrId(projectIdOrSlug);
if (!project) return undefined;
const groups = await prisma.featureGroup.findMany({
where: {
projectId: project.id,
deletedAt: null,
},
orderBy: [{ name: "asc" }],
include: {
features: {
where: { deletedAt: null },
orderBy: { name: "asc" },
},
},
});
return groups.map((group) => ({
id: toPublicId(group),
projectId: project.slug,
name: group.name,
description: group.description ?? undefined,
focusArea: group.focusArea as FocusAreaPurpose | undefined,
featureIds: group.features.map(toPublicId),
}));
};