Sistemato magazzino
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
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();
|
||||
Reference in New Issue
Block a user