Fix sql e migration
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
-- scouthub-attivita-be usa un database separato sulla stessa istanza Postgres di "db".
|
||||
-- Eseguito solo al primo avvio del container (volume dati vuoto).
|
||||
SELECT 'CREATE DATABASE scouthub'
|
||||
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'scouthub')
|
||||
\gexec
|
||||
@@ -0,0 +1,224 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "stato_attivita" (
|
||||
"id" VARCHAR(2) NOT NULL,
|
||||
"nome" TEXT NOT NULL,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "stato_attivita_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "tipo_categoria" (
|
||||
"id" TEXT NOT NULL,
|
||||
"nome" TEXT NOT NULL,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "tipo_categoria_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "tipo_paragrafo" (
|
||||
"id" TEXT NOT NULL,
|
||||
"nome" TEXT NOT NULL,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "tipo_paragrafo_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "attivita" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"nome" TEXT NOT NULL,
|
||||
"autore" TEXT NOT NULL,
|
||||
"autore_id" TEXT NOT NULL,
|
||||
"padre" INTEGER,
|
||||
"stato" TEXT NOT NULL,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "attivita_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "branca" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"nome" TEXT NOT NULL,
|
||||
"inizio_eta" INTEGER,
|
||||
"fine_eta" INTEGER,
|
||||
"colore" VARCHAR(10),
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "branca_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "branca_attivita" (
|
||||
"attivita_id" INTEGER NOT NULL,
|
||||
"branca_id" INTEGER NOT NULL,
|
||||
"cancellato" BOOLEAN NOT NULL,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "branca_attivita_pkey" PRIMARY KEY ("attivita_id","branca_id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "periodo_anno" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"nome" TEXT NOT NULL,
|
||||
"inizio_mese" INTEGER,
|
||||
"fine_mese" INTEGER,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "periodo_anno_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "periodo_anno_attivita" (
|
||||
"attivita_id" INTEGER NOT NULL,
|
||||
"periodo_anno_id" INTEGER NOT NULL,
|
||||
"cancellato" BOOLEAN NOT NULL,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "periodo_anno_attivita_pkey" PRIMARY KEY ("attivita_id","periodo_anno_id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "paragrafo" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"attivita_id" INTEGER NOT NULL,
|
||||
"corpo" VARCHAR(500) NOT NULL,
|
||||
"autore" TEXT NOT NULL,
|
||||
"tipo" TEXT NOT NULL,
|
||||
"ordine" INTEGER NOT NULL,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "paragrafo_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "categoria" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"nome" TEXT NOT NULL,
|
||||
"padre" INTEGER,
|
||||
"tipo" TEXT NOT NULL,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "categoria_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "categoria_attivita" (
|
||||
"attivita_id" INTEGER NOT NULL,
|
||||
"categoria_id" INTEGER NOT NULL,
|
||||
"cancellato" BOOLEAN NOT NULL,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "categoria_attivita_pkey" PRIMARY KEY ("attivita_id","categoria_id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "materiale" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"nome" TEXT NOT NULL,
|
||||
"proprieta" JSONB,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "materiale_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "materiale_attivita" (
|
||||
"attivita_id" INTEGER NOT NULL,
|
||||
"materiale_id" INTEGER NOT NULL,
|
||||
"proprieta" JSONB,
|
||||
"cancellato" BOOLEAN NOT NULL,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "materiale_attivita_pkey" PRIMARY KEY ("attivita_id","materiale_id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "categoria_materiale" (
|
||||
"materiale_id" INTEGER NOT NULL,
|
||||
"categoria_id" INTEGER NOT NULL,
|
||||
"cancellato" BOOLEAN NOT NULL,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"data_modifica" TIMESTAMP(3) NOT NULL,
|
||||
"utente_modifica" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "categoria_materiale_pkey" PRIMARY KEY ("materiale_id","categoria_id")
|
||||
);
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "attivita" ADD CONSTRAINT "attivita_padre_fkey" FOREIGN KEY ("padre") REFERENCES "attivita"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "attivita" ADD CONSTRAINT "attivita_stato_fkey" FOREIGN KEY ("stato") REFERENCES "stato_attivita"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "branca_attivita" ADD CONSTRAINT "branca_attivita_attivita_id_fkey" FOREIGN KEY ("attivita_id") REFERENCES "attivita"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "branca_attivita" ADD CONSTRAINT "branca_attivita_branca_id_fkey" FOREIGN KEY ("branca_id") REFERENCES "branca"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "periodo_anno_attivita" ADD CONSTRAINT "periodo_anno_attivita_attivita_id_fkey" FOREIGN KEY ("attivita_id") REFERENCES "attivita"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "periodo_anno_attivita" ADD CONSTRAINT "periodo_anno_attivita_periodo_anno_id_fkey" FOREIGN KEY ("periodo_anno_id") REFERENCES "periodo_anno"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "paragrafo" ADD CONSTRAINT "paragrafo_attivita_id_fkey" FOREIGN KEY ("attivita_id") REFERENCES "attivita"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "paragrafo" ADD CONSTRAINT "paragrafo_tipo_fkey" FOREIGN KEY ("tipo") REFERENCES "tipo_paragrafo"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "categoria" ADD CONSTRAINT "categoria_padre_fkey" FOREIGN KEY ("padre") REFERENCES "categoria"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "categoria" ADD CONSTRAINT "categoria_tipo_fkey" FOREIGN KEY ("tipo") REFERENCES "tipo_categoria"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "categoria_attivita" ADD CONSTRAINT "categoria_attivita_attivita_id_fkey" FOREIGN KEY ("attivita_id") REFERENCES "attivita"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "categoria_attivita" ADD CONSTRAINT "categoria_attivita_categoria_id_fkey" FOREIGN KEY ("categoria_id") REFERENCES "categoria"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "materiale_attivita" ADD CONSTRAINT "materiale_attivita_attivita_id_fkey" FOREIGN KEY ("attivita_id") REFERENCES "attivita"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "materiale_attivita" ADD CONSTRAINT "materiale_attivita_materiale_id_fkey" FOREIGN KEY ("materiale_id") REFERENCES "materiale"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "categoria_materiale" ADD CONSTRAINT "categoria_materiale_materiale_id_fkey" FOREIGN KEY ("materiale_id") REFERENCES "materiale"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "categoria_materiale" ADD CONSTRAINT "categoria_materiale_categoria_id_fkey" FOREIGN KEY ("categoria_id") REFERENCES "categoria"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "StatoRichiesta" AS ENUM ('PENDING', 'APPROVATA', 'RIFIUTATA');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "OrigineRichiesta" AS ENUM ('LINK', 'PROFILO');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "gruppo_scout" (
|
||||
"org_id" TEXT NOT NULL,
|
||||
"nome" TEXT NOT NULL,
|
||||
"regione" TEXT,
|
||||
"data_creazione" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "gruppo_scout_pkey" PRIMARY KEY ("org_id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "invito" (
|
||||
"id" TEXT NOT NULL,
|
||||
"token" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"org_id" TEXT NOT NULL,
|
||||
"ruolo" TEXT NOT NULL,
|
||||
"scadenza" TIMESTAMP(3) NOT NULL,
|
||||
"stato" TEXT NOT NULL,
|
||||
|
||||
CONSTRAINT "invito_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "richiesta_ingresso" (
|
||||
"id" TEXT NOT NULL,
|
||||
"user_id" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"org_id" TEXT NOT NULL,
|
||||
"stato" "StatoRichiesta" NOT NULL DEFAULT 'PENDING',
|
||||
"origine" "OrigineRichiesta" NOT NULL,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "richiesta_ingresso_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "link_ingresso" (
|
||||
"id" TEXT NOT NULL,
|
||||
"token" TEXT NOT NULL,
|
||||
"org_id" TEXT NOT NULL,
|
||||
"attivo" BOOLEAN NOT NULL DEFAULT true,
|
||||
"creato_da" TEXT NOT NULL,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "link_ingresso_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "richiesta_creazione_gruppo" (
|
||||
"id" TEXT NOT NULL,
|
||||
"user_id" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"nome_proposto" TEXT NOT NULL,
|
||||
"regione" TEXT,
|
||||
"stato" "StatoRichiesta" NOT NULL DEFAULT 'PENDING',
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "richiesta_creazione_gruppo_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "invito_token_key" ON "invito"("token");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "richiesta_ingresso_email_idx" ON "richiesta_ingresso"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "link_ingresso_token_key" ON "link_ingresso"("token");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "richiesta_creazione_gruppo_email_idx" ON "richiesta_creazione_gruppo"("email");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "invito" ADD CONSTRAINT "invito_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "gruppo_scout"("org_id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "richiesta_ingresso" ADD CONSTRAINT "richiesta_ingresso_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "gruppo_scout"("org_id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "link_ingresso" ADD CONSTRAINT "link_ingresso_org_id_fkey" FOREIGN KEY ("org_id") REFERENCES "gruppo_scout"("org_id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
Reference in New Issue
Block a user