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 => { 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), })); };