diff --git a/packages/api/package.json b/packages/api/package.json index 2b31181ed7b9699a86e61a074d55b00a0f6cb156..3104052af3e6ee78fd76be083d2cc1367135ee16 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -10,6 +10,8 @@ "daily": "node --loader ts-node/esm/transpile-only ./src/scripts/daily.ts", "monthly": "node --loader ts-node/esm/transpile-only ./src/scripts/monthly.ts", "db:dump": "rm -rf ./backups/* && pg_dump --host=localhost --username=postgres --clean --if-exists --format=d --no-owner --no-privileges --dbname=camino --file=./backups/", + "postdb:dump-schema": "node -e \"console.log(\\\"il faut supprimer le 'create schema public' et 'SELECT pg_catalog.set_config('search_path', '', false);'\\\")\"", + "db:dump-schema": "pg_dump --host=localhost --username=postgres --exclude-table=knex_migrations --exclude-table=knex_migrations_lock --exclude-table=knex_migrations_id_seq --exclude-table=knex_migrations_lock_index_seq --no-owner --no-privileges --dbname=camino --schema-only --schema public --no-comments > src/knex/migrations/20230413090214_init_schema.sql", "db:import": "pg_restore --host=localhost --username=postgres --clean --if-exists --no-owner --no-privileges --dbname=camino ./backups", "db:import-without-files": "pg_restore --host=localhost --username=postgres --clean --if-exists --no-owner --no-privileges --dbname=camino < ./backup_without_files.backup", "db:prod-fetch": "rm -rf ./backups/* && ssh camino.beta.gouv.fr 'rm -f ~/backup.tgz && cd /srv/backups/dump/ && tar cvzf ~/backup.tgz .' && scp camino.beta.gouv.fr:~/backup.tgz backups/ && tar xvf backups/backup.tgz --directory ./backups", diff --git a/packages/api/src/knex/migrations/20230413090214_init.ts b/packages/api/src/knex/migrations/20230413090214_init.ts index b920d16e8bebbb52a76193ec89d8960acca4f67c..b348a699a1b6580278f28d62a5e34e82965aca03 100644 --- a/packages/api/src/knex/migrations/20230413090214_init.ts +++ b/packages/api/src/knex/migrations/20230413090214_init.ts @@ -3,10 +3,10 @@ import { readFile } from 'node:fs/promises' import path, { join } from 'node:path' import { fileURLToPath } from 'url' -export const up = async (knex: Knex) => { +export const up = async (knex: Knex): Promise<void> => { const __dirname = path.dirname(fileURLToPath(import.meta.url)) const sql = await readFile(join(__dirname, './20230413090214_init_schema.sql'), { encoding: 'utf-8' }) await knex.raw(sql) } -export const down = () => ({}) +export const down = (): void => {} diff --git a/packages/api/src/knex/migrations/20230413090214_init_schema.sql b/packages/api/src/knex/migrations/20230413090214_init_schema.sql index db55c06f610e7e4360eca7969f4a699095686fb6..c8e371107243e2911b7386b39ebedb1e12ba9a96 100644 --- a/packages/api/src/knex/migrations/20230413090214_init_schema.sql +++ b/packages/api/src/knex/migrations/20230413090214_init_schema.sql @@ -1,112 +1,64 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 15.4 (Debian 15.4-1.pgdg110+1) +-- Dumped by pg_dump version 16.3 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + SET default_tablespace = ''; + SET default_table_access_method = heap; -CREATE EXTENSION IF NOT EXISTS postgis; -CREATE TABLE public.activites_types ( - id character varying(3) NOT NULL, - nom character varying(255) NOT NULL, - sections jsonb[] NOT NULL, - frequence_id character varying(3) NOT NULL, - date_debut character varying(255) NOT NULL, - delai_mois integer, - ordre integer NOT NULL, - description text -); -ALTER TABLE public.activites_types OWNER TO postgres; -CREATE TABLE public.activites_types__documents_types ( - activite_type_id character varying(3) NOT NULL, - document_type_id character varying(3) NOT NULL, - optionnel boolean -); -ALTER TABLE public.activites_types__documents_types OWNER TO postgres; -CREATE TABLE public.activites_types__pays ( - pays_id character varying(3) NOT NULL, - activite_type_id character varying(3) NOT NULL -); -ALTER TABLE public.activites_types__pays OWNER TO postgres; -CREATE TABLE public.activites_types__titres_types ( - titre_type_id character varying(3) NOT NULL, - activite_type_id character varying(3) NOT NULL -); -ALTER TABLE public.activites_types__titres_types OWNER TO postgres; -CREATE TABLE public.administrations ( - id character varying(64) NOT NULL -); -ALTER TABLE public.administrations OWNER TO postgres; -CREATE TABLE public.administrations__activites_types ( - activite_type_id character varying(3) NOT NULL, - administration_id character varying(64) NOT NULL, - modification_interdit boolean, - lecture_interdit boolean -); -ALTER TABLE public.administrations__activites_types OWNER TO postgres; + +-- +-- Name: activites_documents; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.activites_documents ( + id character varying(255) NOT NULL, + activite_document_type_id character varying(3) NOT NULL, + date character varying(10) NOT NULL, + activite_id character varying(255), + description character varying(1024), + largeobject_id oid NOT NULL +); + + +-- +-- Name: administrations__activites_types__emails; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.administrations__activites_types__emails ( activite_type_id character varying(3) NOT NULL, administration_id character varying(64) NOT NULL, email character varying(255) NOT NULL ); -ALTER TABLE public.administrations__activites_types__emails OWNER TO postgres; -CREATE TABLE public.caches ( - id character varying(128) NOT NULL, - valeur jsonb -); -ALTER TABLE public.caches OWNER TO postgres; + + +-- +-- Name: communes; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.communes ( id character varying(5) NOT NULL, nom character varying(255) NOT NULL, - departement_id character varying(3) NOT NULL -); -ALTER TABLE public.communes OWNER TO postgres; -CREATE TABLE public.communes_postgis ( - id character varying(5) NOT NULL, - geometry public.geometry(MultiPolygon,4326) -); -ALTER TABLE public.communes_postgis OWNER TO postgres; -CREATE TABLE public.demarches_types ( - id character varying(3) NOT NULL, - nom character varying(255) NOT NULL, - description text, - ordre integer, - duree boolean, - points boolean, - substances boolean, - titulaires boolean, - renouvelable boolean, - exception boolean, - auto boolean, - travaux boolean -); -ALTER TABLE public.demarches_types OWNER TO postgres; -CREATE TABLE public.documents ( - id character varying(255) NOT NULL, - type_id character varying(3) NOT NULL, - date character varying(10) NOT NULL, - entreprise_id character varying(64), - titre_etape_id character varying(128), - description character varying(1024), - titre_activite_id character varying(128), - fichier boolean, - fichier_type_id character varying(3), - url character varying(1024), - uri character varying(1024), - jorf character varying(32), - nor character varying(32), - public_lecture boolean, - entreprises_lecture boolean -); -ALTER TABLE public.documents OWNER TO postgres; -CREATE TABLE public.documents_types ( - id character varying(3) NOT NULL, - nom character varying(255) NOT NULL, - description text -); -ALTER TABLE public.documents_types OWNER TO postgres; -CREATE TABLE public.domaines ( - id character varying(1) NOT NULL, - nom character varying(255) NOT NULL, - description text, - ordre integer NOT NULL -); -ALTER TABLE public.domaines OWNER TO postgres; + geometry public.geometry NOT NULL +); + + +-- +-- Name: entreprises; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.entreprises ( id character varying(64) NOT NULL, nom character varying(255) NOT NULL, @@ -123,53 +75,83 @@ CREATE TABLE public.entreprises ( url character varying(1024), email character varying(255), telephone character varying(255), - archive boolean DEFAULT false -); -ALTER TABLE public.entreprises OWNER TO postgres; -CREATE TABLE public.entreprises__documents_types ( - document_type_id character varying(3) NOT NULL + archive boolean DEFAULT false NOT NULL ); -ALTER TABLE public.entreprises__documents_types OWNER TO postgres; + + +-- +-- Name: entreprises_documents; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.entreprises_documents ( + id character varying(255) NOT NULL, + entreprise_document_type_id character varying(3) NOT NULL, + date character varying(10) NOT NULL, + entreprise_id character varying(64), + description character varying(1024), + largeobject_id oid NOT NULL +); + + +-- +-- Name: entreprises_etablissements; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.entreprises_etablissements ( id character varying(64) NOT NULL, entreprise_id character varying(64) NOT NULL, - nom character varying(255), + nom character varying(255) NOT NULL, legal_siret character varying(255), - date_debut character varying(10), + date_debut character varying(10) NOT NULL, date_fin character varying(10) ); -ALTER TABLE public.entreprises_etablissements OWNER TO postgres; -CREATE TABLE public.etapes_types ( - id character varying(3) NOT NULL, - nom character varying(128), - description text, - ordre integer NOT NULL, - fondamentale boolean, - "unique" boolean, - acceptation_auto boolean, - date_fin character varying(10), - sections jsonb[], - public_lecture boolean, - entreprises_lecture boolean -); -ALTER TABLE public.etapes_types OWNER TO postgres; -CREATE TABLE public.etapes_types__justificatifs_types ( - etape_type_id character varying(3) NOT NULL, - document_type_id character varying(3) NOT NULL, - optionnel boolean, - description text -); -ALTER TABLE public.etapes_types__justificatifs_types OWNER TO postgres; -CREATE TABLE public.forets ( - id character varying(30) NOT NULL, - nom character varying(255) NOT NULL -); -ALTER TABLE public.forets OWNER TO postgres; + + +-- +-- Name: etape_avis; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.etape_avis ( + id character varying(255) NOT NULL, + avis_type_id character varying(255) NOT NULL, + avis_statut_id character varying(255) NOT NULL, + avis_visibility_id character varying(255) NOT NULL, + etape_id character varying(255) NOT NULL, + description text NOT NULL, + date character varying(10) NOT NULL, + largeobject_id oid +); + + +-- +-- Name: etapes_documents; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.etapes_documents ( + id character varying(255) NOT NULL, + etape_document_type_id character varying(3) NOT NULL, + etape_id character varying(255) NOT NULL, + description character varying(1024), + public_lecture boolean NOT NULL, + entreprises_lecture boolean NOT NULL, + largeobject_id oid NOT NULL +); + + +-- +-- Name: forets_postgis; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.forets_postgis ( id character varying(30) NOT NULL, geometry public.geometry(MultiPolygon,4326) ); -ALTER TABLE public.forets_postgis OWNER TO postgres; + + +-- +-- Name: journaux; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.journaux ( id character varying(255) NOT NULL, utilisateur_id character varying(255) NOT NULL, @@ -180,182 +162,179 @@ CREATE TABLE public.journaux ( titre_id character varying(128) NOT NULL, CONSTRAINT logs_operation_check CHECK ((operation = ANY (ARRAY['create'::text, 'update'::text, 'delete'::text]))) ); -ALTER TABLE public.journaux OWNER TO postgres; + + +-- +-- Name: logs; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.logs ( + datetime timestamp with time zone DEFAULT now() NOT NULL, + path character varying(255), + method character varying(6) NOT NULL, + body jsonb, + utilisateur_id character varying(255) NOT NULL +); + + +-- +-- Name: perimetre_reference; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.perimetre_reference ( + titre_etape_id character varying(255) NOT NULL, + geo_systeme character varying(255) NOT NULL, + opposable boolean DEFAULT false, + geojson_perimetre jsonb +); + + +-- +-- Name: sdom_zones_postgis; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.sdom_zones_postgis ( id character varying(30) NOT NULL, geometry public.geometry(MultiPolygon,4326) ); -ALTER TABLE public.sdom_zones_postgis OWNER TO postgres; + + +-- +-- Name: secteurs_maritime_postgis; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.secteurs_maritime_postgis ( id integer NOT NULL, geometry public.geometry(MultiPolygon,4326) ); -ALTER TABLE public.secteurs_maritime_postgis OWNER TO postgres; + + +-- +-- Name: titres; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.titres ( id character varying(128) NOT NULL, nom character varying(255) NOT NULL, type_id character varying(3) NOT NULL, titre_statut_id character varying(3) DEFAULT 'ind'::character varying NOT NULL, - public_lecture boolean DEFAULT false, - entreprises_lecture boolean DEFAULT false, + public_lecture boolean DEFAULT false NOT NULL, doublon_titre_id character varying(128), - contenus_titre_etapes_ids jsonb, - coordonnees point, props_titre_etapes_ids jsonb DEFAULT '{}'::jsonb, - slug character varying(255), + slug character varying(255) NOT NULL, archive boolean DEFAULT false NOT NULL, "references" jsonb DEFAULT '[]'::jsonb NOT NULL ); -ALTER TABLE public.titres OWNER TO postgres; + + +-- +-- Name: titres__titres; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.titres__titres ( titre_from_id character varying(255) NOT NULL, titre_to_id character varying(255) NOT NULL ); -ALTER TABLE public.titres__titres OWNER TO postgres; + + +-- +-- Name: titres_activites; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.titres_activites ( id character varying(255) NOT NULL, titre_id character varying(128), utilisateur_id character varying(128), - date character varying(10), + date character varying(10) NOT NULL, date_saisie character varying(10), contenu jsonb, type_id character varying(3) NOT NULL, activite_statut_id character varying(3) NOT NULL, annee integer NOT NULL, - periode_id integer, - sections jsonb[], - suppression boolean, - slug character varying(255) -); -ALTER TABLE public.titres_activites OWNER TO postgres; -CREATE TABLE public.titres_amodiataires ( - titre_etape_id character varying(128) NOT NULL, - entreprise_id character varying(64) NOT NULL, - operateur boolean -); -ALTER TABLE public.titres_amodiataires OWNER TO postgres; -CREATE TABLE public.titres_communes ( - titre_etape_id character varying(128) NOT NULL, - commune_id character varying(8) NOT NULL, - surface integer -); -ALTER TABLE public.titres_communes OWNER TO postgres; + periode_id integer NOT NULL, + sections jsonb[] NOT NULL, + suppression boolean DEFAULT false NOT NULL, + slug character varying(255) NOT NULL +); + + +-- +-- Name: titres_demarches; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.titres_demarches ( id character varying(128) NOT NULL, titre_id character varying(128) NOT NULL, type_id character varying(3) NOT NULL, statut_id character varying(3) DEFAULT 'ind'::character varying NOT NULL, - public_lecture boolean DEFAULT false, - entreprises_lecture boolean DEFAULT false, - ordre integer DEFAULT 0, + public_lecture boolean DEFAULT false NOT NULL, + entreprises_lecture boolean DEFAULT false NOT NULL, + ordre integer DEFAULT 0 NOT NULL, slug character varying(255), - demarche_date_debut character varying(10), - demarche_date_fin character varying(10), description character varying(255), - archive boolean DEFAULT false NOT NULL -); -ALTER TABLE public.titres_demarches OWNER TO postgres; -CREATE TABLE public.titres_demarches_liens ( - enfant_titre_demarche_id character varying(128) NOT NULL, - parent_titre_demarche_id character varying(128) NOT NULL -); -ALTER TABLE public.titres_demarches_liens OWNER TO postgres; + archive boolean DEFAULT false NOT NULL, + demarche_date_debut character varying(10), + demarche_date_fin character varying(10) +); + + +-- +-- Name: titres_etapes; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.titres_etapes ( id character varying(128) NOT NULL, titre_demarche_id character varying(128) NOT NULL, type_id character varying(3) NOT NULL, statut_id character varying(3) NOT NULL, - ordre integer, + ordre integer DEFAULT 0 NOT NULL, date character varying(10) NOT NULL, date_debut character varying(10), date_fin character varying(10), duree integer, surface real, contenu jsonb, - incertitudes jsonb, heritage_props jsonb, heritage_contenu jsonb, slug character varying(255), - decisions_annexes_sections jsonb[], - decisions_annexes_contenu json, archive boolean DEFAULT false NOT NULL, substances jsonb DEFAULT '[]'::jsonb NOT NULL, - secteurs_maritime jsonb, - administrations_locales jsonb, - sdom_zones jsonb -); -ALTER TABLE public.titres_etapes OWNER TO postgres; -CREATE TABLE public.titres_etapes_justificatifs ( - titre_etape_id character varying(128) NOT NULL, - document_id character varying(255) NOT NULL -); -ALTER TABLE public.titres_etapes_justificatifs OWNER TO postgres; -CREATE TABLE public.titres_forets ( - titre_etape_id character varying(128) NOT NULL, - foret_id character varying(8) NOT NULL -); -ALTER TABLE public.titres_forets OWNER TO postgres; -CREATE TABLE public.titres_points ( - id character varying(255) NOT NULL, - titre_etape_id character varying(128) NOT NULL, - coordonnees point NOT NULL, - groupe integer NOT NULL, - contour integer NOT NULL, - point integer NOT NULL, - nom character varying(255), - description text, - subsidiaire boolean, - lot integer, - slug character varying(255) -); -ALTER TABLE public.titres_points OWNER TO postgres; -CREATE TABLE public.titres_points_references ( - id character varying(255) NOT NULL, - titre_point_id character varying(255), - geo_systeme_id character varying(5) NOT NULL, - coordonnees point NOT NULL, - opposable boolean, - slug character varying(255) -); -ALTER TABLE public.titres_points_references OWNER TO postgres; -CREATE TABLE public.titres_titulaires ( + secteurs_maritime jsonb DEFAULT '[]'::jsonb NOT NULL, + administrations_locales jsonb DEFAULT '[]'::jsonb NOT NULL, + sdom_zones jsonb DEFAULT '[]'::jsonb NOT NULL, + forets jsonb DEFAULT '[]'::jsonb NOT NULL, + communes jsonb DEFAULT '[]'::jsonb NOT NULL, + geojson4326_perimetre public.geometry(MultiPolygon,4326), + geojson4326_points jsonb, + geojson_origine_points jsonb, + geojson_origine_perimetre jsonb, + geojson_origine_geo_systeme_id character varying, + geojson4326_forages jsonb, + geojson_origine_forages jsonb, + titulaire_ids jsonb DEFAULT '[]'::jsonb NOT NULL, + amodiataire_ids jsonb DEFAULT '[]'::jsonb NOT NULL, + is_brouillon boolean DEFAULT false NOT NULL, + note jsonb DEFAULT json_build_object('valeur', '', 'is_avertissement', false) NOT NULL, + CONSTRAINT forages_origine_not_null_when_forages4326_not_null CHECK (((ROW(geojson4326_forages, geojson_origine_forages) IS NULL) OR (ROW(geojson4326_forages, geojson_origine_forages) IS NOT NULL))), + CONSTRAINT perimetre_origine_not_null_when_perimetre_4326_not_null CHECK (((ROW(geojson4326_perimetre, geojson_origine_geo_systeme_id, geojson_origine_perimetre) IS NULL) OR (ROW(geojson4326_perimetre, geojson_origine_geo_systeme_id, geojson_origine_perimetre) IS NOT NULL))), + CONSTRAINT points_origine_not_null_when_points_4326_not_null CHECK (((ROW(geojson4326_points, geojson_origine_points) IS NULL) OR (ROW(geojson4326_points, geojson_origine_points) IS NOT NULL))) +); + + +-- +-- Name: titres_etapes_entreprises_documents; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.titres_etapes_entreprises_documents ( titre_etape_id character varying(128) NOT NULL, - entreprise_id character varying(64) NOT NULL, - operateur boolean -); -ALTER TABLE public.titres_titulaires OWNER TO postgres; -CREATE TABLE public.titres_types ( - id character varying(3) NOT NULL, - domaine_id character varying(1) NOT NULL, - type_id character varying(3) NOT NULL, - contenu_ids jsonb[], - archive boolean -); -ALTER TABLE public.titres_types OWNER TO postgres; -CREATE TABLE public.titres_types__demarches_types__etapes_types ( - titre_type_id character varying(3) NOT NULL, - ordre integer, - demarche_type_id character varying(7) NOT NULL, - etape_type_id character varying(3) NOT NULL, - sections jsonb[] -); -ALTER TABLE public.titres_types__demarches_types__etapes_types OWNER TO postgres; -CREATE TABLE public.titres_types__demarches_types__etapes_types__justificatifs_t ( - titre_type_id character varying(3) NOT NULL, - demarche_type_id character varying(7) NOT NULL, - etape_type_id character varying(3) NOT NULL, - document_type_id character varying(3) NOT NULL, - optionnel boolean, - description text -); -ALTER TABLE public.titres_types__demarches_types__etapes_types__justificatifs_t OWNER TO postgres; -CREATE TABLE public.titres_types_types ( - id character varying(2) NOT NULL, - nom character varying(255) NOT NULL, - description text, - ordre integer NOT NULL -); -ALTER TABLE public.titres_types_types OWNER TO postgres; + entreprise_document_id character varying(255) NOT NULL +); + + +-- +-- Name: utilisateurs; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.utilisateurs ( id character varying(255) NOT NULL, email character varying(255), @@ -366,292 +345,653 @@ CREATE TABLE public.utilisateurs ( role character varying(255) NOT NULL, date_creation character varying(255) NOT NULL, administration_id character varying(255), - qgis_token character varying(255) -); -ALTER TABLE public.utilisateurs OWNER TO postgres; + qgis_token character varying(255), + keycloak_id character varying(255), + CONSTRAINT check_keycloak_id_not_null CHECK (((email IS NULL) OR (keycloak_id IS NOT NULL))) +); + + +-- +-- Name: utilisateurs__entreprises; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.utilisateurs__entreprises ( utilisateur_id character varying(64), entreprise_id character varying(64) ); -ALTER TABLE public.utilisateurs__entreprises OWNER TO postgres; + + +-- +-- Name: utilisateurs__titres; Type: TABLE; Schema: public; Owner: - +-- + CREATE TABLE public.utilisateurs__titres ( utilisateur_id character varying(255) NOT NULL, titre_id character varying(255) NOT NULL ); -ALTER TABLE public.utilisateurs__titres OWNER TO postgres; -ALTER TABLE ONLY public.activites_types__documents_types - ADD CONSTRAINT activites_types__documents_types_pkey PRIMARY KEY (activite_type_id, document_type_id); -ALTER TABLE ONLY public.activites_types__pays - ADD CONSTRAINT activites_types__pays_pkey PRIMARY KEY (pays_id, activite_type_id); -ALTER TABLE ONLY public.activites_types - ADD CONSTRAINT activites_types_pkey PRIMARY KEY (id); + + +-- +-- Name: activites_documents activites_documents_pk; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.activites_documents + ADD CONSTRAINT activites_documents_pk PRIMARY KEY (id); + + +-- +-- Name: administrations__activites_types__emails administrations__activites_types__emails_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.administrations__activites_types__emails ADD CONSTRAINT administrations__activites_types__emails_pkey PRIMARY KEY (administration_id, activite_type_id, email); -ALTER TABLE ONLY public.administrations - ADD CONSTRAINT administrations_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.caches - ADD CONSTRAINT caches_pkey PRIMARY KEY (id); + + +-- +-- Name: communes communes_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.communes ADD CONSTRAINT communes_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.communes_postgis - ADD CONSTRAINT communes_postgis_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.demarches_types - ADD CONSTRAINT demarches_types_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.documents - ADD CONSTRAINT documents_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.documents_types - ADD CONSTRAINT documents_types_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.domaines - ADD CONSTRAINT domaines_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.entreprises__documents_types - ADD CONSTRAINT entreprises__documents_types_pkey PRIMARY KEY (document_type_id); + + +-- +-- Name: entreprises_documents entreprises_documents_pk; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.entreprises_documents + ADD CONSTRAINT entreprises_documents_pk PRIMARY KEY (id); + + +-- +-- Name: entreprises_etablissements entreprises_etablissements_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.entreprises_etablissements ADD CONSTRAINT entreprises_etablissements_pkey PRIMARY KEY (id); + + +-- +-- Name: entreprises entreprises_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.entreprises ADD CONSTRAINT entreprises_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.etapes_types__justificatifs_types - ADD CONSTRAINT etapes_types__justificatifs_types_pkey PRIMARY KEY (etape_type_id, document_type_id); -ALTER TABLE ONLY public.etapes_types - ADD CONSTRAINT etapes_types_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.forets - ADD CONSTRAINT forets_pkey PRIMARY KEY (id); + + +-- +-- Name: etapes_documents etapes_documents_pk; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.etapes_documents + ADD CONSTRAINT etapes_documents_pk PRIMARY KEY (id); + + +-- +-- Name: forets_postgis forets_postgis_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.forets_postgis ADD CONSTRAINT forets_postgis_pkey PRIMARY KEY (id); + + +-- +-- Name: journaux logs_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.journaux ADD CONSTRAINT logs_pkey PRIMARY KEY (id); + + +-- +-- Name: perimetre_reference perimetre_reference_pk; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.perimetre_reference + ADD CONSTRAINT perimetre_reference_pk PRIMARY KEY (titre_etape_id, geo_systeme); + + +-- +-- Name: sdom_zones_postgis sdom_zones_postgis_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.sdom_zones_postgis ADD CONSTRAINT sdom_zones_postgis_pkey PRIMARY KEY (id); + + +-- +-- Name: secteurs_maritime_postgis secteurs_maritime_postgis_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.secteurs_maritime_postgis ADD CONSTRAINT secteurs_maritime_postgis_pkey PRIMARY KEY (id); + + +-- +-- Name: titres__titres titres__titres_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.titres__titres ADD CONSTRAINT titres__titres_pkey PRIMARY KEY (titre_from_id, titre_to_id); + + +-- +-- Name: titres_activites titres_activites_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.titres_activites ADD CONSTRAINT titres_activites_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.titres_amodiataires - ADD CONSTRAINT titres_amodiataires_pkey PRIMARY KEY (titre_etape_id, entreprise_id); -ALTER TABLE ONLY public.titres_communes - ADD CONSTRAINT titres_communes_pkey PRIMARY KEY (titre_etape_id, commune_id); -ALTER TABLE ONLY public.titres_demarches_liens - ADD CONSTRAINT titres_demarches_liens_pkey PRIMARY KEY (enfant_titre_demarche_id, parent_titre_demarche_id); + + +-- +-- Name: titres_demarches titres_demarches_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.titres_demarches ADD CONSTRAINT titres_demarches_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.titres_etapes_justificatifs - ADD CONSTRAINT titres_etapes_justificatifs_pkey PRIMARY KEY (titre_etape_id, document_id); + + +-- +-- Name: titres_etapes_entreprises_documents titres_etapes_justificatifs_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.titres_etapes_entreprises_documents + ADD CONSTRAINT titres_etapes_justificatifs_pkey PRIMARY KEY (titre_etape_id, entreprise_document_id); + + +-- +-- Name: titres_etapes titres_etapes_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.titres_etapes ADD CONSTRAINT titres_etapes_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.titres_forets - ADD CONSTRAINT titres_forets_pkey PRIMARY KEY (titre_etape_id, foret_id); + + +-- +-- Name: titres titres_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.titres ADD CONSTRAINT titres_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.titres_points - ADD CONSTRAINT titres_points_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.titres_points_references - ADD CONSTRAINT titres_points_references_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.titres_titulaires - ADD CONSTRAINT titres_titulaires_pkey PRIMARY KEY (titre_etape_id, entreprise_id); -ALTER TABLE ONLY public.activites_types__titres_types - ADD CONSTRAINT titres_types__activites_types_pkey PRIMARY KEY (titre_type_id, activite_type_id); -ALTER TABLE ONLY public.titres_types__demarches_types__etapes_types__justificatifs_t - ADD CONSTRAINT titres_types__demarches_types__etapes_types__justificatifs_t_pk PRIMARY KEY (titre_type_id, demarche_type_id, etape_type_id, document_type_id); -ALTER TABLE ONLY public.titres_types__demarches_types__etapes_types - ADD CONSTRAINT titres_types__demarches_types__etapes_types_pkey PRIMARY KEY (titre_type_id, demarche_type_id, etape_type_id); -ALTER TABLE ONLY public.titres_types - ADD CONSTRAINT titres_types_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.titres_types_types - ADD CONSTRAINT titres_types_types_pkey PRIMARY KEY (id); -ALTER TABLE ONLY public.titres_types - ADD CONSTRAINT titrestypes_domaineid_typeid_unique UNIQUE (domaine_id, type_id); + + +-- +-- Name: utilisateurs__titres utilisateurs__titres_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.utilisateurs__titres ADD CONSTRAINT utilisateurs__titres_pkey PRIMARY KEY (utilisateur_id, titre_id); + + +-- +-- Name: utilisateurs utilisateurs_email_unique; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.utilisateurs ADD CONSTRAINT utilisateurs_email_unique UNIQUE (email); + + +-- +-- Name: utilisateurs utilisateurs_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.utilisateurs ADD CONSTRAINT utilisateurs_pkey PRIMARY KEY (id); -CREATE INDEX activitestypes__documentstypes_activitetypeid_index ON public.activites_types__documents_types USING btree (activite_type_id); -CREATE INDEX activitestypes__documentstypes_documenttypeid_index ON public.activites_types__documents_types USING btree (document_type_id); -CREATE INDEX activitestypes__pays_activitetypeid_index ON public.activites_types__pays USING btree (activite_type_id); -CREATE INDEX activitestypes_frequenceid_index ON public.activites_types USING btree (frequence_id); + + +-- +-- Name: administrations__activitestypes__emails_activitetypeid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX administrations__activitestypes__emails_activitetypeid_index ON public.administrations__activites_types__emails USING btree (activite_type_id); + + +-- +-- Name: administrations__activitestypes__emails_administrationid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX administrations__activitestypes__emails_administrationid_index ON public.administrations__activites_types__emails USING btree (administration_id); -CREATE INDEX administrations__activitestypes_activitetypeid_index ON public.administrations__activites_types USING btree (activite_type_id); -CREATE INDEX administrations__activitestypes_administrationid_index ON public.administrations__activites_types USING btree (administration_id); -CREATE INDEX documents_entrepriseid_index ON public.documents USING btree (entreprise_id); -CREATE INDEX documents_titreactiviteid_index ON public.documents USING btree (titre_activite_id); -CREATE INDEX documents_titreetapeid_index ON public.documents USING btree (titre_etape_id); -CREATE INDEX documents_typeid_index ON public.documents USING btree (type_id); -CREATE INDEX entreprises__documentstypes_documenttypeid_index ON public.entreprises__documents_types USING btree (document_type_id); + + +-- +-- Name: entreprisesetablissements_entrepriseid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX entreprisesetablissements_entrepriseid_index ON public.entreprises_etablissements USING btree (entreprise_id); -CREATE INDEX etapestypes__justificatifstypes_documenttypeid_index ON public.etapes_types__justificatifs_types USING btree (document_type_id); -CREATE INDEX etapestypes__justificatifstypes_etapetypeid_index ON public.etapes_types__justificatifs_types USING btree (etape_type_id); -CREATE INDEX index_geo_communes ON public.communes_postgis USING spgist (geometry); + + +-- +-- Name: index_geo_communes; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX index_geo_communes ON public.communes USING spgist (geometry); + + +-- +-- Name: index_geo_forets; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX index_geo_forets ON public.forets_postgis USING spgist (geometry); + + +-- +-- Name: index_geo_sdom_zones; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX index_geo_sdom_zones ON public.sdom_zones_postgis USING spgist (geometry); + + +-- +-- Name: index_geo_secteurs_maritime; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX index_geo_secteurs_maritime ON public.secteurs_maritime_postgis USING spgist (geometry); + + +-- +-- Name: journaux_titreid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX journaux_titreid_index ON public.journaux USING btree (titre_id); + + +-- +-- Name: logs_utilisateurid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX logs_utilisateurid_index ON public.journaux USING btree (utilisateur_id); + + +-- +-- Name: titres__titres_titrefromid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titres__titres_titrefromid_index ON public.titres__titres USING btree (titre_from_id); + + +-- +-- Name: titres__titres_titretoid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titres__titres_titretoid_index ON public.titres__titres USING btree (titre_to_id); -CREATE INDEX titres_coordonnees_index ON public.titres USING gist (coordonnees); + + +-- +-- Name: titres_domaines_idx; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX titres_domaines_idx ON public.titres USING btree ("right"((type_id)::text, 1)); + + +-- +-- Name: titres_etapes_administrations_locales_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titres_etapes_administrations_locales_index ON public.titres_etapes USING btree (administrations_locales); + + +-- +-- Name: titres_etapes_geom_idx; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX titres_etapes_geom_idx ON public.titres_etapes USING gist (geojson4326_perimetre); + + +-- +-- Name: titres_etapes_sdom_zones_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titres_etapes_sdom_zones_index ON public.titres_etapes USING btree (sdom_zones); + + +-- +-- Name: titres_etapes_secteurs_maritime_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titres_etapes_secteurs_maritime_index ON public.titres_etapes USING btree (secteurs_maritime); + + +-- +-- Name: titres_etapes_substances_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titres_etapes_substances_index ON public.titres_etapes USING btree (substances); + + +-- +-- Name: titres_references_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titres_references_index ON public.titres USING btree ("references"); + + +-- +-- Name: titres_slug_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titres_slug_index ON public.titres USING btree (slug); + + +-- +-- Name: titres_statutid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titres_statutid_index ON public.titres USING btree (titre_statut_id); + + +-- +-- Name: titres_typeid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titres_typeid_index ON public.titres USING btree (type_id); + + +-- +-- Name: titres_types_types_idx; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX titres_types_types_idx ON public.titres USING btree ("left"((type_id)::text, 2)); + + +-- +-- Name: titresactivites_slug_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresactivites_slug_index ON public.titres_activites USING btree (slug); + + +-- +-- Name: titresactivites_statutid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresactivites_statutid_index ON public.titres_activites USING btree (activite_statut_id); + + +-- +-- Name: titresactivites_titreid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresactivites_titreid_index ON public.titres_activites USING btree (titre_id); + + +-- +-- Name: titresactivites_typeid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresactivites_typeid_index ON public.titres_activites USING btree (type_id); + + +-- +-- Name: titresactivites_utilisateurid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresactivites_utilisateurid_index ON public.titres_activites USING btree (utilisateur_id); -CREATE INDEX titresamodiataires_entrepriseid_index ON public.titres_amodiataires USING btree (entreprise_id); -CREATE INDEX titresamodiataires_titreetapeid_index ON public.titres_amodiataires USING btree (titre_etape_id); -CREATE INDEX titrescommunes_communeid_index ON public.titres_communes USING btree (commune_id); -CREATE INDEX titrescommunes_titreetapeid_index ON public.titres_communes USING btree (titre_etape_id); + + +-- +-- Name: titresdemarches_slug_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresdemarches_slug_index ON public.titres_demarches USING btree (slug); + + +-- +-- Name: titresdemarches_statutid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresdemarches_statutid_index ON public.titres_demarches USING btree (statut_id); + + +-- +-- Name: titresdemarches_titreid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresdemarches_titreid_index ON public.titres_demarches USING btree (titre_id); + + +-- +-- Name: titresdemarches_typeid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresdemarches_typeid_index ON public.titres_demarches USING btree (type_id); -CREATE INDEX titresdemarchesliens_enfanttitredemarcheid_index ON public.titres_demarches_liens USING btree (enfant_titre_demarche_id); -CREATE INDEX titresdemarchesliens_parenttitredemarcheid_index ON public.titres_demarches_liens USING btree (parent_titre_demarche_id); + + +-- +-- Name: titresetapes_slug_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresetapes_slug_index ON public.titres_etapes USING btree (slug); + + +-- +-- Name: titresetapes_statutid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresetapes_statutid_index ON public.titres_etapes USING btree (statut_id); + + +-- +-- Name: titresetapes_titredemarcheid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresetapes_titredemarcheid_index ON public.titres_etapes USING btree (titre_demarche_id); + + +-- +-- Name: titresetapes_typeid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX titresetapes_typeid_index ON public.titres_etapes USING btree (type_id); -CREATE INDEX titresetapesjustificatifs_documentid_index ON public.titres_etapes_justificatifs USING btree (document_id); -CREATE INDEX titresetapesjustificatifs_titreetapeid_index ON public.titres_etapes_justificatifs USING btree (titre_etape_id); -CREATE INDEX titresforets_foretid_index ON public.titres_forets USING btree (foret_id); -CREATE INDEX titresforets_titreetapeid_index ON public.titres_forets USING btree (titre_etape_id); -CREATE INDEX titrespoints_coordonnees_index ON public.titres_points USING gist (coordonnees); -CREATE INDEX titrespoints_slug_index ON public.titres_points USING btree (slug); -CREATE INDEX titrespoints_titreetapeid_index ON public.titres_points USING btree (titre_etape_id); -CREATE INDEX titrespointsreferences_slug_index ON public.titres_points_references USING btree (slug); -CREATE INDEX titrespointsreferences_titrepointid_index ON public.titres_points_references USING btree (titre_point_id); -CREATE INDEX titrestitulaires_entrepriseid_index ON public.titres_titulaires USING btree (entreprise_id); -CREATE INDEX titrestitulaires_titreetapeid_index ON public.titres_titulaires USING btree (titre_etape_id); -CREATE INDEX titrestypes__activitestypes_activitetypeid_index ON public.activites_types__titres_types USING btree (activite_type_id); -CREATE INDEX titrestypes__activitestypes_titretypeid_index ON public.activites_types__titres_types USING btree (titre_type_id); -CREATE INDEX titrestypes__demarchestypes__etapestypes__justificatifst_demarc ON public.titres_types__demarches_types__etapes_types__justificatifs_t USING btree (demarche_type_id); -CREATE INDEX titrestypes__demarchestypes__etapestypes__justificatifst_docume ON public.titres_types__demarches_types__etapes_types__justificatifs_t USING btree (document_type_id); -CREATE INDEX titrestypes__demarchestypes__etapestypes__justificatifst_etapet ON public.titres_types__demarches_types__etapes_types__justificatifs_t USING btree (etape_type_id); -CREATE INDEX titrestypes__demarchestypes__etapestypes__justificatifst_titret ON public.titres_types__demarches_types__etapes_types__justificatifs_t USING btree (titre_type_id); -CREATE INDEX titrestypes__demarchestypes__etapestypes_demarchetypeid_index ON public.titres_types__demarches_types__etapes_types USING btree (demarche_type_id); -CREATE INDEX titrestypes__demarchestypes__etapestypes_etapetypeid_index ON public.titres_types__demarches_types__etapes_types USING btree (etape_type_id); -CREATE INDEX titrestypes__demarchestypes__etapestypes_titretypeid_index ON public.titres_types__demarches_types__etapes_types USING btree (titre_type_id); -CREATE INDEX titrestypes_domaineid_index ON public.titres_types USING btree (domaine_id); -CREATE INDEX titrestypes_typeid_index ON public.titres_types USING btree (type_id); + + +-- +-- Name: titresetapesjustificatifs_documentid_index; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX titresetapesjustificatifs_documentid_index ON public.titres_etapes_entreprises_documents USING btree (entreprise_document_id); + + +-- +-- Name: titresetapesjustificatifs_titreetapeid_index; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX titresetapesjustificatifs_titreetapeid_index ON public.titres_etapes_entreprises_documents USING btree (titre_etape_id); + + +-- +-- Name: utilisateurs__entreprises_entrepriseid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX utilisateurs__entreprises_entrepriseid_index ON public.utilisateurs__entreprises USING btree (entreprise_id); + + +-- +-- Name: utilisateurs__entreprises_utilisateurid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX utilisateurs__entreprises_utilisateurid_index ON public.utilisateurs__entreprises USING btree (utilisateur_id); + + +-- +-- Name: utilisateurs__titres_titreid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX utilisateurs__titres_titreid_index ON public.utilisateurs__titres USING btree (titre_id); + + +-- +-- Name: utilisateurs__titres_utilisateurid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX utilisateurs__titres_utilisateurid_index ON public.utilisateurs__titres USING btree (utilisateur_id); + + +-- +-- Name: utilisateurs_administrationid_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX utilisateurs_administrationid_index ON public.utilisateurs USING btree (administration_id); + + +-- +-- Name: utilisateurs_qgis_token_index; Type: INDEX; Schema: public; Owner: - +-- + CREATE INDEX utilisateurs_qgis_token_index ON public.utilisateurs USING btree (qgis_token); -ALTER TABLE ONLY public.activites_types__documents_types - ADD CONSTRAINT activitestypes__documentstypes_activitetypeid_foreign FOREIGN KEY (activite_type_id) REFERENCES public.activites_types(id); -ALTER TABLE ONLY public.activites_types__documents_types - ADD CONSTRAINT activitestypes__documentstypes_documenttypeid_foreign FOREIGN KEY (document_type_id) REFERENCES public.documents_types(id); -ALTER TABLE ONLY public.activites_types__pays - ADD CONSTRAINT activitestypes__pays_activitetypeid_foreign FOREIGN KEY (activite_type_id) REFERENCES public.activites_types(id) ON DELETE CASCADE; -ALTER TABLE ONLY public.administrations__activites_types__emails - ADD CONSTRAINT administrations__activitestypes__emails_activitetypeid_foreign FOREIGN KEY (activite_type_id) REFERENCES public.activites_types(id) ON DELETE CASCADE; -ALTER TABLE ONLY public.administrations__activites_types__emails - ADD CONSTRAINT administrations__activitestypes__emails_administrationid_foreig FOREIGN KEY (administration_id) REFERENCES public.administrations(id) ON DELETE CASCADE; -ALTER TABLE ONLY public.administrations__activites_types - ADD CONSTRAINT administrations__activitestypes_activitetypeid_foreign FOREIGN KEY (activite_type_id) REFERENCES public.activites_types(id) ON DELETE CASCADE; -ALTER TABLE ONLY public.administrations__activites_types - ADD CONSTRAINT administrations__activitestypes_administrationid_foreign FOREIGN KEY (administration_id) REFERENCES public.administrations(id) ON DELETE CASCADE; -ALTER TABLE ONLY public.documents - ADD CONSTRAINT documents_entrepriseid_foreign FOREIGN KEY (entreprise_id) REFERENCES public.entreprises(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.documents - ADD CONSTRAINT documents_titreactiviteid_foreign FOREIGN KEY (titre_activite_id) REFERENCES public.titres_activites(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.documents - ADD CONSTRAINT documents_titreetapeid_foreign FOREIGN KEY (titre_etape_id) REFERENCES public.titres_etapes(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.documents - ADD CONSTRAINT documents_typeid_foreign FOREIGN KEY (type_id) REFERENCES public.documents_types(id); -ALTER TABLE ONLY public.entreprises__documents_types - ADD CONSTRAINT entreprises__documentstypes_documenttypeid_foreign FOREIGN KEY (document_type_id) REFERENCES public.documents_types(id); + + +-- +-- Name: activites_documents activites_documents_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.activites_documents + ADD CONSTRAINT activites_documents_fk FOREIGN KEY (activite_id) REFERENCES public.titres_activites(id); + + +-- +-- Name: entreprises_documents entreprises_documents_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.entreprises_documents + ADD CONSTRAINT entreprises_documents_fk FOREIGN KEY (entreprise_id) REFERENCES public.entreprises(id); + + +-- +-- Name: entreprises_etablissements entreprisesetablissements_entrepriseid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.entreprises_etablissements ADD CONSTRAINT entreprisesetablissements_entrepriseid_foreign FOREIGN KEY (entreprise_id) REFERENCES public.entreprises(id) ON DELETE CASCADE; -ALTER TABLE ONLY public.etapes_types__justificatifs_types - ADD CONSTRAINT etapestypes__justificatifstypes_documenttypeid_foreign FOREIGN KEY (document_type_id) REFERENCES public.entreprises__documents_types(document_type_id); -ALTER TABLE ONLY public.etapes_types__justificatifs_types - ADD CONSTRAINT etapestypes__justificatifstypes_etapetypeid_foreign FOREIGN KEY (etape_type_id) REFERENCES public.etapes_types(id) ON DELETE CASCADE; + + +-- +-- Name: etapes_documents etapes_documents_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.etapes_documents + ADD CONSTRAINT etapes_documents_fk FOREIGN KEY (etape_id) REFERENCES public.titres_etapes(id); + + +-- +-- Name: journaux journaux_titreid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.journaux ADD CONSTRAINT journaux_titreid_foreign FOREIGN KEY (titre_id) REFERENCES public.titres(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: logs logs__utilisateur_id__foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.logs + ADD CONSTRAINT logs__utilisateur_id__foreign FOREIGN KEY (utilisateur_id) REFERENCES public.utilisateurs(id); + + +-- +-- Name: perimetre_reference perimetre_reference_titre_etape_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.perimetre_reference + ADD CONSTRAINT perimetre_reference_titre_etape_fk FOREIGN KEY (titre_etape_id) REFERENCES public.titres_etapes(id); + + +-- +-- Name: titres__titres titres__titres_titrefromid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.titres__titres ADD CONSTRAINT titres__titres_titrefromid_foreign FOREIGN KEY (titre_from_id) REFERENCES public.titres(id); + + +-- +-- Name: titres__titres titres__titres_titretoid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.titres__titres ADD CONSTRAINT titres__titres_titretoid_foreign FOREIGN KEY (titre_to_id) REFERENCES public.titres(id); -ALTER TABLE ONLY public.titres - ADD CONSTRAINT titres_typeid_foreign FOREIGN KEY (type_id) REFERENCES public.titres_types(id); + + +-- +-- Name: titres_etapes_entreprises_documents titres_etapes_entreprises_documents_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.titres_etapes_entreprises_documents + ADD CONSTRAINT titres_etapes_entreprises_documents_fk FOREIGN KEY (entreprise_document_id) REFERENCES public.entreprises_documents(id); + + +-- +-- Name: titres_activites titresactivites_titreid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.titres_activites ADD CONSTRAINT titresactivites_titreid_foreign FOREIGN KEY (titre_id) REFERENCES public.titres(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.titres_activites - ADD CONSTRAINT titresactivites_typeid_foreign FOREIGN KEY (type_id) REFERENCES public.activites_types(id); + + +-- +-- Name: titres_activites titresactivites_utilisateurid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.titres_activites ADD CONSTRAINT titresactivites_utilisateurid_foreign FOREIGN KEY (utilisateur_id) REFERENCES public.utilisateurs(id); -ALTER TABLE ONLY public.titres_amodiataires - ADD CONSTRAINT titresamodiataires_entrepriseid_foreign FOREIGN KEY (entreprise_id) REFERENCES public.entreprises(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.titres_amodiataires - ADD CONSTRAINT titresamodiataires_titreetapeid_foreign FOREIGN KEY (titre_etape_id) REFERENCES public.titres_etapes(id) ON DELETE CASCADE; -ALTER TABLE ONLY public.titres_communes - ADD CONSTRAINT titrescommunes_communeid_foreign FOREIGN KEY (commune_id) REFERENCES public.communes(id); -ALTER TABLE ONLY public.titres_communes - ADD CONSTRAINT titrescommunes_titreetapeid_foreign FOREIGN KEY (titre_etape_id) REFERENCES public.titres_etapes(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: titres_demarches titresdemarches_titreid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.titres_demarches ADD CONSTRAINT titresdemarches_titreid_foreign FOREIGN KEY (titre_id) REFERENCES public.titres(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.titres_demarches - ADD CONSTRAINT titresdemarches_typeid_foreign FOREIGN KEY (type_id) REFERENCES public.demarches_types(id); -ALTER TABLE ONLY public.titres_demarches_liens - ADD CONSTRAINT titresdemarchesliens_enfanttitredemarcheid_foreign FOREIGN KEY (enfant_titre_demarche_id) REFERENCES public.titres_demarches(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.titres_demarches_liens - ADD CONSTRAINT titresdemarchesliens_parenttitredemarcheid_foreign FOREIGN KEY (parent_titre_demarche_id) REFERENCES public.titres_demarches(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: titres_etapes titresetapes_titredemarcheid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.titres_etapes ADD CONSTRAINT titresetapes_titredemarcheid_foreign FOREIGN KEY (titre_demarche_id) REFERENCES public.titres_demarches(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.titres_etapes - ADD CONSTRAINT titresetapes_typeid_foreign FOREIGN KEY (type_id) REFERENCES public.etapes_types(id); -ALTER TABLE ONLY public.titres_etapes_justificatifs - ADD CONSTRAINT titresetapesjustificatifs_documentid_foreign FOREIGN KEY (document_id) REFERENCES public.documents(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.titres_etapes_justificatifs + + +-- +-- Name: titres_etapes_entreprises_documents titresetapesjustificatifs_titreetapeid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.titres_etapes_entreprises_documents ADD CONSTRAINT titresetapesjustificatifs_titreetapeid_foreign FOREIGN KEY (titre_etape_id) REFERENCES public.titres_etapes(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.titres_forets - ADD CONSTRAINT titresforets_foretid_foreign FOREIGN KEY (foret_id) REFERENCES public.forets(id); -ALTER TABLE ONLY public.titres_forets - ADD CONSTRAINT titresforets_titreetapeid_foreign FOREIGN KEY (titre_etape_id) REFERENCES public.titres_etapes(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.titres_points - ADD CONSTRAINT titrespoints_titreetapeid_foreign FOREIGN KEY (titre_etape_id) REFERENCES public.titres_etapes(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.titres_points_references - ADD CONSTRAINT titrespointsreferences_titrepointid_foreign FOREIGN KEY (titre_point_id) REFERENCES public.titres_points(id) ON DELETE CASCADE; -ALTER TABLE ONLY public.titres_titulaires - ADD CONSTRAINT titrestitulaires_entrepriseid_foreign FOREIGN KEY (entreprise_id) REFERENCES public.entreprises(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.titres_titulaires - ADD CONSTRAINT titrestitulaires_titreetapeid_foreign FOREIGN KEY (titre_etape_id) REFERENCES public.titres_etapes(id) ON UPDATE CASCADE ON DELETE CASCADE; -ALTER TABLE ONLY public.activites_types__titres_types - ADD CONSTRAINT titrestypes__activitestypes_activitetypeid_foreign FOREIGN KEY (activite_type_id) REFERENCES public.activites_types(id); -ALTER TABLE ONLY public.activites_types__titres_types - ADD CONSTRAINT titrestypes__activitestypes_titretypeid_foreign FOREIGN KEY (titre_type_id) REFERENCES public.titres_types(id); -ALTER TABLE ONLY public.titres_types__demarches_types__etapes_types__justificatifs_t - ADD CONSTRAINT titrestypes__demarchestypes__etapestypes__justificatifst_docume FOREIGN KEY (document_type_id) REFERENCES public.documents_types(id); -ALTER TABLE ONLY public.titres_types__demarches_types__etapes_types__justificatifs_t - ADD CONSTRAINT titrestypes__demarchestypes__etapestypes__justificatifst_titret FOREIGN KEY (titre_type_id, demarche_type_id, etape_type_id) REFERENCES public.titres_types__demarches_types__etapes_types(titre_type_id, demarche_type_id, etape_type_id); -ALTER TABLE ONLY public.titres_types__demarches_types__etapes_types - ADD CONSTRAINT titrestypes__demarchestypes__etapestypes_demarchetypeid_foreign FOREIGN KEY (demarche_type_id) REFERENCES public.demarches_types(id); -ALTER TABLE ONLY public.titres_types__demarches_types__etapes_types - ADD CONSTRAINT titrestypes__demarchestypes__etapestypes_etapetypeid_foreign FOREIGN KEY (etape_type_id) REFERENCES public.etapes_types(id); -ALTER TABLE ONLY public.titres_types__demarches_types__etapes_types - ADD CONSTRAINT titrestypes__demarchestypes__etapestypes_titretypeid_foreign FOREIGN KEY (titre_type_id) REFERENCES public.titres_types(id); -ALTER TABLE ONLY public.titres_types - ADD CONSTRAINT titrestypes_domaineid_foreign FOREIGN KEY (domaine_id) REFERENCES public.domaines(id); -ALTER TABLE ONLY public.titres_types - ADD CONSTRAINT titrestypes_typeid_foreign FOREIGN KEY (type_id) REFERENCES public.titres_types_types(id); + + +-- +-- Name: utilisateurs__entreprises utilisateurs__entreprises_entrepriseid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.utilisateurs__entreprises ADD CONSTRAINT utilisateurs__entreprises_entrepriseid_foreign FOREIGN KEY (entreprise_id) REFERENCES public.entreprises(id) ON DELETE CASCADE; + + +-- +-- Name: utilisateurs__entreprises utilisateurs__entreprises_utilisateurid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.utilisateurs__entreprises ADD CONSTRAINT utilisateurs__entreprises_utilisateurid_foreign FOREIGN KEY (utilisateur_id) REFERENCES public.utilisateurs(id) ON DELETE CASCADE; + + +-- +-- Name: utilisateurs__titres utilisateurs__titres_titreid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.utilisateurs__titres ADD CONSTRAINT utilisateurs__titres_titreid_foreign FOREIGN KEY (titre_id) REFERENCES public.titres(id) ON DELETE CASCADE; + + +-- +-- Name: utilisateurs__titres utilisateurs__titres_utilisateurid_foreign; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + ALTER TABLE ONLY public.utilisateurs__titres ADD CONSTRAINT utilisateurs__titres_utilisateurid_foreign FOREIGN KEY (utilisateur_id) REFERENCES public.utilisateurs(id) ON DELETE CASCADE; -ALTER TABLE ONLY public.utilisateurs - ADD CONSTRAINT utilisateurs_administrationid_foreign FOREIGN KEY (administration_id) REFERENCES public.administrations(id); + + +-- +-- PostgreSQL database dump complete +-- diff --git a/packages/api/src/knex/migrations/20230425155734_titre-slug-not-nullable.ts b/packages/api/src/knex/migrations/20230425155734_titre-slug-not-nullable.ts deleted file mode 100644 index 77cc8c1158615e0aa367ffb0d5c95f237122f748..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20230425155734_titre-slug-not-nullable.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('alter table titres alter column slug set not null;') - await knex.raw('ALTER TABLE titres_activites ALTER COLUMN "date" SET NOT NULL;') - await knex.raw('ALTER TABLE public.titres_activites ALTER COLUMN annee SET NOT NULL;') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20230503084344_titre-activites-sections-options.ts b/packages/api/src/knex/migrations/20230503084344_titre-activites-sections-options.ts deleted file mode 100644 index bc2f30225d5c133286f99d96ac8caa2024eaf600..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20230503084344_titre-activites-sections-options.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - const activitesSections: { - rows: { - id: string - sections: { elements?: { valeurs?: any[]; options?: any[] }[] }[] - }[] - } = await knex.raw("select id, sections from titres_activites where sections::text like '%valeurs%' ") - - // Renomme toutes les clés « valeurs » en « options » - for (const activitesSection of activitesSections.rows) { - const newSections = [] - - for (const section of activitesSection.sections) { - if (section.elements) { - for (const element of section.elements) { - if (element.valeurs) { - element.options = [...element.valeurs] - delete element.valeurs - } - } - } - - newSections.push(section) - } - await knex.raw('update titres_activites set sections = ? where id = ?', [newSections, activitesSection.id]) - } - - const etapesSections: { - rows: { - id: string - decisions_annexes_sections: { elements?: { valeurs?: any[]; options?: any[] }[] }[] - }[] - } = await knex.raw("select id, decisions_annexes_sections from titres_etapes where decisions_annexes_sections::text like '%valeurs%' ") - - for (const etapeSection of etapesSections.rows) { - const newSections = [] - - for (const section of etapeSection.decisions_annexes_sections) { - if (section.elements) { - for (const element of section.elements) { - if (element.valeurs) { - element.options = [...element.valeurs] - delete element.valeurs - } - } - } - - newSections.push(section) - } - await knex.raw('update titres_etapes set decisions_annexes_sections = ? where id = ?', [newSections, etapeSection.id]) - } -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20230503125136_delete-type-sections.ts b/packages/api/src/knex/migrations/20230503125136_delete-type-sections.ts deleted file mode 100644 index 90ba34de56de4132e91a9af9ffbb933374196d3c..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20230503125136_delete-type-sections.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('alter table activites_types drop column sections;') - await knex.raw('alter table etapes_types drop column sections;') - await knex.raw('alter table titres_types__demarches_types__etapes_types drop column sections;') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20230510144301_improve-documents.ts b/packages/api/src/knex/migrations/20230510144301_improve-documents.ts deleted file mode 100644 index 6ba4a2c0eb2908afa7ed7425a22d0b9579ea4cd7..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20230510144301_improve-documents.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw("update documents set description='' where description is null") - await knex.raw('ALTER TABLE documents ALTER COLUMN description SET NOT NULL') - await knex.raw("ALTER TABLE documents ALTER COLUMN description SET DEFAULT ''") -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20230605080141_refactor-communes-forets.ts b/packages/api/src/knex/migrations/20230605080141_refactor-communes-forets.ts deleted file mode 100644 index 9c1ea5f2afbbf303409a173672538eadc57b0ef3..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20230605080141_refactor-communes-forets.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex): Promise<void> => { - await knex.raw('alter table communes drop column departement_id') - await knex.raw("alter table titres_etapes add column forets jsonb DEFAULT '[]'::jsonb NOT NULL") - await knex.raw("alter table titres_etapes add column communes jsonb DEFAULT '[]'::jsonb NOT NULL") - - const forets = await knex.select().from('titres_forets') - - const foretsByTitreEtapes = forets.reduce((acc, foret) => { - // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions - if (!acc[foret.titreEtapeId]) { - acc[foret.titreEtapeId] = [] - } - acc[foret.titreEtapeId].push(foret.foretId) - - return acc - }, {}) - - for (const titreEtapeId in foretsByTitreEtapes) { - await knex('titres_etapes') - .update({ forets: JSON.stringify(foretsByTitreEtapes[titreEtapeId].toSorted()) }) - .where('id', titreEtapeId) - } - - const communes = await knex.select().from('titres_communes') - - const communesByTitreEtapes = communes.reduce((acc, commune) => { - // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions - if (!acc[commune.titreEtapeId]) { - acc[commune.titreEtapeId] = [] - } - acc[commune.titreEtapeId].push({ id: commune.communeId, surface: commune.surface }) - - return acc - }, {}) - - for (const titreEtapeId in communesByTitreEtapes) { - await knex('titres_etapes') - .update({ communes: JSON.stringify(communesByTitreEtapes[titreEtapeId].toSorted((a: any, b: any) => a.id.localeCompare(b.id))) }) - .where('id', titreEtapeId) - } - await knex.raw('drop table titres_forets') - await knex.raw('drop table titres_communes') - await knex.raw('drop table forets') -} - -export const down = (): void => {} diff --git a/packages/api/src/knex/migrations/20230607092129_etape-ordre-not-null.ts b/packages/api/src/knex/migrations/20230607092129_etape-ordre-not-null.ts deleted file mode 100644 index f2adbb4aae92d884e36cb7a1fd651b64d161c047..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20230607092129_etape-ordre-not-null.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('ALTER TABLE titres_etapes ALTER COLUMN ordre SET NOT NULL') - await knex.raw('ALTER TABLE titres_etapes ALTER COLUMN ordre SET DEFAULT 0') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20230613075149_refactor-justificatifs.ts b/packages/api/src/knex/migrations/20230613075149_refactor-justificatifs.ts deleted file mode 100644 index d549d27247020116bb98ddc9ed9fbf797164a9af..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20230613075149_refactor-justificatifs.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.schema.dropTable('titres_demarches_liens') - await knex.schema.dropTable('titres_types__demarches_types__etapes_types__justificatifs_t') - await knex.schema.dropTable('etapes_types__justificatifs_types') - await knex.schema.dropTable('entreprises__documents_types') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20230613133254_extract-entreprises-documents.ts b/packages/api/src/knex/migrations/20230613133254_extract-entreprises-documents.ts deleted file mode 100644 index 2472f1ef0c7c01e0af52bdca0a6e25bdb72b9c21..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20230613133254_extract-entreprises-documents.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw( - 'CREATE TABLE entreprises_documents (id character varying(255) NOT NULL, entreprise_document_type_id character varying(3) NOT NULL, date character varying(10) NOT NULL, entreprise_id character varying(64), description character varying(1024))' - ) - await knex.raw('ALTER TABLE entreprises_documents ADD CONSTRAINT entreprises_documents_pk PRIMARY KEY (id)') - await knex.raw('ALTER TABLE entreprises_documents ADD CONSTRAINT entreprises_documents_fk FOREIGN KEY (entreprise_id) REFERENCES entreprises(id);') - - await knex.raw( - 'insert into entreprises_documents (id, entreprise_document_type_id, date, entreprise_id, description) (SELECT id, type_id as entreprise_document_type_id, date, entreprise_id, description from documents where entreprise_id is not null)' - ) - - await knex.raw('alter table titres_etapes_justificatifs drop constraint "titresetapesjustificatifs_documentid_foreign"') - await knex.raw('ALTER TABLE titres_etapes_justificatifs RENAME TO titres_etapes_entreprises_documents') - await knex.raw('ALTER TABLE titres_etapes_entreprises_documents RENAME COLUMN document_id TO entreprise_document_id') - await knex.raw('ALTER TABLE titres_etapes_entreprises_documents ADD CONSTRAINT titres_etapes_entreprises_documents_fk FOREIGN KEY (entreprise_document_id) REFERENCES entreprises_documents(id);') - - await knex.raw('delete from documents where entreprise_id is not null') - - await knex.raw('ALTER TABLE documents DROP CONSTRAINT documents_entrepriseid_foreign') - - return knex.raw('ALTER TABLE documents DROP COLUMN entreprise_id') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20230823090330_delete-activiteType-titreType.ts b/packages/api/src/knex/migrations/20230823090330_delete-activiteType-titreType.ts deleted file mode 100644 index a0a9fd6c890b54b2a84f7ff25b01f38c586a1eac..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20230823090330_delete-activiteType-titreType.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.schema.dropTable('activites_types__titres_types') - - return knex.schema.dropTable('activites_types__pays') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20230824092724_add-entreprise-document-file.ts b/packages/api/src/knex/migrations/20230824092724_add-entreprise-document-file.ts deleted file mode 100644 index dcfea06f04dcd9f8aaf7a9a4ca4070de35df8b2c..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20230824092724_add-entreprise-document-file.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - return knex.raw('alter table entreprises_documents add largeobject_id oid;') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20230829151032_add-activite-document.ts b/packages/api/src/knex/migrations/20230829151032_add-activite-document.ts deleted file mode 100644 index 7040657eaef09189706c4f6e0855733edae1a466..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20230829151032_add-activite-document.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw( - 'CREATE TABLE activites_documents (id character varying(255) NOT NULL, activite_document_type_id character varying(3) NOT NULL, date character varying(10) NOT NULL, activite_id character varying(255), description character varying(1024), largeobject_id oid)' - ) - await knex.raw('ALTER TABLE activites_documents ADD CONSTRAINT activites_documents_pk PRIMARY KEY (id)') - await knex.raw('ALTER TABLE activites_documents ADD CONSTRAINT activites_documents_fk FOREIGN KEY (activite_id) REFERENCES titres_activites(id);') - - await knex.raw( - 'insert into activites_documents (id, activite_document_type_id, date, activite_id, description) (SELECT id, type_id as activite_document_type_id, date, titre_activite_id, description from documents where titre_activite_id is not null)' - ) - - await knex.raw('delete from documents where titre_activite_id is not null') - - await knex.schema.dropTable('activites_types__documents_types') - await knex.schema.dropTable('administrations__activites_types') - - await knex.raw('ALTER TABLE documents DROP CONSTRAINT documents_titreactiviteid_foreign') - - await knex.raw('ALTER TABLE documents DROP COLUMN titre_activite_id') - - await knex.raw('ALTER TABLE entreprises_documents ALTER COLUMN largeobject_id SET NOT NULL') - - await knex.raw('ALTER TABLE titres_activites ALTER COLUMN sections SET NOT NULL') - await knex.raw('ALTER TABLE titres_activites ALTER COLUMN slug SET NOT NULL') - await knex.raw('ALTER TABLE titres_activites ALTER COLUMN periode_id SET NOT NULL') - - await knex.raw('UPDATE titres_activites set suppression = false where suppression is null') - await knex.raw('ALTER TABLE titres_activites ALTER COLUMN suppression SET DEFAULT false') - await knex.raw('ALTER TABLE titres_activites ALTER COLUMN suppression SET NOT NULL') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20230926083529_add-index-on-left-right.ts b/packages/api/src/knex/migrations/20230926083529_add-index-on-left-right.ts deleted file mode 100644 index 0b011470e90024c8f7ef11596194ec1670f714c9..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20230926083529_add-index-on-left-right.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('CREATE INDEX titres_domaines_idx ON titres (right(type_id, 1))') - await knex.raw('CREATE INDEX titres_types_types_idx ON titres (left(type_id, 2))') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20231012073429_cleanup-documents.ts b/packages/api/src/knex/migrations/20231012073429_cleanup-documents.ts deleted file mode 100644 index e6f9f29d82661e334c23fec51ff464409c64cb63..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20231012073429_cleanup-documents.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('alter table documents drop column url') - await knex.raw('alter table documents drop column uri') - await knex.raw('alter table documents drop column nor') - await knex.raw('alter table documents drop column jorf') - - await knex.raw('ALTER TABLE activites_documents ALTER COLUMN largeobject_id SET NOT NULL') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20231023145523_add-keycloak-id-to-utilisateurs.ts b/packages/api/src/knex/migrations/20231023145523_add-keycloak-id-to-utilisateurs.ts deleted file mode 100644 index 781b788240c50b80eec121fdba0c4b16b638a618..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20231023145523_add-keycloak-id-to-utilisateurs.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - return knex.raw('alter table utilisateurs add keycloak_id varchar(255);') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20231108145556_set-some-boolean-not-null.ts b/packages/api/src/knex/migrations/20231108145556_set-some-boolean-not-null.ts deleted file mode 100644 index e9cf50d568063d43566d9fab195944ac8382e352..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20231108145556_set-some-boolean-not-null.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('update documents set public_lecture = false where public_lecture is null') - await knex.raw('update documents set entreprises_lecture = false where entreprises_lecture is null') - await knex.raw('ALTER TABLE documents ALTER COLUMN public_lecture SET default false') - await knex.raw('ALTER TABLE documents ALTER COLUMN public_lecture SET NOT NULL') - - await knex.raw('ALTER TABLE documents ALTER COLUMN entreprises_lecture SET default false') - await knex.raw('ALTER TABLE documents ALTER COLUMN entreprises_lecture SET NOT NULL') - - await knex.raw('update titres_demarches set public_lecture = false where public_lecture is null') - await knex.raw('update titres_demarches set entreprises_lecture = false where entreprises_lecture is null') - await knex.raw('ALTER TABLE titres_demarches ALTER COLUMN public_lecture SET default false') - await knex.raw('ALTER TABLE titres_demarches ALTER COLUMN public_lecture SET NOT NULL') - - await knex.raw('ALTER TABLE titres_demarches ALTER COLUMN entreprises_lecture SET default false') - await knex.raw('ALTER TABLE titres_demarches ALTER COLUMN entreprises_lecture SET NOT NULL') - - await knex.raw('update titres set public_lecture = false where public_lecture is null') - await knex.raw('update titres set entreprises_lecture = false where entreprises_lecture is null') - await knex.raw('ALTER TABLE titres ALTER COLUMN public_lecture SET default false') - await knex.raw('ALTER TABLE titres ALTER COLUMN public_lecture SET NOT NULL') - - await knex.raw('ALTER TABLE titres ALTER COLUMN entreprises_lecture SET default false') - await knex.raw('ALTER TABLE titres ALTER COLUMN entreprises_lecture SET NOT NULL') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20231116101246_set-keycloak-id-not-null.ts b/packages/api/src/knex/migrations/20231116101246_set-keycloak-id-not-null.ts deleted file mode 100644 index 7efc76c47979d176bf03e01fc5776d65c8e382cc..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20231116101246_set-keycloak-id-not-null.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('alter table utilisateurs add constraint check_keycloak_id_not_null check (email is null or keycloak_id is not null);') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240110085800_remove-tde.ts b/packages/api/src/knex/migrations/20240110085800_remove-tde.ts deleted file mode 100644 index 07db9fc8c065d8fb401f836e3ef89454e1997596..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240110085800_remove-tde.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.schema.dropTable('titres_types__demarches_types__etapes_types') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240110145011_ajoute-defaut-titres-etapes.ts b/packages/api/src/knex/migrations/20240110145011_ajoute-defaut-titres-etapes.ts deleted file mode 100644 index 8bca029e94bbf008896158099be535e35a9af32d..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240110145011_ajoute-defaut-titres-etapes.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw("ALTER TABLE titres_etapes ALTER COLUMN sdom_zones SET DEFAULT '[]'::jsonb") - await knex.raw("update titres_etapes set sdom_zones='[]'::jsonb where sdom_zones is null") - await knex.raw('ALTER TABLE titres_etapes ALTER COLUMN sdom_zones SET NOT NULL') - - await knex.raw("ALTER TABLE titres_etapes ALTER COLUMN administrations_locales SET DEFAULT '[]'::jsonb") - await knex.raw("update titres_etapes set administrations_locales='[]'::jsonb where administrations_locales is null") - await knex.raw('ALTER TABLE titres_etapes ALTER COLUMN administrations_locales SET NOT NULL') - - await knex.raw("ALTER TABLE titres_etapes ALTER COLUMN secteurs_maritime SET DEFAULT '[]'::jsonb") - await knex.raw("update titres_etapes set secteurs_maritime='[]'::jsonb where secteurs_maritime is null") - await knex.raw('ALTER TABLE titres_etapes ALTER COLUMN secteurs_maritime SET NOT NULL') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240110161016_migrate-incertitudes-in-notes.ts b/packages/api/src/knex/migrations/20240110161016_migrate-incertitudes-in-notes.ts deleted file mode 100644 index fb37d03be0c4fb803da4f418e3068ad58455834c..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240110161016_migrate-incertitudes-in-notes.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { EtapeId } from 'camino-common/src/etape' -import { Knex } from 'knex' - -const translateKeys: Record<string, string> = { - date: 'Date', - points: 'Périmètre', - substances: 'Substances', - dateFin: 'Date d’échéance', - surface: 'Surface', - titulaires: 'Titulaires', - dateDebut: 'Date de début', - duree: 'Durée', -} - -const filterOutKeys = ['surface'] as const -const doIt = async (knex: Knex) => { - const values: { rows: { id: EtapeId; incertitudes: Record<string, true> }[] } = await knex.raw('select id, incertitudes from titres_etapes where incertitudes is not null') - for (const value of values.rows) { - const text = `Incertitudes: ${Object.keys(value.incertitudes) - .filter(v => !filterOutKeys.includes(v)) - .map(val => ` ${translateKeys[val]}`) - .join(',')}.` - await knex.raw('update titres_etapes set notes = ? where id = ?', [text, value.id]) - } -} - -export const up = async (knex: Knex) => { - await knex.raw('alter table titres_etapes add notes text;') - await doIt(knex) - await knex.raw('alter table titres_etapes drop column incertitudes;') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240115132944_set-titre-demarches-ordre-not-null.ts b/packages/api/src/knex/migrations/20240115132944_set-titre-demarches-ordre-not-null.ts deleted file mode 100644 index d84eea5242e08b0cabc0748ae0b82e61478c2767..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240115132944_set-titre-demarches-ordre-not-null.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('ALTER TABLE titres_demarches ALTER COLUMN ordre SET NOT NULL') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240116142111_migrate-point-to-geojson.ts b/packages/api/src/knex/migrations/20240116142111_migrate-point-to-geojson.ts deleted file mode 100644 index 8958a220b1aa24f75e3662ab81ea867f93d05282..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240116142111_migrate-point-to-geojson.ts +++ /dev/null @@ -1,107 +0,0 @@ -/* eslint-disable sql/no-unsafe-query */ -import { Knex } from 'knex' -import { EtapeId } from 'camino-common/src/etape' -import { isNotNullNorUndefined, isNotNullNorUndefinedNorEmpty } from 'camino-common/src/typescript-tools' -import { FeatureMultiPolygon } from 'camino-common/src/perimetre' -import { TitreId } from 'camino-common/src/validators/titres' - -const etapesToNotMigrate = ['0NmsqYGVQJYKhFY22Ltt4NBV'] - -interface IGeoJson { - type: string - geometry?: NonNullable<unknown> | null - bbox?: number[] | null - properties: NonNullable<unknown> | null - features?: IGeoJson[] | null -} - -const geojsonFeatureMultiPolygon = (_points: any[]): FeatureMultiPolygon => { - throw new Error('Migration obsolète suite à la suppression de geojson-rewind du projet') -} - -// convertit des points -// en un geojson de type 'FeatureCollection' de 'Points' -const geojsonFeatureCollectionPoints = (points: any[]): IGeoJson | null => { - if (points.some(({ nom, description }) => (isNotNullNorUndefined(nom) && nom !== '') || (isNotNullNorUndefined(description) && description !== ''))) { - return { - type: 'FeatureCollection', - properties: {}, - features: points.map(p => ({ - type: 'Feature', - geometry: { - type: 'Point', - coordinates: [p.coordonnees.x, p.coordonnees.y], - }, - properties: { - nom: p.nom, - description: p.description, - }, - })), - } - } - - return null -} - -export const up = async (knex: Knex) => { - await knex.raw('alter table titres_etapes add column geojson4326_perimetre public.geometry(MultiPolygon,4326)') - await knex.raw('alter table titres_etapes add column geojson4326_points JSONB') - await knex.raw('CREATE INDEX titres_etapes_geom_idx ON titres_etapes USING GIST (geojson4326_perimetre)') - - await knex.raw( - 'CREATE TABLE perimetre_reference (titre_etape_id character varying(255) NOT NULL, geo_systeme character varying(255) NOT NULL, opposable boolean default false, geojson_perimetre JSONB)' - ) - await knex.raw('ALTER TABLE perimetre_reference ADD CONSTRAINT perimetre_reference_pk PRIMARY KEY (titre_etape_id, geo_systeme)') - await knex.raw('ALTER TABLE perimetre_reference ADD CONSTRAINT perimetre_reference_titre_etape_fk FOREIGN KEY (titre_etape_id) REFERENCES titres_etapes(id)') - - const etapes: { rows: { id: EtapeId; heritage_props: { points?: any; surface?: any; perimetre?: any } | null }[] } = await knex.raw('select * from titres_etapes') - - for (const etape of etapes.rows) { - if (!etapesToNotMigrate.includes(etape.id)) { - const points: { rows: any[] } = await knex.raw('select * from titres_points where titre_etape_id = ? order by groupe, contour, point', [etape.id]) - - if (isNotNullNorUndefinedNorEmpty(points.rows)) { - const geojsonPoints = geojsonFeatureCollectionPoints(points.rows) - - if (geojsonPoints !== null) { - await knex.raw( - `update titres_etapes set geojson4326_perimetre = ST_SetSRID(ST_GeomFromGeoJSON('${JSON.stringify( - geojsonFeatureMultiPolygon(points.rows).geometry - )}'), 4326), geojson4326_points = ?::jsonb where id = ?`, - [JSON.stringify(geojsonPoints), etape.id] - ) - } else { - await knex.raw(`update titres_etapes set geojson4326_perimetre = ST_SetSRID(ST_GeomFromGeoJSON('${JSON.stringify(geojsonFeatureMultiPolygon(points.rows).geometry)}'), 4326) where id = ?`, [ - etape.id, - ]) - } - } - } - - if (isNotNullNorUndefined(etape.heritage_props)) { - delete etape.heritage_props.surface - - if ('points' in etape.heritage_props) { - etape.heritage_props.perimetre = etape.heritage_props.points - delete etape.heritage_props.points - } - - await knex.raw(`update titres_etapes set heritage_props = ? where id = ?`, [etape.heritage_props, etape.id]) - } - } - - const titres: { rows: { id: TitreId; props_titre_etapes_ids: { surface: any } | null }[] } = await knex.raw('select * from titres') - for (const titre of titres.rows) { - if (isNotNullNorUndefined(titre.props_titre_etapes_ids)) { - delete titre.props_titre_etapes_ids.surface - - await knex.raw(`update titres set props_titre_etapes_ids = ? where id = ?`, [titre.props_titre_etapes_ids, titre.id]) - } - } - - await knex.raw('alter table titres drop column coordonnees') - await knex.raw('drop table titres_points_references') - await knex.raw('drop table titres_points') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240206163907_delete_activites_types.ts b/packages/api/src/knex/migrations/20240206163907_delete_activites_types.ts deleted file mode 100644 index 2c9d74f4b1f58bd81e24483047c6e877e965370e..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240206163907_delete_activites_types.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('ALTER TABLE titres_activites DROP CONSTRAINT titresactivites_typeid_foreign') - - await knex.raw('ALTER TABLE administrations__activites_types__emails DROP CONSTRAINT administrations__activitestypes__emails_activitetypeid_foreign') - - return knex.schema.dropTable('activites_types') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240207141639_delete_administrations.ts b/packages/api/src/knex/migrations/20240207141639_delete_administrations.ts deleted file mode 100644 index 7b40df416acb3a0a299d853a060f397ffda9126d..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240207141639_delete_administrations.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('ALTER TABLE administrations__activites_types__emails DROP CONSTRAINT administrations__activitestypes__emails_administrationid_foreig') - await knex.raw('ALTER TABLE utilisateurs DROP CONSTRAINT utilisateurs_administrationid_foreign') - - return knex.schema.dropTable('administrations') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240213132554_delete_demarche_type.ts b/packages/api/src/knex/migrations/20240213132554_delete_demarche_type.ts deleted file mode 100644 index 288e73652f23833fd46087acf63a7666b337cc2e..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240213132554_delete_demarche_type.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('ALTER TABLE titres_demarches DROP CONSTRAINT titresdemarches_typeid_foreign') - - return knex.schema.dropTable('demarches_types') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240215154436_delete_domaine.ts b/packages/api/src/knex/migrations/20240215154436_delete_domaine.ts deleted file mode 100644 index a425e62e19b5d8ad623248b90df2271408a5c841..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240215154436_delete_domaine.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('ALTER TABLE titres_types DROP CONSTRAINT titrestypes_domaineid_foreign') - - return knex.schema.dropTable('domaines') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240219143213_delete_cache.ts b/packages/api/src/knex/migrations/20240219143213_delete_cache.ts deleted file mode 100644 index 6eb71d1034b5cf24fb03781934a53a797b6a3a59..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240219143213_delete_cache.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - return knex.schema.dropTable('caches') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240219165521_delete_titre-type.ts b/packages/api/src/knex/migrations/20240219165521_delete_titre-type.ts deleted file mode 100644 index 7115623abe46916257470e1a48be4c8ec091b528..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240219165521_delete_titre-type.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('ALTER TABLE titres DROP CONSTRAINT titres_typeid_foreign') - await knex.raw('ALTER TABLE titres DROP column contenus_titre_etapes_ids') - await knex.schema.dropTable('titres_types') - - return knex.schema.dropTable('titres_types_types') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240220105343_delete_etape-type.ts b/packages/api/src/knex/migrations/20240220105343_delete_etape-type.ts deleted file mode 100644 index ae543b5dc4c6583be06b57cbeb1bb97fea5e4c49..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240220105343_delete_etape-type.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('ALTER TABLE titres_etapes DROP CONSTRAINT titresetapes_typeid_foreign') - - return knex.schema.dropTable('etapes_types') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240220154838_delete_document-type.ts b/packages/api/src/knex/migrations/20240220154838_delete_document-type.ts deleted file mode 100644 index 4aa9a9c8335b1819fefaeca62579d221978c386f..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240220154838_delete_document-type.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('ALTER TABLE documents DROP CONSTRAINT documents_typeid_foreign') - - return knex.schema.dropTable('documents_types') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240221154230_delete_titre-entreprise-lecture.ts b/packages/api/src/knex/migrations/20240221154230_delete_titre-entreprise-lecture.ts deleted file mode 100644 index 4fd7cd5ae096e833d7689316c3de14fd762ac26d..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240221154230_delete_titre-entreprise-lecture.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - return knex.raw('ALTER TABLE titres DROP column entreprises_lecture') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240226171415_add-geojson-origine.ts b/packages/api/src/knex/migrations/20240226171415_add-geojson-origine.ts deleted file mode 100644 index f2e058dceed8faa075cf2c4c29a7773e43e07d33..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240226171415_add-geojson-origine.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('alter table titres_etapes add column geojson_origine_points JSONB') - await knex.raw('alter table titres_etapes add column geojson_origine_perimetre JSONB') - await knex.raw('alter table titres_etapes add column geojson_origine_geo_systeme_id varchar') - - await knex.raw( - 'update titres_etapes set geojson_origine_perimetre = concat(\'{"type": "Feature", "properties": {}, "geometry": \', ST_AsGeoJSON(geojson4326_perimetre)::text, \'}\')::json where geojson4326_perimetre is not null' - ) - await knex.raw("update titres_etapes set geojson_origine_geo_systeme_id = '4326' where geojson4326_perimetre is not null") - await knex.raw('update titres_etapes set geojson_origine_points = geojson4326_points where geojson4326_points is not null') - - await knex.raw( - 'ALTER TABLE titres_etapes ADD CONSTRAINT perimetre_origine_not_null_when_perimetre_4326_not_null CHECK (("geojson4326_perimetre", "geojson_origine_geo_systeme_id", "geojson_origine_perimetre") IS NULL OR ("geojson4326_perimetre", "geojson_origine_geo_systeme_id", "geojson_origine_perimetre") IS NOT NULL)' - ) - - await knex.raw( - 'ALTER TABLE titres_etapes ADD CONSTRAINT points_origine_not_null_when_points_4326_not_null CHECK (("geojson4326_points", "geojson_origine_points") IS NULL OR ("geojson4326_points", "geojson_origine_points") IS NOT NULL)' - ) -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240312103907_add_titres-etapes_geojson_forage.ts b/packages/api/src/knex/migrations/20240312103907_add_titres-etapes_geojson_forage.ts deleted file mode 100644 index 3fbb99df520c11af39ab9e0ef4db2b6751d868bf..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240312103907_add_titres-etapes_geojson_forage.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('alter table titres_etapes add column geojson4326_forages JSONB') - await knex.raw('alter table titres_etapes add column geojson_origine_forages JSONB') - - await knex.raw( - 'ALTER TABLE titres_etapes ADD CONSTRAINT forages_origine_not_null_when_forages4326_not_null CHECK (("geojson4326_forages", "geojson_origine_forages") IS NULL OR ("geojson4326_forages", "geojson_origine_forages") IS NOT NULL)' - ) -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240320132136_add_etape-document.ts b/packages/api/src/knex/migrations/20240320132136_add_etape-document.ts deleted file mode 100644 index 778378c25abd57cdec95f92349bf487f2f5b7ba1..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240320132136_add_etape-document.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable sql/no-unsafe-query */ -import { EtapeId } from 'camino-common/src/etape' -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw( - 'CREATE TABLE etapes_documents (id character varying(255) NOT NULL, etape_document_type_id character varying(3) NOT NULL, etape_id character varying(255) NOT NULL, description character varying(1024), public_lecture boolean NOT NULL, entreprises_lecture boolean NOT NULL, largeobject_id oid)' - ) - await knex.raw('ALTER TABLE etapes_documents ADD CONSTRAINT etapes_documents_pk PRIMARY KEY (id)') - await knex.raw('ALTER TABLE etapes_documents ADD CONSTRAINT etapes_documents_fk FOREIGN KEY (etape_id) REFERENCES titres_etapes(id);') - - await knex.raw( - 'insert into etapes_documents (id, etape_document_type_id, etape_id, description, public_lecture, entreprises_lecture) (SELECT id, type_id as etape_document_type_id, titre_etape_id, description, public_lecture, entreprises_lecture from documents where titre_etape_id is not null and fichier is not null and fichier_type_id is not null)' - ) - - const result: { rows: { titre_etape_id: EtapeId; description: string }[] } = await knex.raw( - 'SELECT titre_etape_id, description from documents where titre_etape_id is null or fichier is null or fichier_type_id is null' - ) - - for (const document of result.rows) { - await knex.raw(`update titres_etapes set notes = concat(notes, '${document.description.replace(/'/g, '’')}') where id = '${document.titre_etape_id}'`) - } - - await knex.raw('ALTER TABLE titres_etapes DROP column decisions_annexes_sections') - await knex.raw('ALTER TABLE titres_etapes DROP column decisions_annexes_contenu') - - await knex.schema.dropTable('documents') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240425151111_delete_operateur_and_update_constraints_on_entreprises.ts b/packages/api/src/knex/migrations/20240425151111_delete_operateur_and_update_constraints_on_entreprises.ts deleted file mode 100644 index af7e2c87341ef717e9b78c45eb3c4f0bbdff676e..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240425151111_delete_operateur_and_update_constraints_on_entreprises.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { EntrepriseId } from 'camino-common/src/entreprise' -import { EtapeId } from 'camino-common/src/etape' -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - // migrer titres_titulaires et titres_amodiataires vers titres_etapes - await knex.raw("ALTER TABLE titres_etapes ADD COLUMN titulaire_ids JSONB DEFAULT '[]'::jsonb NOT NULL") - await knex.raw("ALTER TABLE titres_etapes ADD COLUMN amodiataire_ids JSONB DEFAULT '[]'::jsonb NOT NULL") - - const titulaires: { rows: { titre_etape_id: EtapeId; entreprise_id: EntrepriseId }[] } = await knex.raw('SELECT titre_etape_id, entreprise_id FROM titres_titulaires') - const titulairesByEtapeId = titulaires.rows.reduce( - (acc, { titre_etape_id, entreprise_id }) => { - if (acc[titre_etape_id] === undefined) { - acc[titre_etape_id] = [] - } - - acc[titre_etape_id].push(entreprise_id) - - return acc - }, - {} as Record<string, string[]> - ) - - for (const titreEtapeId in titulairesByEtapeId) { - await knex.raw('UPDATE titres_etapes SET titulaire_ids = ? WHERE id = ?', [JSON.stringify(titulairesByEtapeId[titreEtapeId]), titreEtapeId]) - } - - const amodiataires: { rows: { titre_etape_id: EtapeId; entreprise_id: EntrepriseId }[] } = await knex.raw('SELECT titre_etape_id, entreprise_id FROM titres_amodiataires') - const amodiatairesByEtapeId = amodiataires.rows.reduce( - (acc, { titre_etape_id, entreprise_id }) => { - if (acc[titre_etape_id] === undefined) { - acc[titre_etape_id] = [] - } - - acc[titre_etape_id].push(entreprise_id) - - return acc - }, - {} as Record<string, string[]> - ) - - for (const titreEtapeId in amodiatairesByEtapeId) { - await knex.raw('UPDATE titres_etapes SET amodiataire_ids = ? WHERE id = ?', [JSON.stringify(amodiatairesByEtapeId[titreEtapeId]), titreEtapeId]) - } - - await knex.schema.dropTable('titres_titulaires') - await knex.schema.dropTable('titres_amodiataires') - - // rendre obligatoires certaines colonnes d'entreprises et entreprises_etablissements (pour typage) - await knex.raw('ALTER TABLE entreprises_etablissements ALTER COLUMN date_debut SET NOT NULL') - await knex.raw('ALTER TABLE entreprises_etablissements ALTER COLUMN nom SET NOT NULL') - await knex.raw('UPDATE entreprises SET archive = false WHERE archive IS NULL') - await knex.raw('ALTER TABLE entreprises ALTER COLUMN archive SET NOT NULL') - await knex.raw('ALTER TABLE entreprises ALTER COLUMN archive SET DEFAULT false') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240507082216_clean-up-documents.ts b/packages/api/src/knex/migrations/20240507082216_clean-up-documents.ts deleted file mode 100644 index 3da86de221e36bfa255beb089a22ca41555f30c1..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240507082216_clean-up-documents.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('ALTER TABLE etapes_documents ALTER COLUMN largeobject_id SET NOT NULL') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240516122738_etapes-brouillon.ts b/packages/api/src/knex/migrations/20240516122738_etapes-brouillon.ts deleted file mode 100644 index 82987362719cca30e3182d6e308d6b44911ed371..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240516122738_etapes-brouillon.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* eslint-disable sql/no-unsafe-query */ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw('alter table titres_etapes add column is_brouillon BOOLEAN NOT NULL DEFAULT FALSE') - await knex.raw(`UPDATE titres_etapes SET statut_id = 'fai', is_brouillon = true WHERE titres_etapes.statut_id = 'aco'`) -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240530125050_add-logs.ts b/packages/api/src/knex/migrations/20240530125050_add-logs.ts deleted file mode 100644 index 05cad48a075af4ee800a1d49e0b1742c8cea63d9..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240530125050_add-logs.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw( - 'CREATE TABLE logs(datetime timestamp with time zone NOT NULL default now(), path character varying(255), method character varying(6) NOT NULL, body jsonb default null, utilisateur_id character varying(255) NOT NULL)' - ) - await knex.raw('ALTER TABLE logs ADD CONSTRAINT logs__utilisateur_id__foreign FOREIGN KEY (utilisateur_id) REFERENCES utilisateurs(id)') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240610091608_add_avis-documents.ts b/packages/api/src/knex/migrations/20240610091608_add_avis-documents.ts deleted file mode 100644 index 7a313429679eeb06f6f8b05f2c278ce644700479..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240610091608_add_avis-documents.ts +++ /dev/null @@ -1,237 +0,0 @@ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable sql/no-unsafe-query */ -import { DemarcheId } from 'camino-common/src/demarche' -import { EtapeDocumentId, EtapeId } from 'camino-common/src/etape' -import { AvisStatutId, AvisTypeId, AvisVisibilityId, AvisVisibilityIds } from 'camino-common/src/static/avisTypes' -import { EtapeStatutId } from 'camino-common/src/static/etapesStatuts' -import { EtapeTypeId } from 'camino-common/src/static/etapesTypes' -import { DeepReadonly, isNotNullNorUndefinedNorEmpty, isNullOrUndefined } from 'camino-common/src/typescript-tools' -import { Knex } from 'knex' -import { LargeObjectId } from '../../database/largeobjects' -import { newEtapeAvisId } from '../../database/models/_format/id-create' -import { CaminoDate } from 'camino-common/src/date' -import { Section, getSectionsWithValue } from 'camino-common/src/static/titresTypes_demarchesTypes_etapesTypes/sections' -import { TitreTypeId } from 'camino-common/src/static/titresTypes' -import { DemarcheTypeId } from 'camino-common/src/static/demarchesTypes' -import { valeurFind } from 'camino-common/src/sections' -import { Contenu } from 'camino-common/src/permissions/sections' - -const oldSections = { - eof: [ - { - id: 'onf', - nom: 'Office National des Forêts', - elements: [ - { id: 'motifs', nom: 'Motifs', type: 'textarea', optionnel: true, description: "Élément d'expertise" }, - { id: 'expert', nom: 'Expert', type: 'text', optionnel: true, description: "Agent ONF qui a réalisé l'expertise" }, - { id: 'agent', nom: 'Agent', type: 'text', optionnel: true, description: 'Chargé de mission foncier du Service Aménagement du Territoire' }, - { - id: 'dateDebut', - nom: 'Date de début', - type: 'date', - optionnel: true, - description: 'Date de début de l’expertise', - }, - ], - }, - ], - aof: [ - { - id: 'onf', - nom: 'Office National des Forêts', - elements: [ - { id: 'motifs', nom: 'Motifs', type: 'textarea', optionnel: true, description: "Élément d'expertise" }, - { - id: 'signataire', - nom: 'Signataire', - type: 'text', - optionnel: true, - description: 'Directeur ONF ou responsable du service Service Aménagement du Territoire qui apparaitra sur les documents externe pour signature', - }, - ], - }, - ], -} as const - -const ETAPE_TYPE_ID_TO_AVIS_TYPE_ID: { [key in string]?: string } = { - ssr: 'lettreDeSaisineDesServices', - wss: 'lettreDeSaisineDesServices', - cps: 'confirmationAccordProprietaireDuSol', - aac: 'avisDirectionRegionaleDesAffairesCulturelles', - wac: 'avisDirectionRegionaleDesAffairesCulturelles', - aaf: 'avisDirectionAlimentationAgricultureForet', - acd: 'avisConseilDepartementalEnvironnementRisquesSanitairesTechnologiques', - wat: 'avisConseilDepartementalEnvironnementRisquesSanitairesTechnologiques', - abs: 'avisServiceMilieuxNaturelsBiodiversiteSitesPaysages', - aec: 'avisDirectionsRégionalesEconomieEmploiTravailSolidarités', - afp: 'avisDirectionRegionaleFinancesPubliques', - agn: 'avisGendarmerieNationale', - ami: 'avisParcNaturelMarin', - aim: 'avisIFREMER', - aof: 'avisOfficeNationalDesForets', - eof: 'expertiseOfficeNationalDesForets', - aop: 'avisInstitutNationalOrigineQualite', - api: 'avisEtatMajorOrpaillagePecheIllicite', - apl: 'avisServiceAdministratifLocal', - apm: 'avisAutoriteMilitaire', - wam: 'avisAutoriteMilitaire', - apn: 'avisParcNational', - wdt: 'avisDirectionDepartementaleTerritoiresMer', - wad: 'avisDirectionDepartementaleTerritoiresMer', - ars: 'avisAgenceRegionaleSante', - was: 'avisAgenceRegionaleSante', - ass: 'avisCaisseGeneraleSecuriteSociale', - wai: 'autreAvis', - ari: 'autreAvis', - wal: 'autreAvis', - pnr: 'autreAvis', - auc: 'autreAvis', -} as const -const getVisibilityId = (etapeDocument: Pick<DocumentFromDb, 'public_lecture' | 'entreprises_lecture'>): AvisVisibilityId => { - if (etapeDocument.public_lecture) { - return AvisVisibilityIds.Public - } - - if (etapeDocument.entreprises_lecture) { - return AvisVisibilityIds.TitulairesEtAdministrations - } - - return AvisVisibilityIds.Administrations -} -const etapeTypesToDelete = Object.keys(ETAPE_TYPE_ID_TO_AVIS_TYPE_ID) -const ETAPE_STATUT_ID_TO_AVIS_STATUT_ID: { [key in EtapeStatutId]?: AvisStatutId } = { - fav: 'Favorable', - def: 'Défavorable', - fre: 'Favorable avec réserves', - fai: 'Favorable', - dre: 'Défavorable', -} as const -type EtapeFromDb = { id: EtapeId; date: CaminoDate; titre_demarche_id: DemarcheId; type_id: EtapeTypeId | 'eof' | 'aof'; statut_id: EtapeStatutId; contenu: Contenu } -type DocumentFromDb = { id: EtapeDocumentId; largeobject_id: LargeObjectId; description: string; public_lecture: boolean; entreprises_lecture: boolean } -export const up = async (knex: Knex) => { - await knex.raw(`DELETE FROM etapes_documents where etape_id in (select id FROM titres_etapes where archive is true and type_id in (${etapeTypesToDelete.map(_ => '?').join(',')}))`, [ - ...etapeTypesToDelete, - ]) - await knex.raw(`DELETE FROM titres_etapes where archive is true and type_id in (${etapeTypesToDelete.map(_ => '?').join(',')})`, [...etapeTypesToDelete]) - await knex.raw( - 'CREATE TABLE etape_avis (id character varying(255) NOT NULL, avis_type_id character varying(255) NOT NULL, avis_statut_id character varying(255) NOT NULL, avis_visibility_id character varying(255) NOT NULL, etape_id character varying(255) NOT NULL, description text NOT NULL, date character varying(10) NOT NULL, largeobject_id oid)' - ) - - const allEtapesDb: { rows: EtapeFromDb[] } = await knex.raw( - `SELECT * FROM titres_etapes - WHERE titres_etapes.type_id IN (${etapeTypesToDelete.map(_ => '?').join(',')}) - ORDER BY titres_etapes.ordre ASC`, - [...etapeTypesToDelete] - ) - - const etapesByDemarcheId = allEtapesDb.rows.reduce<Record<DemarcheId, EtapeFromDb[]>>((acc, etape) => { - if (acc[etape.titre_demarche_id] === undefined) { - acc[etape.titre_demarche_id] = [] - } - acc[etape.titre_demarche_id].push(etape) - - return acc - }, {}) - - for (const etapes of Object.values(etapesByDemarcheId)) { - // @ts-ignore - const ssrEtape = etapes.find(({ type_id }) => type_id === 'ssr') - // @ts-ignore - const aofEtape = etapes.find(({ type_id }) => type_id === 'aof') - - const etapePivotId = ssrEtape?.id ?? aofEtape?.id ?? etapes[0].id - - for (let index = 0; index < etapes.length; index++) { - const etape = etapes[index] - - // documents et avis vide - const documents: { rows: DocumentFromDb[] } = await knex.raw(`SELECT * from etapes_documents where etape_id= :id`, { id: etape.id }) - const avisTypeId = ETAPE_TYPE_ID_TO_AVIS_TYPE_ID[etape.type_id] - const avisStatutId = ETAPE_STATUT_ID_TO_AVIS_STATUT_ID[etape.statut_id] - if (isNullOrUndefined(avisTypeId) || isNullOrUndefined(avisStatutId)) { - console.error('une étape type id ou statut non prise en compte', etape) - } else { - const titreTypeIdDemarcheTypeId: { rows: [{ titre_type_id: TitreTypeId; demarche_type_id: DemarcheTypeId }] } = await knex.raw( - ` - SELECT t.type_id as titre_type_id, d.type_id as demarche_type_id from titres_demarches d join titres t on t.id = d.titre_id where d.id= :id`, - { id: etape.titre_demarche_id } - ) - let sections: DeepReadonly<Section[]> = [] - if (titreTypeIdDemarcheTypeId.rows[0].titre_type_id === 'arm' && titreTypeIdDemarcheTypeId.rows[0].demarche_type_id === 'oct' && (etape.type_id === 'eof' || etape.type_id === 'aof')) { - sections = oldSections[etape.type_id] - } - const descriptionSections: string[] = [] - - if (isNotNullNorUndefinedNorEmpty(sections)) { - const sectionsWithValue = getSectionsWithValue(sections, etape.contenu) - for (const section of sectionsWithValue) { - for (const element of section.elements) { - const value = valeurFind(element) - if (value !== '–') { - descriptionSections.push(`- ${element.nom} : ${valeurFind(element)}`) - } - } - } - } - - for (let i = 0; i < documents.rows.length; i++) { - const document = documents.rows[i] - - let description: string = document.description ?? '' - if (i === 0) { - if (isNotNullNorUndefinedNorEmpty(description)) { - description = `${description} -${descriptionSections.join('\n')}` - } else { - description = descriptionSections.join('\n') - } - } - const row = { - id: document.id, - avis_type_id: avisTypeId, - etape_id: etapePivotId, - - description, - avis_statut_id: avisStatutId, - date: etape.date, - largeobject_id: document.largeobject_id, - avis_visibility_id: getVisibilityId(document), - } - await knex.raw( - 'INSERT INTO etape_avis(id, avis_type_id, etape_id, description, avis_statut_id, date, largeobject_id, avis_visibility_id) VALUES(:id, :avis_type_id, :etape_id, :description, :avis_statut_id, :date, :largeobject_id, :avis_visibility_id)', - { ...row, etape_id: etapePivotId } - ) - await knex.raw('DELETE FROM etapes_documents WHERE id = :id', { id: row.id }) - } - if (documents.rows.length === 0) { - const row = { - id: newEtapeAvisId(avisTypeId as AvisTypeId), - avis_type_id: avisTypeId, - etape_id: etapePivotId, - description: descriptionSections.join('\n'), - avis_statut_id: avisStatutId, - date: etape.date, - largeobject_id: null, - avis_visibility_id: 'Administrations', - } - await knex.raw( - 'INSERT INTO etape_avis(id, avis_type_id, etape_id, description, avis_statut_id, date, largeobject_id, avis_visibility_id) VALUES(:id, :avis_type_id, :etape_id, :description, :avis_statut_id, :date, :largeobject_id, :avis_visibility_id)', - { ...row, etape_id: etapePivotId } - ) - } - } - - if (etapePivotId === etape.id) { - await knex.raw(`UPDATE titres_etapes SET type_id = 'asc', statut_id='fai' WHERE id = :id`, { - id: etape.id, - }) - } else { - await knex.raw(`DELETE FROM titres_etapes WHERE id = :id`, { - id: etape.id, - }) - } - } - } -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240620130015_init-surface.ts b/packages/api/src/knex/migrations/20240620130015_init-surface.ts deleted file mode 100644 index 0b2e8b92621664b7720b08907fd38af42044e11b..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240620130015_init-surface.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { EtapeId } from 'camino-common/src/etape' -import { MultiPolygon } from 'camino-common/src/perimetre' -import { Knex } from 'knex' -import { M2, km2Validator } from 'camino-common/src/number' - -export const up = async (knex: Knex) => { - const { rows: etapes }: { rows: { id: EtapeId; geojson4326_perimetre: MultiPolygon }[] } = await knex.raw( - 'SELECT e.id, ST_AsGeoJSON (e.geojson4326_perimetre, 40)::json as geojson4326_perimetre FROM titres_etapes e WHERE e.surface IS NULL AND e.geojson4326_perimetre IS NOT NULL' - ) - - for (let i = 0; i < etapes.length; i++) { - const { rows }: { rows: { surface: M2 }[] } = await knex.raw('SELECT ST_AREA (ST_MAKEVALID (ST_GeomFromGeoJSON (?)), true) as surface', [etapes[i].geojson4326_perimetre]) - - const surface = km2Validator.parse(Number.parseFloat((rows[0].surface / 1_000_000).toFixed(2))) - await knex.raw('UPDATE titres_etapes SET surface = ? WHERE id = ?', [surface, etapes[i].id]) - } -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240702152901_participation-public-brouillonable.ts b/packages/api/src/knex/migrations/20240702152901_participation-public-brouillonable.ts deleted file mode 100644 index f8f3a6ef41a37e55a73e3813518f0e6fcc801695..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240702152901_participation-public-brouillonable.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw("UPDATE titres_etapes SET statut_id = 'fai', is_brouillon = TRUE WHERE type_id = 'ppu' AND statut_id = 'pro'") -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240703134359_notes-avertissement.ts b/packages/api/src/knex/migrations/20240703134359_notes-avertissement.ts deleted file mode 100644 index 8049fef098802d7d56efb43f496c09f28b8ee9df..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240703134359_notes-avertissement.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw("ALTER TABLE titres_etapes ADD COLUMN note JSONB NOT NULL DEFAULT json_build_object('valeur', '', 'is_avertissement', false)") - await knex.raw("UPDATE titres_etapes SET note=json_build_object('valeur', coalesce(notes, ''), 'is_avertissement', false) where notes is not null") - - await knex.raw('ALTER TABLE titres_etapes DROP COLUMN notes') -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240711082448_pxg-machine-update.ts b/packages/api/src/knex/migrations/20240711082448_pxg-machine-update.ts deleted file mode 100644 index 0409578c847f728440a15b0f81e55b4c8cff8bd4..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240711082448_pxg-machine-update.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw("UPDATE titres_etapes SET statut_id = 'fai' WHERE type_id = 'dpu' AND slug like 'g-px-%'") -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240711082449_pxg-machine-update.ts b/packages/api/src/knex/migrations/20240711082449_pxg-machine-update.ts deleted file mode 100644 index 62b526debd8249773ce642c809753e0c0218a85c..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240711082449_pxg-machine-update.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - await knex.raw("UPDATE titres_etapes SET statut_id = 'fai' WHERE type_id = 'dpu' AND slug like 'g-ar-%'") -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240711082459_cxg_prg-machine-update.ts b/packages/api/src/knex/migrations/20240711082459_cxg_prg-machine-update.ts deleted file mode 100644 index daceafb3f28d7add18fd59bbc61426eab80f7c7d..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240711082459_cxg_prg-machine-update.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { DEMARCHES_TYPES_IDS, DemarcheTypeId } from 'camino-common/src/static/demarchesTypes' -import { Knex } from 'knex' - -const demarcheTypeIdsCxPr_G: DemarcheTypeId[] = [ - DEMARCHES_TYPES_IDS.Mutation, - DEMARCHES_TYPES_IDS.Amodiation, - DEMARCHES_TYPES_IDS.Cession, - DEMARCHES_TYPES_IDS.Conversion, - DEMARCHES_TYPES_IDS.Decheance, - DEMARCHES_TYPES_IDS.DemandeDeTitreDExploitation, - DEMARCHES_TYPES_IDS.DeplacementDePerimetre, - DEMARCHES_TYPES_IDS.Fusion, - DEMARCHES_TYPES_IDS.MutationPartielle, - DEMARCHES_TYPES_IDS.Renonciation, - DEMARCHES_TYPES_IDS.ResiliationAnticipeeDAmodiation, - DEMARCHES_TYPES_IDS.Retrait, -] - -export const up = async (knex: Knex) => { - for (const demarcheTypeId of demarcheTypeIdsCxPr_G) { - await knex.raw( - `UPDATE titres_etapes te SET statut_id = 'fai' WHERE (select td.type_id from titres_demarches td where td.id = te.titre_demarche_id) = '${demarcheTypeId}' and type_id = 'dpu' AND slug like 'g-cx-%'` - ) - await knex.raw( - `UPDATE titres_etapes te SET statut_id = 'fai' WHERE (select td.type_id from titres_demarches td where td.id = te.titre_demarche_id) = '${demarcheTypeId}' and type_id = 'dpu' AND slug like 'g-pr-%'` - ) - } -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240715143025_delete-cloture-participation.ts b/packages/api/src/knex/migrations/20240715143025_delete-cloture-participation.ts deleted file mode 100644 index 31734b398f275c80ffd1ec817e2a10619c6e8b67..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240715143025_delete-cloture-participation.ts +++ /dev/null @@ -1,65 +0,0 @@ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable sql/no-unsafe-query */ - -import { CaminoDate, daysBetween } from 'camino-common/src/date' -import { DemarcheId } from 'camino-common/src/demarche' -import { EtapeId } from 'camino-common/src/etape' -import { EtapeTypeId } from 'camino-common/src/static/etapesTypes' -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - const { rows: clotureEtapes }: { rows: { id: EtapeId; date: CaminoDate; titre_demarche_id: DemarcheId }[] } = await knex.raw(`select * from titres_etapes where type_id = 'ppc' and archive is false`) - - const alreadyProccess = new Set() - - const errors = [] - - for (const clotureEtape of clotureEtapes) { - if (alreadyProccess.has(clotureEtape.titre_demarche_id)) { - continue - } - alreadyProccess.add(clotureEtape.titre_demarche_id) - - const { rows: etapes }: { rows: { id: EtapeId; type_id: EtapeTypeId | 'ppc'; contenu: any; date: CaminoDate }[] } = await knex.raw( - `select * from titres_etapes where (type_id = 'ppu' or type_id = 'ppc') and archive is false and titre_demarche_id = '${clotureEtape.titre_demarche_id}' order by date` - ) - - if (etapes.length === 1) { - errors.push(`cette démarche ${clotureEtape.titre_demarche_id} n'a pas d'ouverture`) - } - - for (let i = 0; i < etapes.length; i += 2) { - const ouvertureEtape = etapes[i] - const cloture = etapes[i + 1] - - if (ouvertureEtape.type_id !== 'ppu') { - errors.push(`boom ${ouvertureEtape}`) - } - - if (cloture === undefined) { - continue - } - - if (cloture.type_id !== 'ppc') { - errors.push(`boom ppc ${cloture} ${clotureEtape.titre_demarche_id}`) - } - - const newContenu = { ...ouvertureEtape.contenu } - newContenu.opdp = { ...newContenu.opdp } - newContenu.opdp.duree = daysBetween(ouvertureEtape.date, cloture.date) - - await knex.raw(`update titres_etapes set contenu = ? where id ='${ouvertureEtape.id}'`, [newContenu]) - - await knex.raw(`update etapes_documents set etape_id = '${ouvertureEtape.id}' where etape_id = '${cloture.id}'`) - - await knex.raw(`delete from titres_etapes where id = '${cloture.id}'`) - } - } - - if (errors.length > 0) { - errors.forEach(error => console.error(error)) - throw new Error('delete me') - } -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240717125347_migre-avis-en-document.ts b/packages/api/src/knex/migrations/20240717125347_migre-avis-en-document.ts deleted file mode 100644 index 88da2d74d538cbc2c1b0b122681a4275c5a73454..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240717125347_migre-avis-en-document.ts +++ /dev/null @@ -1,32 +0,0 @@ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable sql/no-unsafe-query */ -import { CaminoDate, dateFormat } from 'camino-common/src/date' -import { EtapeId } from 'camino-common/src/etape' -import { AvisVisibilityId } from 'camino-common/src/static/avisTypes' -import { Knex } from 'knex' -import { LargeObjectId, largeObjectIdValidator } from '../../database/largeobjects' -import { DOCUMENTS_TYPES_IDS } from 'camino-common/src/static/documentsTypes' - -export const up = async (knex: Knex) => { - const result: { rows: { id: string; avis_visibility_id: AvisVisibilityId; etape_id: EtapeId; description: string; date: CaminoDate; largeobject_id: LargeObjectId | null }[] } = await knex.raw( - "select * from etape_avis where avis_type_id = 'lettreDeSaisineDesServices'" - ) - - for (const avis of result.rows) { - // 152743 est l'id d'un fichier pdf vide enregistré en production spécialement pour les cas ci-dessous - const loId: LargeObjectId = avis.largeobject_id ?? largeObjectIdValidator.parse(152743) - - const public_lecture: boolean = avis.avis_visibility_id === 'Public' - const entreprises_lecture: boolean = public_lecture || avis.avis_visibility_id === 'TitulairesEtAdministrations' - - const description: string = `Document en date du : ${dateFormat(avis.date)}\n${avis.description}` - - await knex.raw( - `insert into etapes_documents (id, etape_document_type_id, etape_id, description, public_lecture, entreprises_lecture, largeobject_id) values ('${avis.id}', '${DOCUMENTS_TYPES_IDS.lettreDeSaisineDesServicesCivilsEtMilitaires}', '${avis.etape_id}', '${description}', ${public_lecture}, ${entreprises_lecture}, ${loId})` - ) - } - - await knex.raw("delete from etape_avis where avis_type_id = 'lettreDeSaisineDesServices'") -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240718121004_supprimer-cac-prm.ts b/packages/api/src/knex/migrations/20240718121004_supprimer-cac-prm.ts deleted file mode 100644 index 8e6120b237f572f83790af5e41c8f38b271d93c7..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240718121004_supprimer-cac-prm.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable sql/no-unsafe-query */ - -import { EtapeId } from 'camino-common/src/etape' -import { Knex } from 'knex' - -export const up = async (knex: Knex) => { - const result: { rows: { id: EtapeId }[] } = await knex.raw("SELECT id FROM titres_etapes WHERE slug LIKE 'm-pr-%' AND type_id = 'cac'") - const etapeIds = result.rows.map(({ id }) => id) - - if (etapeIds.length > 0) { - await knex.raw(`DELETE FROM etapes_documents WHERE etape_id IN (${etapeIds.map(t => `'${t}'`).join(',')})`) - await knex.raw(`DELETE FROM titres_etapes WHERE id IN (${etapeIds.map(t => `'${t}'`).join(',')})`) - } -} - -export const down = () => ({}) diff --git a/packages/api/src/knex/migrations/20240724150631_r-machine-update.ts b/packages/api/src/knex/migrations/20240724150631_r-machine-update.ts deleted file mode 100644 index 8ef3832fd6f1b1a00bdb509c0851e934066a33de..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240724150631_r-machine-update.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable sql/no-unsafe-query */ -import { Knex } from 'knex' - -export const up = async (knex: Knex): Promise<void> => { - await knex.raw("UPDATE titres_etapes SET statut_id = 'fai' WHERE type_id = 'dpu' AND slug like 'r-%'") -} - -export const down = (): void => {} diff --git a/packages/api/src/knex/migrations/20240725133133_fusionne-avis-des-collectivites.ts b/packages/api/src/knex/migrations/20240725133133_fusionne-avis-des-collectivites.ts deleted file mode 100644 index c8c50faa236ca8931f24ff3151439ea96b34aa0d..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240725133133_fusionne-avis-des-collectivites.ts +++ /dev/null @@ -1,128 +0,0 @@ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable sql/no-unsafe-query */ -import { DemarcheId } from 'camino-common/src/demarche' -import { EtapeDocumentId, EtapeId } from 'camino-common/src/etape' -import { AvisStatutId, AvisTypeId, AvisVisibilityId, AvisVisibilityIds } from 'camino-common/src/static/avisTypes' -import { EtapeStatutId } from 'camino-common/src/static/etapesStatuts' -import { EtapeTypeId } from 'camino-common/src/static/etapesTypes' -import { isNullOrUndefined } from 'camino-common/src/typescript-tools' -import { Knex } from 'knex' -import { LargeObjectId } from '../../database/largeobjects' -import { newEtapeAvisId } from '../../database/models/_format/id-create' -import { CaminoDate } from 'camino-common/src/date' -import { Contenu } from 'camino-common/src/permissions/sections' - -const ETAPE_TYPE_ID_TO_AVIS_TYPE_ID: { [key in string]?: string } = { - acl: 'avisDUneCollectivite', - aep: 'avisDUneCollectivite', - ama: 'avisDUneCollectivite', -} as const -const getVisibilityId = (etapeDocument: Pick<DocumentFromDb, 'public_lecture' | 'entreprises_lecture'>): AvisVisibilityId => { - if (etapeDocument.public_lecture) { - return AvisVisibilityIds.Public - } - - if (etapeDocument.entreprises_lecture) { - return AvisVisibilityIds.TitulairesEtAdministrations - } - - return AvisVisibilityIds.Administrations -} -const etapeTypesToDelete = Object.keys(ETAPE_TYPE_ID_TO_AVIS_TYPE_ID) -const ETAPE_STATUT_ID_TO_AVIS_STATUT_ID: { [key in EtapeStatutId]?: AvisStatutId } = { - fav: 'Favorable', - def: 'Défavorable', - fre: 'Favorable avec réserves', - fai: 'Favorable', - dre: 'Défavorable', -} as const -type EtapeFromDb = { id: EtapeId; date: CaminoDate; titre_demarche_id: DemarcheId; type_id: EtapeTypeId | 'eof' | 'aof'; statut_id: EtapeStatutId; contenu: Contenu } -type DocumentFromDb = { id: EtapeDocumentId; largeobject_id: LargeObjectId; description: string; public_lecture: boolean; entreprises_lecture: boolean } - -export const up = async (knex: Knex): Promise<void> => { - await knex.raw(`DELETE FROM etapes_documents where etape_id in (select id FROM titres_etapes where archive is true and type_id in (${etapeTypesToDelete.map(_ => '?').join(',')}))`, [ - ...etapeTypesToDelete, - ]) - await knex.raw(`DELETE FROM titres_etapes where archive is true and type_id in (${etapeTypesToDelete.map(_ => '?').join(',')})`, [...etapeTypesToDelete]) - - const allEtapesDb: { rows: EtapeFromDb[] } = await knex.raw( - `SELECT * FROM titres_etapes - WHERE titres_etapes.type_id IN (${etapeTypesToDelete.map(_ => '?').join(',')}) - ORDER BY titres_etapes.ordre ASC`, - [...etapeTypesToDelete] - ) - - const etapesByDemarcheId = allEtapesDb.rows.reduce<Record<DemarcheId, EtapeFromDb[]>>((acc, etape) => { - if (acc[etape.titre_demarche_id] === undefined) { - acc[etape.titre_demarche_id] = [] - } - acc[etape.titre_demarche_id].push(etape) - - return acc - }, {}) - - for (const etapes of Object.values(etapesByDemarcheId)) { - const etapePivotId = etapes[0].id - - for (let index = 0; index < etapes.length; index++) { - const etape = etapes[index] - - // documents et avis vide - const documents: { rows: DocumentFromDb[] } = await knex.raw(`SELECT * from etapes_documents where etape_id= :id`, { id: etape.id }) - const avisTypeId = ETAPE_TYPE_ID_TO_AVIS_TYPE_ID[etape.type_id] - const avisStatutId = ETAPE_STATUT_ID_TO_AVIS_STATUT_ID[etape.statut_id] - if (isNullOrUndefined(avisTypeId) || isNullOrUndefined(avisStatutId)) { - console.error('une étape type id ou statut non prise en compte', etape) - } else { - for (let i = 0; i < documents.rows.length; i++) { - const document = documents.rows[i] - - const row = { - id: document.id, - avis_type_id: avisTypeId, - etape_id: etapePivotId, - - description: document.description ?? '', - avis_statut_id: avisStatutId, - date: etape.date, - largeobject_id: document.largeobject_id, - avis_visibility_id: getVisibilityId(document), - } - await knex.raw( - 'INSERT INTO etape_avis(id, avis_type_id, etape_id, description, avis_statut_id, date, largeobject_id, avis_visibility_id) VALUES(:id, :avis_type_id, :etape_id, :description, :avis_statut_id, :date, :largeobject_id, :avis_visibility_id)', - { ...row, etape_id: etapePivotId } - ) - await knex.raw('DELETE FROM etapes_documents WHERE id = :id', { id: row.id }) - } - if (documents.rows.length === 0) { - const row = { - id: newEtapeAvisId(avisTypeId as AvisTypeId), - avis_type_id: avisTypeId, - etape_id: etapePivotId, - description: '', - avis_statut_id: avisStatutId, - date: etape.date, - largeobject_id: null, - avis_visibility_id: 'Administrations', - } - await knex.raw( - 'INSERT INTO etape_avis(id, avis_type_id, etape_id, description, avis_statut_id, date, largeobject_id, avis_visibility_id) VALUES(:id, :avis_type_id, :etape_id, :description, :avis_statut_id, :date, :largeobject_id, :avis_visibility_id)', - { ...row, etape_id: etapePivotId } - ) - } - } - - if (etapePivotId === etape.id) { - await knex.raw(`UPDATE titres_etapes SET type_id = 'adc', statut_id='fai' WHERE id = :id`, { - id: etape.id, - }) - } else { - await knex.raw(`DELETE FROM titres_etapes WHERE id = :id`, { - id: etape.id, - }) - } - } - } -} - -export const down = (): void => {} diff --git a/packages/api/src/knex/migrations/20240725143010_f-machine-update.ts b/packages/api/src/knex/migrations/20240725143010_f-machine-update.ts deleted file mode 100644 index e47fb08ea132478b07e814a3fb91bc91c22304b4..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240725143010_f-machine-update.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable sql/no-unsafe-query */ - -import { Knex } from 'knex' - -export const up = async (knex: Knex): Promise<void> => { - await knex.raw("UPDATE titres_etapes SET statut_id = 'fai' WHERE type_id = 'dpu' AND slug like 'f-%'") -} - -export const down = (): void => {} diff --git a/packages/api/src/knex/migrations/20240729124859_fusionner-les-tables-communes.ts b/packages/api/src/knex/migrations/20240729124859_fusionner-les-tables-communes.ts deleted file mode 100644 index 8ec6d9eb391406b41e336fffbe78e13be05e2fc4..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240729124859_fusionner-les-tables-communes.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable sql/no-unsafe-query */ - -import { Knex } from 'knex' - -export const up = async (knex: Knex): Promise<void> => { - // on supprime les communes sans périmètres - await knex.raw(` - DELETE FROM communes WHERE id IN (SELECT communes.id FROM communes LEFT JOIN communes_postgis ON communes_postgis.id = communes.id WHERE communes_postgis.id IS NULL) - `) - - // on transfère la colonne geometry dans communes - await knex.raw('ALTER TABLE communes ADD COLUMN "geometry" geometry') - await knex.raw(` - UPDATE communes - SET "geometry" = communes_postgis."geometry" - FROM communes_postgis - WHERE communes.id = communes_postgis.id - `) - - // on rajoute le critère NOT NULLABLE - await knex.raw('ALTER TABLE communes ALTER COLUMN "geometry" SET NOT NULL') - - // on peut drop communes_postgis - await knex.raw('DROP TABLE communes_postgis') -} - -export const down = (): void => {} diff --git a/packages/api/src/knex/migrations/20240730122244_ajouter-index-sur-geometry.ts b/packages/api/src/knex/migrations/20240730122244_ajouter-index-sur-geometry.ts deleted file mode 100644 index 803bb9ec66c59d1cea0724fc6f02df370fa17b9c..0000000000000000000000000000000000000000 --- a/packages/api/src/knex/migrations/20240730122244_ajouter-index-sur-geometry.ts +++ /dev/null @@ -1,10 +0,0 @@ -/* eslint-disable no-restricted-syntax */ -/* eslint-disable sql/no-unsafe-query */ - -import { Knex } from 'knex' - -export const up = async (knex: Knex): Promise<void> => { - await knex.raw('CREATE INDEX index_geo_communes ON public.communes USING spgist (geometry)') -} - -export const down = (): void => {}