-- CreateEnum CREATE TYPE "stato_materiale" AS ENUM ('proposto', 'approvato', 'rifiutato'); -- CreateEnum CREATE TYPE "stato_magazzino_voce" AS ENUM ('buono', 'da_riparare', 'mancante'); -- CreateEnum CREATE TYPE "stato_lista" AS ENUM ('bozza', 'privato', 'gruppo', 'pubblico'); -- CreateEnum CREATE TYPE "stato_moderazione_lista" AS ENUM ('proposto', 'approvato', 'rifiutato'); -- CreateEnum CREATE TYPE "stato_categoria" AS ENUM ('confermata', 'da_approvare'); -- CreateEnum CREATE TYPE "tipo_notifica" AS ENUM ('MATERIALE_PROPOSTO', 'CATEGORIA_PROPOSTA', 'TIPO_EVENTO_PROPOSTO', 'LISTA_PROPOSTA'); -- CreateTable CREATE TABLE "materiale" ( "id" TEXT NOT NULL, "nome" TEXT NOT NULL, "categoria" TEXT NOT NULL, "unita_misura" TEXT NOT NULL, "stato" "stato_materiale" NOT NULL DEFAULT 'proposto', "proposto_da_org_id" TEXT NOT NULL, "creato_il" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "materiale_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "tipo_evento" ( "id" TEXT NOT NULL, "nome" TEXT NOT NULL, "stato" "stato_categoria" NOT NULL DEFAULT 'confermata', "creato_da_org_id" TEXT, "creato_il" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "tipo_evento_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "categoria" ( "id" TEXT NOT NULL, "nome" TEXT NOT NULL, "stato" "stato_categoria" NOT NULL DEFAULT 'confermata', "creato_da_org_id" TEXT, "creato_il" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "categoria_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "lista" ( "id" TEXT NOT NULL, "nome" TEXT NOT NULL, "org_id" TEXT, "creata_da_user_id" TEXT, "stato" "stato_lista" NOT NULL DEFAULT 'bozza', "creata_il" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "stato_moderazione" "stato_moderazione_lista", "tipo_evento_id" TEXT, "parent_id" TEXT, CONSTRAINT "lista_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "lista_voce" ( "lista_id" TEXT NOT NULL, "materiale_id" TEXT NOT NULL, "quantita" INTEGER NOT NULL, CONSTRAINT "lista_voce_pkey" PRIMARY KEY ("lista_id","materiale_id") ); -- CreateTable CREATE TABLE "lista_sotto_lista" ( "lista_id" TEXT NOT NULL, "sotto_lista_id" TEXT NOT NULL, CONSTRAINT "lista_sotto_lista_pkey" PRIMARY KEY ("lista_id","sotto_lista_id") ); -- CreateTable CREATE TABLE "magazzino_voce" ( "id" TEXT NOT NULL, "org_id" TEXT NOT NULL, "materiale_id" TEXT NOT NULL, "quantita_posseduta" INTEGER NOT NULL, "stato" "stato_magazzino_voce" NOT NULL, "posizione" TEXT, "note" TEXT, "gruppo_id" TEXT, CONSTRAINT "magazzino_voce_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "gruppo_magazzino" ( "id" TEXT NOT NULL, "org_id" TEXT NOT NULL, "nome" TEXT NOT NULL, "parent_id" TEXT, "creato_il" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "gruppo_magazzino_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "evento" ( "id" TEXT NOT NULL, "org_id" TEXT NOT NULL, "nome" TEXT NOT NULL, "lista_id" TEXT NOT NULL, "data" TIMESTAMP(3) NOT NULL, CONSTRAINT "evento_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "evento_check" ( "evento_id" TEXT NOT NULL, "materiale_id" TEXT NOT NULL, "portato" BOOLEAN NOT NULL DEFAULT false, "note" TEXT, CONSTRAINT "evento_check_pkey" PRIMARY KEY ("evento_id","materiale_id") ); -- CreateTable CREATE TABLE "notifica" ( "id" SERIAL NOT NULL, "tipo" "tipo_notifica" NOT NULL, "messaggio" TEXT NOT NULL, "link" TEXT, "letta" BOOLEAN NOT NULL DEFAULT false, "data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "notifica_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "lista_stato_stato_moderazione_idx" ON "lista"("stato", "stato_moderazione"); -- CreateIndex CREATE INDEX "lista_tipo_evento_id_idx" ON "lista"("tipo_evento_id"); -- CreateIndex CREATE INDEX "lista_parent_id_idx" ON "lista"("parent_id"); -- CreateIndex CREATE INDEX "gruppo_magazzino_org_id_idx" ON "gruppo_magazzino"("org_id"); -- CreateIndex CREATE INDEX "gruppo_magazzino_parent_id_idx" ON "gruppo_magazzino"("parent_id"); -- CreateIndex CREATE INDEX "magazzino_voce_gruppo_id_idx" ON "magazzino_voce"("gruppo_id"); -- AddForeignKey ALTER TABLE "lista" ADD CONSTRAINT "lista_tipo_evento_id_fkey" FOREIGN KEY ("tipo_evento_id") REFERENCES "tipo_evento"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lista" ADD CONSTRAINT "lista_parent_id_fkey" FOREIGN KEY ("parent_id") REFERENCES "lista"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lista_voce" ADD CONSTRAINT "lista_voce_lista_id_fkey" FOREIGN KEY ("lista_id") REFERENCES "lista"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lista_voce" ADD CONSTRAINT "lista_voce_materiale_id_fkey" FOREIGN KEY ("materiale_id") REFERENCES "materiale"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lista_sotto_lista" ADD CONSTRAINT "lista_sotto_lista_lista_id_fkey" FOREIGN KEY ("lista_id") REFERENCES "lista"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "lista_sotto_lista" ADD CONSTRAINT "lista_sotto_lista_sotto_lista_id_fkey" FOREIGN KEY ("sotto_lista_id") REFERENCES "lista"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "magazzino_voce" ADD CONSTRAINT "magazzino_voce_materiale_id_fkey" FOREIGN KEY ("materiale_id") REFERENCES "materiale"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "magazzino_voce" ADD CONSTRAINT "magazzino_voce_gruppo_id_fkey" FOREIGN KEY ("gruppo_id") REFERENCES "gruppo_magazzino"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "gruppo_magazzino" ADD CONSTRAINT "gruppo_magazzino_parent_id_fkey" FOREIGN KEY ("parent_id") REFERENCES "gruppo_magazzino"("id") ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "evento" ADD CONSTRAINT "evento_lista_id_fkey" FOREIGN KEY ("lista_id") REFERENCES "lista"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "evento_check" ADD CONSTRAINT "evento_check_evento_id_fkey" FOREIGN KEY ("evento_id") REFERENCES "evento"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "evento_check" ADD CONSTRAINT "evento_check_materiale_id_fkey" FOREIGN KEY ("materiale_id") REFERENCES "materiale"("id") ON DELETE RESTRICT ON UPDATE CASCADE;