Files
scouthub/scouthub-magazzino-be/src/repositories/gruppiMagazzino.repository.ts
T
2026-08-01 03:12:23 +02:00

61 lines
2.1 KiB
TypeScript

import { Prisma } from '@prisma/client';
import { prisma } from '../db/prisma';
const includeAlbero = {
voci: { include: { materiale: true } },
figli: { include: { voci: { include: { materiale: true } } } },
} satisfies Prisma.GruppoMagazzinoInclude;
export type GruppoMagazzinoConAlbero = Prisma.GruppoMagazzinoGetPayload<{ include: typeof includeAlbero }>;
export interface CreateGruppoMagazzinoData {
orgId: string;
nome: string;
parentId?: string | null;
}
export interface UpdateGruppoMagazzinoData {
nome?: string;
parentId?: string | null;
}
export class GruppiMagazzinoRepository {
// Solo i gruppi radice (parentId null): i figli arrivano annidati via include,
// un solo livello come da vincolo applicativo.
findRadiceByOrg(orgId: string): Promise<GruppoMagazzinoConAlbero[]> {
return prisma.gruppoMagazzino.findMany({
where: { orgId, parentId: null },
include: includeAlbero,
orderBy: { creatoIl: 'asc' },
});
}
findByIdAndOrg(id: string, orgId: string): Promise<GruppoMagazzinoConAlbero | null> {
return prisma.gruppoMagazzino.findFirst({ where: { id, orgId }, include: includeAlbero });
}
// Usato per validare che un parentId indicato esista, sia della stessa org e sia
// esso stesso un gruppo radice (nessun nesting a più di un livello).
findRadiceByIdAndOrg(id: string, orgId: string): Promise<{ id: string } | null> {
return prisma.gruppoMagazzino.findFirst({ where: { id, orgId, parentId: null }, select: { id: true } });
}
countFigli(id: string): Promise<number> {
return prisma.gruppoMagazzino.count({ where: { parentId: id } });
}
create(data: CreateGruppoMagazzinoData): Promise<GruppoMagazzinoConAlbero> {
return prisma.gruppoMagazzino.create({ data, include: includeAlbero });
}
update(id: string, data: UpdateGruppoMagazzinoData): Promise<GruppoMagazzinoConAlbero> {
return prisma.gruppoMagazzino.update({ where: { id }, data, include: includeAlbero });
}
async delete(id: string): Promise<void> {
await prisma.gruppoMagazzino.delete({ where: { id } });
}
}
export const gruppiMagazzinoRepository = new GruppiMagazzinoRepository();