import { PrismaClient, StatoMateriale } from "@prisma/client"; const prisma = new PrismaClient(); // Placeholder di orgId per il materiale di catalogo seedato manualmente (non riconducibile // a nessuna organizzazione reale), analogo a UTENTE_MODIFICA="MANUALE" nel seed di attivita-be. const ORG_SISTEMA = "SISTEMA"; async function main() { const materiali = [ { id: "materiale-corda", nome: "Corda", categoria: "Attrezzatura", unitaMisura: "pz" }, { id: "materiale-torcia", nome: "Torcia", categoria: "Attrezzatura", unitaMisura: "pz" }, { id: "materiale-kit-primo-soccorso", nome: "Kit primo soccorso", categoria: "Sicurezza", unitaMisura: "kit", }, { id: "materiale-tenda", nome: "Tenda", categoria: "Campeggio", unitaMisura: "pz" }, { id: "materiale-fornello-campo", nome: "Fornello da campo", categoria: "Campeggio", unitaMisura: "pz", }, { id: "materiale-zaino", nome: "Zaino", categoria: "Equipaggiamento personale", unitaMisura: "pz", }, { id: "materiale-sacco-a-pelo", nome: "Sacco a pelo", categoria: "Equipaggiamento personale", unitaMisura: "pz", }, { id: "materiale-borraccia", nome: "Borraccia", categoria: "Equipaggiamento personale", unitaMisura: "pz", }, { id: "materiale-garze", nome: "Garze", categoria: "Sicurezza", unitaMisura: "pz" }, { id: "materiale-cerotti", nome: "Cerotti", categoria: "Sicurezza", unitaMisura: "pz" }, { id: "materiale-disinfettante", nome: "Disinfettante", categoria: "Sicurezza", unitaMisura: "flacone", }, ]; await Promise.all( materiali.map((materiale) => prisma.materiale.upsert({ where: { id: materiale.id }, update: { ...materiale, stato: StatoMateriale.approvato, propostoDaOrgId: ORG_SISTEMA, }, create: { ...materiale, stato: StatoMateriale.approvato, propostoDaOrgId: ORG_SISTEMA, }, }) ) ); const tipiEvento = [ { id: "tipo-evento-uscita-giorno", nome: "Uscita di un giorno" }, { id: "tipo-evento-campo-estivo", nome: "Campo estivo" }, { id: "tipo-evento-riunione-settimanale", nome: "Riunione settimanale" }, ]; await Promise.all( tipiEvento.map((tipoEvento) => prisma.tipoEvento.upsert({ where: { id: tipoEvento.id }, update: { nome: tipoEvento.nome }, create: tipoEvento, }) ) ); // Le ex "liste modello" sono ora liste unificate: pubbliche, già approvate dalla // moderazione, senza autore/org (scritte direttamente dal seed, come farebbe un // moderatore in bypass della coda di proposte). const listeModello = [ { id: "lista-modello-uscita-giorno", nome: "Materiale base uscita giornaliera", tipoEventoId: "tipo-evento-uscita-giorno", }, { id: "lista-modello-campo-estivo", nome: "Materiale base campo estivo", tipoEventoId: "tipo-evento-campo-estivo", }, // Sotto-lista "foglia" (nessuna sotto-lista propria): allegata come sotto-lista sia a // "uscita di un giorno" sia a "campo estivo", al posto del vecchio materiale generico // "materiale-kit-primo-soccorso", per verificare il nesting a un livello. { id: "lista-modello-kit-primo-soccorso", nome: "Kit di pronto soccorso", tipoEventoId: "tipo-evento-uscita-giorno", }, ]; for (const listaModello of listeModello) { await prisma.lista.upsert({ where: { id: listaModello.id }, update: { ...listaModello, stato: "pubblico", statoModerazione: "approvato" }, create: { ...listaModello, orgId: null, creataDaUserId: null, stato: "pubblico", statoModerazione: "approvato", }, }); } const listeModelloVoci = [ { listaId: "lista-modello-uscita-giorno", materialeId: "materiale-zaino", quantita: 1 }, { listaId: "lista-modello-uscita-giorno", materialeId: "materiale-borraccia", quantita: 1, }, { listaId: "lista-modello-uscita-giorno", materialeId: "materiale-torcia", quantita: 1 }, { listaId: "lista-modello-campo-estivo", materialeId: "materiale-tenda", quantita: 1 }, { listaId: "lista-modello-campo-estivo", materialeId: "materiale-sacco-a-pelo", quantita: 1, }, { listaId: "lista-modello-campo-estivo", materialeId: "materiale-fornello-campo", quantita: 1, }, { listaId: "lista-modello-campo-estivo", materialeId: "materiale-corda", quantita: 2 }, // Voci della sotto-lista "Kit di pronto soccorso" (foglia, allegata sotto a due liste diverse). { listaId: "lista-modello-kit-primo-soccorso", materialeId: "materiale-garze", quantita: 3 }, { listaId: "lista-modello-kit-primo-soccorso", materialeId: "materiale-cerotti", quantita: 10, }, { listaId: "lista-modello-kit-primo-soccorso", materialeId: "materiale-disinfettante", quantita: 1, }, ]; // Rimuove il vecchio materiale generico "kit primo soccorso" piazzato direttamente nelle due // liste padre: da questo seed in poi il kit è la sotto-lista dedicata, non più una singola voce. await prisma.listaVoce.deleteMany({ where: { materialeId: "materiale-kit-primo-soccorso", listaId: { in: ["lista-modello-uscita-giorno", "lista-modello-campo-estivo"] }, }, }); for (const voce of listeModelloVoci) { await prisma.listaVoce.upsert({ where: { listaId_materialeId: { listaId: voce.listaId, materialeId: voce.materialeId, }, }, update: { quantita: voce.quantita }, create: voce, }); } const sottoListe = [ { listaId: "lista-modello-uscita-giorno", sottoListaId: "lista-modello-kit-primo-soccorso" }, { listaId: "lista-modello-campo-estivo", sottoListaId: "lista-modello-kit-primo-soccorso" }, ]; for (const sottoLista of sottoListe) { await prisma.listaSottoLista.upsert({ where: { listaId_sottoListaId: { listaId: sottoLista.listaId, sottoListaId: sottoLista.sottoListaId, }, }, update: {}, create: sottoLista, }); } } main() .catch((error) => { console.error(error); process.exitCode = 1; }) .finally(async () => { await prisma.$disconnect(); });