restructure: flatten workspace nesting, move devcontainer to root
- backend/workspaces/backend/ → backend/ - backend/workspaces/frontend/ → frontend/ - backend/.devcontainer/ + .vscode/ → repo root (where VS Code expects them) - loose scripts/SQL files → scripts/ - replace nested git repo with single repo at project root - update docker-compose.yml build context and devcontainer.json path - add root .gitignore Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
74
scripts/generate_data.py
Normal file
74
scripts/generate_data.py
Normal file
@@ -0,0 +1,74 @@
|
||||
import uuid
|
||||
import random
|
||||
import datetime
|
||||
|
||||
# --- Configuration ---
|
||||
NUM_PERSONS = 50
|
||||
NUM_DOCUMENTS = 500
|
||||
OUTPUT_FILE = "large-data.sql"
|
||||
|
||||
# --- Source Data ---
|
||||
FIRST_NAMES = ["Hans", "Helga", "Thomas", "Maria", "Otto", "Frieda", "Heinrich", "Anna", "Wilhelm", "Elisabeth", "Paul", "Gertrud", "Karl", "Martha", "Fritz", "Erna"]
|
||||
LAST_NAMES = ["Müller", "Schmidt", "Schneider", "Fischer", "Weber", "Meyer", "Wagner", "Becker", "Schulz", "Hoffmann", "Raddatz", "Koch", "Richter", "Klein"]
|
||||
CITIES = ["Berlin", "München", "Hamburg", "Köln", "Frankfurt", "Leipzig", "Dresden", "Breslau", "Königsberg", "Wien", "Stuttgart"]
|
||||
TITLES = ["Brief von", "Rechnung", "Postkarte aus", "Notiz an", "Dokument betreffend", "Urkunde für", "Foto von"]
|
||||
|
||||
def random_date(start_year=1900, end_year=2000):
|
||||
start = datetime.date(start_year, 1, 1)
|
||||
end = datetime.date(end_year, 12, 31)
|
||||
return start + datetime.timedelta(days=random.randint(0, (end - start).days))
|
||||
|
||||
# --- Generation ---
|
||||
print(f"Generating {NUM_PERSONS} persons and {NUM_DOCUMENTS} documents...")
|
||||
|
||||
persons = []
|
||||
sql_lines = []
|
||||
|
||||
# 1. Generate Persons
|
||||
sql_lines.append("-- Persons")
|
||||
for _ in range(NUM_PERSONS):
|
||||
p_id = str(uuid.uuid4())
|
||||
fn = random.choice(FIRST_NAMES)
|
||||
ln = random.choice(LAST_NAMES)
|
||||
persons.append(p_id)
|
||||
sql_lines.append(f"INSERT INTO persons (id, first_name, last_name, alias) VALUES ('{p_id}', '{fn}', '{ln}', NULL) ON CONFLICT DO NOTHING;")
|
||||
|
||||
# 2. Generate Documents
|
||||
sql_lines.append("\n-- Documents")
|
||||
document_ids = []
|
||||
|
||||
for _ in range(NUM_DOCUMENTS):
|
||||
doc_id = str(uuid.uuid4())
|
||||
document_ids.append(doc_id)
|
||||
|
||||
sender_id = random.choice(persons)
|
||||
title_start = random.choice(TITLES)
|
||||
date = random_date()
|
||||
year = date.year
|
||||
city = random.choice(CITIES)
|
||||
title = f"{title_start} {city} {year}"
|
||||
|
||||
# Simple transcription text
|
||||
transcription = f"Lieber Empfänger, dies ist ein Testdokument aus {city}, geschrieben am {date}. Das Wetter war schön."
|
||||
|
||||
sql = (
|
||||
f"INSERT INTO documents (id, title, original_filename, file_path, status, meta_date, meta_location, transcription, sender_id, created_at, updated_at) "
|
||||
f"VALUES ('{doc_id}', '{title}', 'scan_{year}_{random.randint(100,999)}.pdf', 'dummy/path.pdf', 'UPLOADED', '{date}', '{city}', '{transcription}', '{sender_id}', NOW(), NOW()) "
|
||||
f"ON CONFLICT DO NOTHING;"
|
||||
)
|
||||
sql_lines.append(sql)
|
||||
|
||||
# 3. Generate Receivers (Many-to-Many)
|
||||
sql_lines.append("\n-- Receivers")
|
||||
for doc_id in document_ids:
|
||||
# 0 to 3 receivers per document
|
||||
num_receivers = random.randint(0, 3)
|
||||
receivers = random.sample(persons, num_receivers)
|
||||
for rec_id in receivers:
|
||||
sql_lines.append(f"INSERT INTO document_receivers (document_id, person_id) VALUES ('{doc_id}', '{rec_id}') ON CONFLICT DO NOTHING;")
|
||||
|
||||
# --- Write to File ---
|
||||
with open(OUTPUT_FILE, "w", encoding="utf-8") as f:
|
||||
f.write("\n".join(sql_lines))
|
||||
|
||||
print(f"Done! Created {OUTPUT_FILE}")
|
||||
361
scripts/schema.sql
Normal file
361
scripts/schema.sql
Normal file
@@ -0,0 +1,361 @@
|
||||
--
|
||||
-- PostgreSQL database dump
|
||||
--
|
||||
|
||||
\restrict xsnAClkjR0sYU9NfWMMMcuVwnUJeM5WxcLUVbsVE4iEq7QvbciesNQCEaK5jPji
|
||||
|
||||
-- Dumped from database version 16.11
|
||||
-- Dumped by pg_dump version 16.11
|
||||
|
||||
SET statement_timeout = 0;
|
||||
SET lock_timeout = 0;
|
||||
SET idle_in_transaction_session_timeout = 0;
|
||||
SET client_encoding = 'UTF8';
|
||||
SET standard_conforming_strings = on;
|
||||
SELECT pg_catalog.set_config('search_path', '', false);
|
||||
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;
|
||||
|
||||
--
|
||||
-- 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;
|
||||
|
||||
|
||||
--
|
||||
-- PostgreSQL database dump complete
|
||||
--
|
||||
|
||||
\unrestrict xsnAClkjR0sYU9NfWMMMcuVwnUJeM5WxcLUVbsVE4iEq7QvbciesNQCEaK5jPji
|
||||
|
||||
Reference in New Issue
Block a user