diff --git a/db-init/init-attivita-db.sql b/db-init/init-attivita-db.sql new file mode 100644 index 0000000..5bf8e74 --- /dev/null +++ b/db-init/init-attivita-db.sql @@ -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 diff --git a/scouthub-attivita-be/prisma/migrations/20260725000000_init/migration.sql b/scouthub-attivita-be/prisma/migrations/20260725000000_init/migration.sql new file mode 100644 index 0000000..26ebb0f --- /dev/null +++ b/scouthub-attivita-be/prisma/migrations/20260725000000_init/migration.sql @@ -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; + diff --git a/scouthub-home-be/prisma/migrations/20260725000000_init/migration.sql b/scouthub-home-be/prisma/migrations/20260725000000_init/migration.sql new file mode 100644 index 0000000..79d9126 --- /dev/null +++ b/scouthub-home-be/prisma/migrations/20260725000000_init/migration.sql @@ -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; +