From ef4e31f7b2e0b2a6744a2f2d6a42a5b232246406 Mon Sep 17 00:00:00 2001 From: Marcel Raddatz Date: Mon, 15 Dec 2025 20:01:08 +0000 Subject: [PATCH] add flyway --- workspaces/backend/.gitignore | 1 + workspaces/backend/pom.xml | 8 + .../src/main/resources/application.properties | 2 +- .../db/migration/V1__initial_schema.sql | 334 ++++++++++++++++++ 4 files changed, 344 insertions(+), 1 deletion(-) create mode 100644 workspaces/backend/.gitignore create mode 100644 workspaces/backend/src/main/resources/db/migration/V1__initial_schema.sql diff --git a/workspaces/backend/.gitignore b/workspaces/backend/.gitignore new file mode 100644 index 00000000..c41cc9e3 --- /dev/null +++ b/workspaces/backend/.gitignore @@ -0,0 +1 @@ +/target \ No newline at end of file diff --git a/workspaces/backend/pom.xml b/workspaces/backend/pom.xml index 31f7bed9..fe797f4d 100644 --- a/workspaces/backend/pom.xml +++ b/workspaces/backend/pom.xml @@ -137,6 +137,14 @@ lombok true + + org.flywaydb + flyway-core + + + org.flywaydb + flyway-database-postgresql + diff --git a/workspaces/backend/src/main/resources/application.properties b/workspaces/backend/src/main/resources/application.properties index 75c2bf09..0b132406 100644 --- a/workspaces/backend/src/main/resources/application.properties +++ b/workspaces/backend/src/main/resources/application.properties @@ -6,7 +6,7 @@ spring.datasource.password=${SPRING_DATASOURCE_PASSWORD} spring.datasource.driver-class-name=org.postgresql.Driver # JPA / Hibernate -spring.jpa.hibernate.ddl-auto=create +spring.jpa.hibernate.ddl-auto=none spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.jpa.show-sql=false # --- MinIO (S3) Konfiguration --- diff --git a/workspaces/backend/src/main/resources/db/migration/V1__initial_schema.sql b/workspaces/backend/src/main/resources/db/migration/V1__initial_schema.sql new file mode 100644 index 00000000..6077760d --- /dev/null +++ b/workspaces/backend/src/main/resources/db/migration/V1__initial_schema.sql @@ -0,0 +1,334 @@ +-- +-- PostgreSQL database dump +-- + +-- +-- Name: document_receivers; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.document_receivers ( + document_id uuid NOT NULL, + person_id uuid NOT NULL +); + + +-- +-- Name: document_tags; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.document_tags ( + document_id uuid NOT NULL, + tag_id uuid NOT NULL +); + + +-- +-- Name: documents; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.documents ( + meta_date date, + created_at timestamp(6) without time zone, + updated_at timestamp(6) without time zone, + id uuid NOT NULL, + sender_id uuid, + file_path character varying(255), + meta_document_location character varying(255), + meta_location character varying(255), + original_filename character varying(255) NOT NULL, + status character varying(255) NOT NULL, + summary text, + title character varying(255) NOT NULL, + transcription text, + CONSTRAINT documents_status_check CHECK (((status)::text = ANY ((ARRAY['PLACEHOLDER'::character varying, 'UPLOADED'::character varying, 'TRANSCRIBED'::character varying, 'REVIEWED'::character varying, 'ARCHIVED'::character varying])::text[]))) +); + + +-- +-- Name: group_permissions; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.group_permissions ( + group_id uuid NOT NULL, + permission character varying(255) +); + + +-- +-- Name: persons; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.persons ( + id uuid NOT NULL, + alias character varying(255), + first_name character varying(255) NOT NULL, + last_name character varying(255) NOT NULL +); + + +-- +-- Name: spring_session; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.spring_session ( + primary_id character(36) NOT NULL, + session_id character(36) NOT NULL, + creation_time bigint NOT NULL, + last_access_time bigint NOT NULL, + max_inactive_interval integer NOT NULL, + expiry_time bigint NOT NULL, + principal_name character varying(100) +); + + +-- +-- Name: spring_session_attributes; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.spring_session_attributes ( + session_primary_id character(36) NOT NULL, + attribute_name character varying(200) NOT NULL, + attribute_bytes bytea NOT NULL +); + + +-- +-- Name: tag; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.tag ( + id uuid NOT NULL, + name character varying(255) NOT NULL +); + + +-- +-- Name: user_groups; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.user_groups ( + id uuid NOT NULL, + name character varying(255) NOT NULL +); + + +-- +-- Name: users; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.users ( + enabled boolean NOT NULL, + created_at timestamp(6) without time zone, + id uuid NOT NULL, + email character varying(255), + password character varying(255) NOT NULL, + username character varying(255) NOT NULL +); + + +-- +-- Name: users_groups; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.users_groups ( + group_id uuid NOT NULL, + user_id uuid NOT NULL +); + + +-- +-- Name: document_receivers document_receivers_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.document_receivers + ADD CONSTRAINT document_receivers_pkey PRIMARY KEY (document_id, person_id); + + +-- +-- Name: document_tags document_tags_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.document_tags + ADD CONSTRAINT document_tags_pkey PRIMARY KEY (document_id, tag_id); + + +-- +-- Name: documents documents_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.documents + ADD CONSTRAINT documents_pkey PRIMARY KEY (id); + + +-- +-- Name: persons persons_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.persons + ADD CONSTRAINT persons_pkey PRIMARY KEY (id); + + +-- +-- Name: spring_session_attributes spring_session_attributes_pk; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.spring_session_attributes + ADD CONSTRAINT spring_session_attributes_pk PRIMARY KEY (session_primary_id, attribute_name); + + +-- +-- Name: spring_session spring_session_pk; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.spring_session + ADD CONSTRAINT spring_session_pk PRIMARY KEY (primary_id); + + +-- +-- Name: tag tag_name_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.tag + ADD CONSTRAINT tag_name_key UNIQUE (name); + + +-- +-- Name: tag tag_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.tag + ADD CONSTRAINT tag_pkey PRIMARY KEY (id); + + +-- +-- Name: user_groups user_groups_name_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_groups + ADD CONSTRAINT user_groups_name_key UNIQUE (name); + + +-- +-- Name: user_groups user_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.user_groups + ADD CONSTRAINT user_groups_pkey PRIMARY KEY (id); + + +-- +-- Name: users_groups users_groups_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.users_groups + ADD CONSTRAINT users_groups_pkey PRIMARY KEY (group_id, user_id); + + +-- +-- Name: users users_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.users + ADD CONSTRAINT users_pkey PRIMARY KEY (id); + + +-- +-- Name: users users_username_key; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.users + ADD CONSTRAINT users_username_key UNIQUE (username); + + +-- +-- Name: spring_session_ix1; Type: INDEX; Schema: public; Owner: - +-- + +CREATE UNIQUE INDEX spring_session_ix1 ON public.spring_session USING btree (session_id); + + +-- +-- Name: spring_session_ix2; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX spring_session_ix2 ON public.spring_session USING btree (expiry_time); + + +-- +-- Name: spring_session_ix3; Type: INDEX; Schema: public; Owner: - +-- + +CREATE INDEX spring_session_ix3 ON public.spring_session USING btree (principal_name); + + +-- +-- Name: users_groups fk1qwqr38oun4xcttk576wevhxn; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.users_groups + ADD CONSTRAINT fk1qwqr38oun4xcttk576wevhxn FOREIGN KEY (group_id) REFERENCES public.user_groups(id); + + +-- +-- Name: group_permissions fkaqmvqpbaqnfeg5ixk88k8u6i9; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.group_permissions + ADD CONSTRAINT fkaqmvqpbaqnfeg5ixk88k8u6i9 FOREIGN KEY (group_id) REFERENCES public.user_groups(id); + + +-- +-- Name: document_tags fkc99c5qjulwx9gru07yrhicgd2; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.document_tags + ADD CONSTRAINT fkc99c5qjulwx9gru07yrhicgd2 FOREIGN KEY (document_id) REFERENCES public.documents(id); + + +-- +-- Name: document_receivers fkcg7r68qvosqricx1betgrlt7s; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.document_receivers + ADD CONSTRAINT fkcg7r68qvosqricx1betgrlt7s FOREIGN KEY (person_id) REFERENCES public.persons(id); + + +-- +-- Name: users_groups fkg6fu0mfuj9eqfd9aro1nc40nn; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.users_groups + ADD CONSTRAINT fkg6fu0mfuj9eqfd9aro1nc40nn FOREIGN KEY (user_id) REFERENCES public.users(id); + + +-- +-- Name: documents fkl5xhww7es3b4um01vmly4y18m; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.documents + ADD CONSTRAINT fkl5xhww7es3b4um01vmly4y18m FOREIGN KEY (sender_id) REFERENCES public.persons(id); + + +-- +-- Name: document_tags fkl8pxq2mt0yxvg6ukrcx1aijsq; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.document_tags + ADD CONSTRAINT fkl8pxq2mt0yxvg6ukrcx1aijsq FOREIGN KEY (tag_id) REFERENCES public.tag(id); + + +-- +-- Name: document_receivers fks7t60twjgfmpeqcuc3g0fvjpm; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.document_receivers + ADD CONSTRAINT fks7t60twjgfmpeqcuc3g0fvjpm FOREIGN KEY (document_id) REFERENCES public.documents(id); + + +-- +-- Name: spring_session_attributes spring_session_attributes_fk; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.spring_session_attributes + ADD CONSTRAINT spring_session_attributes_fk FOREIGN KEY (session_primary_id) REFERENCES public.spring_session(primary_id) ON DELETE CASCADE; +