From e63adb964d0f3fdc031978bc36f79e3658808d81 Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 15 Mar 2026 11:47:58 +0100 Subject: [PATCH] restructure: flatten workspace nesting, move devcontainer to root MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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 --- .devcontainer/devcontainer.json | 2 +- .gitignore | 9 + CLAUDE.md | 93 +++++ {workspaces/backend => backend}/.gitignore | 0 {workspaces/backend => backend}/Dockerfile | 0 {workspaces/backend => backend}/HELP.md | 0 .../api_tests/Admin-Auth.http | 0 .../api_tests/Document.http | 0 .../backend => backend}/api_tests/User.http | 0 .../backend => backend}/api_tests/demo.pdf | Bin .../api_tests/metadata.xlsx | Bin {workspaces/backend => backend}/mvnw | 0 {workspaces/backend => backend}/mvnw.cmd | 0 {workspaces/backend => backend}/pom.xml | 0 .../FamilienarchivApplication.java | 0 .../familienarchiv/config/AsyncConfig.java | 0 .../config/DataInitializer.java | 0 .../familienarchiv/config/MinioConfig.java | 0 .../familienarchiv/config/SecurityConfig.java | 0 .../controller/AdminController.java | 0 .../controller/DocumentController.java | 0 .../controller/GlobalExceptionHandler.java | 0 .../controller/GroupController.java | 0 .../controller/PersonController.java | 0 .../controller/TagController.java | 0 .../controller/UserController.java | 0 .../familienarchiv/dto/CreateUserRequest.java | 0 .../familienarchiv/dto/DocumentUpdateDTO.java | 0 .../raddatz/familienarchiv/dto/GroupDTO.java | 0 .../raddatz/familienarchiv/model/AppUser.java | 0 .../familienarchiv/model/Document.java | 0 .../familienarchiv/model/DocumentStatus.java | 0 .../raddatz/familienarchiv/model/Person.java | 0 .../org/raddatz/familienarchiv/model/Tag.java | 0 .../familienarchiv/model/UserGroup.java | 0 .../repository/AppUserRepository.java | 0 .../repository/DocumentRepository.java | 0 .../repository/DocumentSpecifications.java | 0 .../repository/PersonRepository.java | 0 .../repository/TagRepository.java | 0 .../repository/UserGroupRepository.java | 0 .../familienarchiv/security/Permission.java | 0 .../security/PermissionAspect.java | 0 .../security/RequirePermission.java | 0 .../service/CustomUserDetailsService.java | 0 .../service/DocumentService.java | 0 .../familienarchiv/service/ExcelService.java | 0 .../familienarchiv/service/FileService.java | 0 .../service/MassImportService.java | 0 .../familienarchiv/service/UserService.java | 0 .../src/main/resources/application.properties | 0 .../db/migration/V1__initial_schema.sql | 0 .../FamilienarchivApplicationTests.java | 0 docker-compose.yml | 112 ++++++ {workspaces/frontend => frontend}/.gitignore | 0 {workspaces/frontend => frontend}/.npmrc | 0 .../frontend => frontend}/.prettierignore | 0 {workspaces/frontend => frontend}/.prettierrc | 0 .../.vscode/settings.json | 0 {workspaces/frontend => frontend}/README.md | 0 .../frontend => frontend}/eslint.config.js | 0 .../frontend => frontend}/messages/de.json | 0 .../frontend => frontend}/messages/en.json | 0 .../frontend => frontend}/messages/es.json | 0 .../frontend => frontend}/package-lock.json | 0 .../frontend => frontend}/package.json | 0 .../cache/plugins/2sy648wh9sugi | 0 .../project.inlang/cache/plugins/ygx0uiahq6uw | 0 .../project.inlang/project_id | 0 .../project.inlang/settings.json | 0 .../frontend => frontend}/src/app.d.ts | 0 .../frontend => frontend}/src/app.html | 0 .../frontend => frontend}/src/demo.spec.ts | 0 .../frontend => frontend}/src/hooks.server.ts | 0 .../frontend => frontend}/src/hooks.ts | 0 .../src/lib/assets/favicon.svg | 0 .../src/lib/components/PersonTypeahead.svelte | 0 .../src/lib/components/TagInput.svelte | 0 .../frontend => frontend}/src/lib/index.ts | 0 .../src/routes/+layout.server.ts | 0 .../src/routes/+layout.svelte | 0 .../src/routes/+page.server.ts | 0 .../src/routes/+page.svelte | 0 .../src/routes/admin/+page.server.ts | 0 .../src/routes/admin/+page.svelte | 0 .../src/routes/api/persons/+server.ts | 0 .../src/routes/api/tags/+server.ts | 0 .../src/routes/conversations/+page.server.ts | 0 .../src/routes/conversations/+page.svelte | 0 .../src/routes/demo/+page.svelte | 0 .../src/routes/demo/paraglide/+page.svelte | 0 .../src/routes/documents/[id]/+page.server.ts | 0 .../src/routes/documents/[id]/+page.svelte | 0 .../documents/[id]/edit/+page.server.ts | 0 .../routes/documents/[id]/edit/+page.svelte | 0 .../src/routes/layout.css | 0 .../src/routes/login/+page.server.ts | 0 .../src/routes/login/+page.svelte | 0 .../src/routes/logout/+page.server.ts | 0 .../src/routes/page.svelte.spec.ts | 0 .../src/routes/persons/+page.server.ts | 0 .../src/routes/persons/+page.svelte | 0 .../src/routes/persons/[id]/+page.server.ts | 0 .../src/routes/persons/[id]/+page.svelte | 0 .../frontend => frontend}/static/robots.txt | 0 .../frontend => frontend}/svelte.config.js | 0 .../frontend => frontend}/tailwind.config.js | 0 .../frontend => frontend}/tsconfig.json | 0 .../frontend => frontend}/vite.config.ts | 0 {workspaces/frontend => frontend}/yarn.lock | 0 scripts/generate_data.py | 74 ++++ scripts/schema.sql | 361 ++++++++++++++++++ .../target/classes/application.properties | 28 -- .../FamilienarchivApplication.class | Bin 783 -> 0 bytes .../config/DataInitializer.class | Bin 21398 -> 0 bytes .../familienarchiv/config/MinioConfig.class | Bin 5236 -> 0 bytes .../config/SecurityConfig.class | Bin 6521 -> 0 bytes .../controller/AdminController.class | Bin 2175 -> 0 bytes .../controller/DocumentController.class | Bin 9275 -> 0 bytes .../controller/GroupController.class | Bin 5170 -> 0 bytes .../controller/PersonController.class | Bin 3752 -> 0 bytes .../controller/TagController.class | Bin 5204 -> 0 bytes .../controller/UserController.class | Bin 4367 -> 0 bytes .../dto/CreateUserRequest.class | Bin 3733 -> 0 bytes .../dto/DocumentUpdateDTO.class | Bin 6374 -> 0 bytes .../raddatz/familienarchiv/dto/GroupDTO.class | Bin 2728 -> 0 bytes .../model/AppUser$AppUserBuilder.class | Bin 3995 -> 0 bytes .../familienarchiv/model/AppUser.class | Bin 9275 -> 0 bytes .../model/Document$DocumentBuilder.class | Bin 5630 -> 0 bytes .../familienarchiv/model/Document.class | Bin 12937 -> 0 bytes .../familienarchiv/model/DocumentStatus.class | Bin 1390 -> 0 bytes .../model/Person$PersonBuilder.class | Bin 2255 -> 0 bytes .../raddatz/familienarchiv/model/Person.class | Bin 4249 -> 0 bytes .../familienarchiv/model/Tag$TagBuilder.class | Bin 1823 -> 0 bytes .../raddatz/familienarchiv/model/Tag.class | Bin 3145 -> 0 bytes .../model/UserGroup$UserGroupBuilder.class | Bin 2641 -> 0 bytes .../familienarchiv/model/UserGroup.class | Bin 4551 -> 0 bytes .../repository/AppUserRepository.class | Bin 660 -> 0 bytes .../repository/DocumentRepository.class | Bin 2222 -> 0 bytes .../repository/DocumentSpecifications.class | Bin 9987 -> 0 bytes .../repository/PersonRepository.class | Bin 1258 -> 0 bytes .../repository/TagRepository.class | Bin 738 -> 0 bytes .../repository/UserGroupRepository.class | Bin 660 -> 0 bytes .../familienarchiv/security/Permission.class | Bin 1387 -> 0 bytes .../security/PermissionAspect.class | Bin 4967 -> 0 bytes .../security/RequirePermission.class | Bin 496 -> 0 bytes .../service/CustomUserDetailsService.class | Bin 4121 -> 0 bytes .../service/DocumentService.class | Bin 13421 -> 0 bytes .../familienarchiv/service/ExcelService.class | Bin 6284 -> 0 bytes .../service/FileService$S3FileDownload.class | Bin 1758 -> 0 bytes ...Service$StorageFileNotFoundException.class | Bin 619 -> 0 bytes .../familienarchiv/service/FileService.class | Bin 6224 -> 0 bytes .../service/MassImportService.class | Bin 11934 -> 0 bytes .../familienarchiv/service/UserService.class | Bin 6469 -> 0 bytes .../FamilienarchivApplicationTests.class | Bin 581 -> 0 bytes 155 files changed, 650 insertions(+), 29 deletions(-) create mode 100644 .gitignore create mode 100644 CLAUDE.md rename {workspaces/backend => backend}/.gitignore (100%) rename {workspaces/backend => backend}/Dockerfile (100%) rename {workspaces/backend => backend}/HELP.md (100%) rename {workspaces/backend => backend}/api_tests/Admin-Auth.http (100%) rename {workspaces/backend => backend}/api_tests/Document.http (100%) rename {workspaces/backend => backend}/api_tests/User.http (100%) rename {workspaces/backend => backend}/api_tests/demo.pdf (100%) rename {workspaces/backend => backend}/api_tests/metadata.xlsx (100%) rename {workspaces/backend => backend}/mvnw (100%) rename {workspaces/backend => backend}/mvnw.cmd (100%) rename {workspaces/backend => backend}/pom.xml (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/FamilienarchivApplication.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/config/AsyncConfig.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/config/DataInitializer.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/config/MinioConfig.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/config/SecurityConfig.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/controller/AdminController.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/controller/DocumentController.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/controller/GlobalExceptionHandler.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/controller/GroupController.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/controller/PersonController.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/controller/TagController.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/controller/UserController.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/dto/CreateUserRequest.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/dto/DocumentUpdateDTO.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/dto/GroupDTO.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/model/AppUser.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/model/Document.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/model/DocumentStatus.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/model/Person.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/model/Tag.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/model/UserGroup.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/repository/AppUserRepository.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/repository/DocumentRepository.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/repository/DocumentSpecifications.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/repository/PersonRepository.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/repository/TagRepository.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/repository/UserGroupRepository.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/security/Permission.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/security/PermissionAspect.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/security/RequirePermission.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/service/CustomUserDetailsService.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/service/ExcelService.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/service/FileService.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/service/MassImportService.java (100%) rename {workspaces/backend => backend}/src/main/java/org/raddatz/familienarchiv/service/UserService.java (100%) rename {workspaces/backend => backend}/src/main/resources/application.properties (100%) rename {workspaces/backend => backend}/src/main/resources/db/migration/V1__initial_schema.sql (100%) rename {workspaces/backend => backend}/src/test/java/org/raddatz/familienarchiv/FamilienarchivApplicationTests.java (100%) create mode 100644 docker-compose.yml rename {workspaces/frontend => frontend}/.gitignore (100%) rename {workspaces/frontend => frontend}/.npmrc (100%) rename {workspaces/frontend => frontend}/.prettierignore (100%) rename {workspaces/frontend => frontend}/.prettierrc (100%) rename {workspaces/frontend => frontend}/.vscode/settings.json (100%) rename {workspaces/frontend => frontend}/README.md (100%) rename {workspaces/frontend => frontend}/eslint.config.js (100%) rename {workspaces/frontend => frontend}/messages/de.json (100%) rename {workspaces/frontend => frontend}/messages/en.json (100%) rename {workspaces/frontend => frontend}/messages/es.json (100%) rename {workspaces/frontend => frontend}/package-lock.json (100%) rename {workspaces/frontend => frontend}/package.json (100%) rename {workspaces/frontend => frontend}/project.inlang/cache/plugins/2sy648wh9sugi (100%) rename {workspaces/frontend => frontend}/project.inlang/cache/plugins/ygx0uiahq6uw (100%) rename {workspaces/frontend => frontend}/project.inlang/project_id (100%) rename {workspaces/frontend => frontend}/project.inlang/settings.json (100%) rename {workspaces/frontend => frontend}/src/app.d.ts (100%) rename {workspaces/frontend => frontend}/src/app.html (100%) rename {workspaces/frontend => frontend}/src/demo.spec.ts (100%) rename {workspaces/frontend => frontend}/src/hooks.server.ts (100%) rename {workspaces/frontend => frontend}/src/hooks.ts (100%) rename {workspaces/frontend => frontend}/src/lib/assets/favicon.svg (100%) rename {workspaces/frontend => frontend}/src/lib/components/PersonTypeahead.svelte (100%) rename {workspaces/frontend => frontend}/src/lib/components/TagInput.svelte (100%) rename {workspaces/frontend => frontend}/src/lib/index.ts (100%) rename {workspaces/frontend => frontend}/src/routes/+layout.server.ts (100%) rename {workspaces/frontend => frontend}/src/routes/+layout.svelte (100%) rename {workspaces/frontend => frontend}/src/routes/+page.server.ts (100%) rename {workspaces/frontend => frontend}/src/routes/+page.svelte (100%) rename {workspaces/frontend => frontend}/src/routes/admin/+page.server.ts (100%) rename {workspaces/frontend => frontend}/src/routes/admin/+page.svelte (100%) rename {workspaces/frontend => frontend}/src/routes/api/persons/+server.ts (100%) rename {workspaces/frontend => frontend}/src/routes/api/tags/+server.ts (100%) rename {workspaces/frontend => frontend}/src/routes/conversations/+page.server.ts (100%) rename {workspaces/frontend => frontend}/src/routes/conversations/+page.svelte (100%) rename {workspaces/frontend => frontend}/src/routes/demo/+page.svelte (100%) rename {workspaces/frontend => frontend}/src/routes/demo/paraglide/+page.svelte (100%) rename {workspaces/frontend => frontend}/src/routes/documents/[id]/+page.server.ts (100%) rename {workspaces/frontend => frontend}/src/routes/documents/[id]/+page.svelte (100%) rename {workspaces/frontend => frontend}/src/routes/documents/[id]/edit/+page.server.ts (100%) rename {workspaces/frontend => frontend}/src/routes/documents/[id]/edit/+page.svelte (100%) rename {workspaces/frontend => frontend}/src/routes/layout.css (100%) rename {workspaces/frontend => frontend}/src/routes/login/+page.server.ts (100%) rename {workspaces/frontend => frontend}/src/routes/login/+page.svelte (100%) rename {workspaces/frontend => frontend}/src/routes/logout/+page.server.ts (100%) rename {workspaces/frontend => frontend}/src/routes/page.svelte.spec.ts (100%) rename {workspaces/frontend => frontend}/src/routes/persons/+page.server.ts (100%) rename {workspaces/frontend => frontend}/src/routes/persons/+page.svelte (100%) rename {workspaces/frontend => frontend}/src/routes/persons/[id]/+page.server.ts (100%) rename {workspaces/frontend => frontend}/src/routes/persons/[id]/+page.svelte (100%) rename {workspaces/frontend => frontend}/static/robots.txt (100%) rename {workspaces/frontend => frontend}/svelte.config.js (100%) rename {workspaces/frontend => frontend}/tailwind.config.js (100%) rename {workspaces/frontend => frontend}/tsconfig.json (100%) rename {workspaces/frontend => frontend}/vite.config.ts (100%) rename {workspaces/frontend => frontend}/yarn.lock (100%) create mode 100644 scripts/generate_data.py create mode 100644 scripts/schema.sql delete mode 100644 workspaces/backend/target/classes/application.properties delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/FamilienarchivApplication.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/config/DataInitializer.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/config/MinioConfig.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/config/SecurityConfig.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/AdminController.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/DocumentController.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/GroupController.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/PersonController.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/TagController.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/UserController.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/dto/CreateUserRequest.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/dto/DocumentUpdateDTO.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/dto/GroupDTO.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/model/AppUser$AppUserBuilder.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/model/AppUser.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Document$DocumentBuilder.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Document.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/model/DocumentStatus.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Person$PersonBuilder.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Person.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Tag$TagBuilder.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Tag.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/model/UserGroup$UserGroupBuilder.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/model/UserGroup.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/repository/AppUserRepository.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/repository/DocumentRepository.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/repository/DocumentSpecifications.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/repository/PersonRepository.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/repository/TagRepository.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/repository/UserGroupRepository.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/security/Permission.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/security/PermissionAspect.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/security/RequirePermission.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/service/CustomUserDetailsService.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/service/DocumentService.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/service/ExcelService.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/service/FileService$S3FileDownload.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/service/FileService$StorageFileNotFoundException.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/service/FileService.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/service/MassImportService.class delete mode 100644 workspaces/backend/target/classes/org/raddatz/familienarchiv/service/UserService.class delete mode 100644 workspaces/backend/target/test-classes/org/raddatz/familienarchiv/FamilienarchivApplicationTests.class diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5db274a4..470ac343 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,7 +1,7 @@ { "name": "Java Backend", "dockerComposeFile": [ - "../../docker-compose.yml" + "../docker-compose.yml" ], "service": "backend", "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..2b933729 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +# Runtime data (Docker volumes) +data/ +import-data/ + +# Secrets +.env + +# Dev scripts / DB dumps +scripts/large-data.sql diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..cd65a444 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,93 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +**Familienarchiv** is a family document archival system — a full-stack web app for digitizing, organizing, and searching family documents. Key features: file uploads (stored in MinIO/S3), metadata management, Excel batch import, full-text search, conversation threads between family members, and role-based access control. + +## Stack + +- **Backend**: Spring Boot 4.0 (Java 21, Maven, Jetty, JPA/Hibernate, Flyway, Spring Security, Spring Session JDBC) +- **Frontend**: SvelteKit 2 with Svelte 5, TypeScript, Tailwind CSS 4, Paraglide.js (i18n: de/en/es) +- **Database**: PostgreSQL 16 +- **Object Storage**: MinIO (S3-compatible) +- **Infrastructure**: Docker Compose + +## Common Commands + +### Running the Full Stack +```bash +# From repo root — starts PostgreSQL, MinIO, and Spring Boot backend +docker-compose up -d +``` + +### Backend (Spring Boot) +```bash +cd backend + +./mvnw spring-boot:run # Run locally +./mvnw clean package # Build JAR (with tests) +./mvnw clean package -DskipTests +./mvnw test # Run all tests +./mvnw test -Dtest=ClassName # Run a single test class +``` + +### Frontend (SvelteKit) +```bash +cd frontend + +npm install +npm run dev # Dev server (port 3000) +npm run build # Production build +npm run preview # Preview production build + +npm run lint # Prettier + ESLint check +npm run format # Auto-fix formatting +npm run check # svelte-check (type checking) +npm run test # Vitest unit tests +``` + +## Architecture + +### Backend (`backend/src/main/java/org/raddatz/familienarchiv/`) + +Layered architecture: + +- **`model/`** — JPA entities: `Document`, `Person`, `AppUser`, `UserGroup`, `Tag`, `DocumentStatus` (enum: PLACEHOLDER → UPLOADED → TRANSCRIBED → REVIEWED → ARCHIVED) +- **`repository/`** — Spring Data repositories + `DocumentSpecifications` for complex filtered queries +- **`service/`** — Core business logic: `DocumentService` (uploads, search, Excel import), `FileService` (MinIO/S3), `ExcelService`, `MassImportService`, `UserService` +- **`controller/`** — REST endpoints: `DocumentController`, `PersonController`, `UserController`, `AdminController`, `GroupController`, `TagController` +- **`security/`** — `SecurityConfig` (HTTP Basic + form login, CSRF disabled), `PermissionAspect` (AOP enforcement of `@RequirePermission`), `CustomUserDetailsService` +- **`config/`** — `MinioConfig` (creates S3Client, validates connectivity on startup), `AsyncConfig` + +Database migrations live in `src/main/resources/db/migration/` (Flyway). Configuration in `src/main/resources/application.properties` — most values injected from environment variables (DB credentials, MinIO endpoint/credentials/bucket, upload limits, Excel column mappings). + +### Frontend (`backend/workspaces/frontend/src/`) + +- **`hooks.server.ts`** — Central middleware: reads `auth_token` cookie, injects it into all API calls to the backend, loads current user context +- **`routes/`** — File-based routing. Main pages: `/` (search/home), `/documents/[id]`, `/documents/[id]/edit`, `/persons`, `/persons/[id]`, `/conversations`, `/admin`, `/login` +- **`routes/api/`** — SvelteKit API endpoints for typeahead (persons, tags) — these call the Spring Boot backend +- **`lib/components/`** — `PersonTypeahead.svelte`, `TagInput.svelte` +- **`messages/`** — Paraglide.js translation files (`de.json`, `en.json`, `es.json`) + +Authentication: form login → backend sets session → `auth_token` cookie → hooks.server.ts injects into all backend requests. + +### Key Design Patterns + +- **Search**: `DocumentSpecifications` (Spring Data JPA Specification pattern) enables composable, dynamic query building for the document search endpoint +- **Permissions**: `@RequirePermission` annotation processed by `PermissionAspect` (AOP) — checks user's `UserGroup` permissions at the method level +- **Excel Import**: Configurable column index mapping in `application.properties`; `ExcelService` parses → `MassImportService` upserts documents +- **File Storage**: `FileService` wraps AWS SDK v2 `S3Client` with path-style access for MinIO compatibility + +### Infrastructure + +The `docker-compose.yml` at the repo root orchestrates everything. A MinIO MC helper container runs at startup to create the `archive-documents` bucket and set permissions. The backend container depends on both `db` and `minio` being healthy before starting. + +## API Testing + +HTTP test files are in `backend/api_tests/` (`Document.http`, `User.http`) for use with the VS Code REST Client extension. + +## Dev Container + +A `.devcontainer/` config is available (Java 21 + Node 24, with ports 8080 and 3000 forwarded). Use VS Code's "Reopen in Container" to get a pre-configured environment with Spring Boot Tools, Lombok support, and database/MinIO services running. diff --git a/workspaces/backend/.gitignore b/backend/.gitignore similarity index 100% rename from workspaces/backend/.gitignore rename to backend/.gitignore diff --git a/workspaces/backend/Dockerfile b/backend/Dockerfile similarity index 100% rename from workspaces/backend/Dockerfile rename to backend/Dockerfile diff --git a/workspaces/backend/HELP.md b/backend/HELP.md similarity index 100% rename from workspaces/backend/HELP.md rename to backend/HELP.md diff --git a/workspaces/backend/api_tests/Admin-Auth.http b/backend/api_tests/Admin-Auth.http similarity index 100% rename from workspaces/backend/api_tests/Admin-Auth.http rename to backend/api_tests/Admin-Auth.http diff --git a/workspaces/backend/api_tests/Document.http b/backend/api_tests/Document.http similarity index 100% rename from workspaces/backend/api_tests/Document.http rename to backend/api_tests/Document.http diff --git a/workspaces/backend/api_tests/User.http b/backend/api_tests/User.http similarity index 100% rename from workspaces/backend/api_tests/User.http rename to backend/api_tests/User.http diff --git a/workspaces/backend/api_tests/demo.pdf b/backend/api_tests/demo.pdf similarity index 100% rename from workspaces/backend/api_tests/demo.pdf rename to backend/api_tests/demo.pdf diff --git a/workspaces/backend/api_tests/metadata.xlsx b/backend/api_tests/metadata.xlsx similarity index 100% rename from workspaces/backend/api_tests/metadata.xlsx rename to backend/api_tests/metadata.xlsx diff --git a/workspaces/backend/mvnw b/backend/mvnw similarity index 100% rename from workspaces/backend/mvnw rename to backend/mvnw diff --git a/workspaces/backend/mvnw.cmd b/backend/mvnw.cmd similarity index 100% rename from workspaces/backend/mvnw.cmd rename to backend/mvnw.cmd diff --git a/workspaces/backend/pom.xml b/backend/pom.xml similarity index 100% rename from workspaces/backend/pom.xml rename to backend/pom.xml diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/FamilienarchivApplication.java b/backend/src/main/java/org/raddatz/familienarchiv/FamilienarchivApplication.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/FamilienarchivApplication.java rename to backend/src/main/java/org/raddatz/familienarchiv/FamilienarchivApplication.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/config/AsyncConfig.java b/backend/src/main/java/org/raddatz/familienarchiv/config/AsyncConfig.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/config/AsyncConfig.java rename to backend/src/main/java/org/raddatz/familienarchiv/config/AsyncConfig.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/config/DataInitializer.java b/backend/src/main/java/org/raddatz/familienarchiv/config/DataInitializer.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/config/DataInitializer.java rename to backend/src/main/java/org/raddatz/familienarchiv/config/DataInitializer.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/config/MinioConfig.java b/backend/src/main/java/org/raddatz/familienarchiv/config/MinioConfig.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/config/MinioConfig.java rename to backend/src/main/java/org/raddatz/familienarchiv/config/MinioConfig.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/config/SecurityConfig.java b/backend/src/main/java/org/raddatz/familienarchiv/config/SecurityConfig.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/config/SecurityConfig.java rename to backend/src/main/java/org/raddatz/familienarchiv/config/SecurityConfig.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/AdminController.java b/backend/src/main/java/org/raddatz/familienarchiv/controller/AdminController.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/AdminController.java rename to backend/src/main/java/org/raddatz/familienarchiv/controller/AdminController.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/DocumentController.java b/backend/src/main/java/org/raddatz/familienarchiv/controller/DocumentController.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/DocumentController.java rename to backend/src/main/java/org/raddatz/familienarchiv/controller/DocumentController.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/GlobalExceptionHandler.java b/backend/src/main/java/org/raddatz/familienarchiv/controller/GlobalExceptionHandler.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/GlobalExceptionHandler.java rename to backend/src/main/java/org/raddatz/familienarchiv/controller/GlobalExceptionHandler.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/GroupController.java b/backend/src/main/java/org/raddatz/familienarchiv/controller/GroupController.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/GroupController.java rename to backend/src/main/java/org/raddatz/familienarchiv/controller/GroupController.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/PersonController.java b/backend/src/main/java/org/raddatz/familienarchiv/controller/PersonController.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/PersonController.java rename to backend/src/main/java/org/raddatz/familienarchiv/controller/PersonController.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/TagController.java b/backend/src/main/java/org/raddatz/familienarchiv/controller/TagController.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/TagController.java rename to backend/src/main/java/org/raddatz/familienarchiv/controller/TagController.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/UserController.java b/backend/src/main/java/org/raddatz/familienarchiv/controller/UserController.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/controller/UserController.java rename to backend/src/main/java/org/raddatz/familienarchiv/controller/UserController.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/dto/CreateUserRequest.java b/backend/src/main/java/org/raddatz/familienarchiv/dto/CreateUserRequest.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/dto/CreateUserRequest.java rename to backend/src/main/java/org/raddatz/familienarchiv/dto/CreateUserRequest.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/dto/DocumentUpdateDTO.java b/backend/src/main/java/org/raddatz/familienarchiv/dto/DocumentUpdateDTO.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/dto/DocumentUpdateDTO.java rename to backend/src/main/java/org/raddatz/familienarchiv/dto/DocumentUpdateDTO.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/dto/GroupDTO.java b/backend/src/main/java/org/raddatz/familienarchiv/dto/GroupDTO.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/dto/GroupDTO.java rename to backend/src/main/java/org/raddatz/familienarchiv/dto/GroupDTO.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/model/AppUser.java b/backend/src/main/java/org/raddatz/familienarchiv/model/AppUser.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/model/AppUser.java rename to backend/src/main/java/org/raddatz/familienarchiv/model/AppUser.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/model/Document.java b/backend/src/main/java/org/raddatz/familienarchiv/model/Document.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/model/Document.java rename to backend/src/main/java/org/raddatz/familienarchiv/model/Document.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/model/DocumentStatus.java b/backend/src/main/java/org/raddatz/familienarchiv/model/DocumentStatus.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/model/DocumentStatus.java rename to backend/src/main/java/org/raddatz/familienarchiv/model/DocumentStatus.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/model/Person.java b/backend/src/main/java/org/raddatz/familienarchiv/model/Person.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/model/Person.java rename to backend/src/main/java/org/raddatz/familienarchiv/model/Person.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/model/Tag.java b/backend/src/main/java/org/raddatz/familienarchiv/model/Tag.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/model/Tag.java rename to backend/src/main/java/org/raddatz/familienarchiv/model/Tag.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/model/UserGroup.java b/backend/src/main/java/org/raddatz/familienarchiv/model/UserGroup.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/model/UserGroup.java rename to backend/src/main/java/org/raddatz/familienarchiv/model/UserGroup.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/repository/AppUserRepository.java b/backend/src/main/java/org/raddatz/familienarchiv/repository/AppUserRepository.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/repository/AppUserRepository.java rename to backend/src/main/java/org/raddatz/familienarchiv/repository/AppUserRepository.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/repository/DocumentRepository.java b/backend/src/main/java/org/raddatz/familienarchiv/repository/DocumentRepository.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/repository/DocumentRepository.java rename to backend/src/main/java/org/raddatz/familienarchiv/repository/DocumentRepository.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/repository/DocumentSpecifications.java b/backend/src/main/java/org/raddatz/familienarchiv/repository/DocumentSpecifications.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/repository/DocumentSpecifications.java rename to backend/src/main/java/org/raddatz/familienarchiv/repository/DocumentSpecifications.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/repository/PersonRepository.java b/backend/src/main/java/org/raddatz/familienarchiv/repository/PersonRepository.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/repository/PersonRepository.java rename to backend/src/main/java/org/raddatz/familienarchiv/repository/PersonRepository.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/repository/TagRepository.java b/backend/src/main/java/org/raddatz/familienarchiv/repository/TagRepository.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/repository/TagRepository.java rename to backend/src/main/java/org/raddatz/familienarchiv/repository/TagRepository.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/repository/UserGroupRepository.java b/backend/src/main/java/org/raddatz/familienarchiv/repository/UserGroupRepository.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/repository/UserGroupRepository.java rename to backend/src/main/java/org/raddatz/familienarchiv/repository/UserGroupRepository.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/security/Permission.java b/backend/src/main/java/org/raddatz/familienarchiv/security/Permission.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/security/Permission.java rename to backend/src/main/java/org/raddatz/familienarchiv/security/Permission.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/security/PermissionAspect.java b/backend/src/main/java/org/raddatz/familienarchiv/security/PermissionAspect.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/security/PermissionAspect.java rename to backend/src/main/java/org/raddatz/familienarchiv/security/PermissionAspect.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/security/RequirePermission.java b/backend/src/main/java/org/raddatz/familienarchiv/security/RequirePermission.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/security/RequirePermission.java rename to backend/src/main/java/org/raddatz/familienarchiv/security/RequirePermission.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/service/CustomUserDetailsService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/CustomUserDetailsService.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/service/CustomUserDetailsService.java rename to backend/src/main/java/org/raddatz/familienarchiv/service/CustomUserDetailsService.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java rename to backend/src/main/java/org/raddatz/familienarchiv/service/DocumentService.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/service/ExcelService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/ExcelService.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/service/ExcelService.java rename to backend/src/main/java/org/raddatz/familienarchiv/service/ExcelService.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/service/FileService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/FileService.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/service/FileService.java rename to backend/src/main/java/org/raddatz/familienarchiv/service/FileService.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/service/MassImportService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/MassImportService.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/service/MassImportService.java rename to backend/src/main/java/org/raddatz/familienarchiv/service/MassImportService.java diff --git a/workspaces/backend/src/main/java/org/raddatz/familienarchiv/service/UserService.java b/backend/src/main/java/org/raddatz/familienarchiv/service/UserService.java similarity index 100% rename from workspaces/backend/src/main/java/org/raddatz/familienarchiv/service/UserService.java rename to backend/src/main/java/org/raddatz/familienarchiv/service/UserService.java diff --git a/workspaces/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties similarity index 100% rename from workspaces/backend/src/main/resources/application.properties rename to backend/src/main/resources/application.properties diff --git a/workspaces/backend/src/main/resources/db/migration/V1__initial_schema.sql b/backend/src/main/resources/db/migration/V1__initial_schema.sql similarity index 100% rename from workspaces/backend/src/main/resources/db/migration/V1__initial_schema.sql rename to backend/src/main/resources/db/migration/V1__initial_schema.sql diff --git a/workspaces/backend/src/test/java/org/raddatz/familienarchiv/FamilienarchivApplicationTests.java b/backend/src/test/java/org/raddatz/familienarchiv/FamilienarchivApplicationTests.java similarity index 100% rename from workspaces/backend/src/test/java/org/raddatz/familienarchiv/FamilienarchivApplicationTests.java rename to backend/src/test/java/org/raddatz/familienarchiv/FamilienarchivApplicationTests.java diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..5ec3bf33 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,112 @@ +services: + # --- Datenbank: PostgreSQL --- + db: + image: postgres:16-alpine + container_name: archive-db + restart: unless-stopped + environment: + POSTGRES_USER: ${POSTGRES_USER} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: ${POSTGRES_DB} + volumes: + - ./data/postgres:/var/lib/postgresql/data + ports: + - "${PORT_DB}:5432" + networks: + - archive-net + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] + interval: 5s + timeout: 5s + retries: 5 + + # --- Object Storage: MinIO (S3 kompatibel) --- + minio: + image: minio/minio:latest + container_name: archive-minio + restart: unless-stopped + command: server /data --console-address ":9001" + environment: + MINIO_ROOT_USER: ${MINIO_ROOT_USER} + MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD} + volumes: + - ./data/minio:/data + ports: + - "${PORT_MINIO_API}:9000" # API Port + - "${PORT_MINIO_CONSOLE}:9001" # Web-Oberfläche + networks: + - archive-net + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] + interval: 30s + timeout: 20s + retries: 3 + + # --- Helper: Erstellt automatisch den Bucket --- + create-buckets: + image: minio/mc + depends_on: + minio: + condition: service_healthy + entrypoint: > + /bin/sh -c " + /usr/bin/mc alias set myminio http://minio:9000 ${MINIO_ROOT_USER} ${MINIO_ROOT_PASSWORD}; + /usr/bin/mc mb myminio/${MINIO_DEFAULT_BUCKETS} --ignore-existing; + /usr/bin/mc anonymous set private myminio/${MINIO_DEFAULT_BUCKETS}; + exit 0; + " + networks: + - archive-net + + # --- Backend: Spring Boot --- + backend: + build: + context: ./backend + dockerfile: Dockerfile + container_name: archive-backend + command: sleep infinity + restart: unless-stopped + volumes: + - ./backend:/workspaces/backend:cached + - ./import-data:/import # Mappt den lokalen Ordner "import-data" auf "/import" im Container + depends_on: + db: + condition: service_healthy + minio: + condition: service_healthy + environment: + SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/${POSTGRES_DB} + SPRING_DATASOURCE_USERNAME: ${POSTGRES_USER} + SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD} + # MinIO Konfiguration für Spring Boot (S3) + S3_ENDPOINT: http://minio:9000 + S3_ACCESS_KEY: ${MINIO_ROOT_USER} + S3_SECRET_KEY: ${MINIO_ROOT_PASSWORD} + S3_BUCKET_NAME: ${MINIO_DEFAULT_BUCKETS} + S3_REGION: us-east-1 # MinIO Standard + ports: + - "${PORT_BACKEND}:8080" + networks: + - archive-net + + # --- Frontend: SvelteKit --- + # Auch hier brauchen wir erst das Dockerfile im frontend Ordner. + # frontend: + # build: ./frontend + # container_name: archive-frontend + # restart: unless-stopped + # depends_on: + # - backend + # environment: + # # SvelteKit SSR braucht die interne Docker-URL zum Backend + # API_BASE_URL: http://backend:8080 + # # Der Browser braucht die öffentliche URL (falls Client-Side Fetching genutzt wird) + # PUBLIC_API_BASE_URL: http://localhost:${PORT_BACKEND} + # ports: + # - "${PORT_FRONTEND}:3000" + # networks: + # - archive-net + +networks: + archive-net: + driver: bridge diff --git a/workspaces/frontend/.gitignore b/frontend/.gitignore similarity index 100% rename from workspaces/frontend/.gitignore rename to frontend/.gitignore diff --git a/workspaces/frontend/.npmrc b/frontend/.npmrc similarity index 100% rename from workspaces/frontend/.npmrc rename to frontend/.npmrc diff --git a/workspaces/frontend/.prettierignore b/frontend/.prettierignore similarity index 100% rename from workspaces/frontend/.prettierignore rename to frontend/.prettierignore diff --git a/workspaces/frontend/.prettierrc b/frontend/.prettierrc similarity index 100% rename from workspaces/frontend/.prettierrc rename to frontend/.prettierrc diff --git a/workspaces/frontend/.vscode/settings.json b/frontend/.vscode/settings.json similarity index 100% rename from workspaces/frontend/.vscode/settings.json rename to frontend/.vscode/settings.json diff --git a/workspaces/frontend/README.md b/frontend/README.md similarity index 100% rename from workspaces/frontend/README.md rename to frontend/README.md diff --git a/workspaces/frontend/eslint.config.js b/frontend/eslint.config.js similarity index 100% rename from workspaces/frontend/eslint.config.js rename to frontend/eslint.config.js diff --git a/workspaces/frontend/messages/de.json b/frontend/messages/de.json similarity index 100% rename from workspaces/frontend/messages/de.json rename to frontend/messages/de.json diff --git a/workspaces/frontend/messages/en.json b/frontend/messages/en.json similarity index 100% rename from workspaces/frontend/messages/en.json rename to frontend/messages/en.json diff --git a/workspaces/frontend/messages/es.json b/frontend/messages/es.json similarity index 100% rename from workspaces/frontend/messages/es.json rename to frontend/messages/es.json diff --git a/workspaces/frontend/package-lock.json b/frontend/package-lock.json similarity index 100% rename from workspaces/frontend/package-lock.json rename to frontend/package-lock.json diff --git a/workspaces/frontend/package.json b/frontend/package.json similarity index 100% rename from workspaces/frontend/package.json rename to frontend/package.json diff --git a/workspaces/frontend/project.inlang/cache/plugins/2sy648wh9sugi b/frontend/project.inlang/cache/plugins/2sy648wh9sugi similarity index 100% rename from workspaces/frontend/project.inlang/cache/plugins/2sy648wh9sugi rename to frontend/project.inlang/cache/plugins/2sy648wh9sugi diff --git a/workspaces/frontend/project.inlang/cache/plugins/ygx0uiahq6uw b/frontend/project.inlang/cache/plugins/ygx0uiahq6uw similarity index 100% rename from workspaces/frontend/project.inlang/cache/plugins/ygx0uiahq6uw rename to frontend/project.inlang/cache/plugins/ygx0uiahq6uw diff --git a/workspaces/frontend/project.inlang/project_id b/frontend/project.inlang/project_id similarity index 100% rename from workspaces/frontend/project.inlang/project_id rename to frontend/project.inlang/project_id diff --git a/workspaces/frontend/project.inlang/settings.json b/frontend/project.inlang/settings.json similarity index 100% rename from workspaces/frontend/project.inlang/settings.json rename to frontend/project.inlang/settings.json diff --git a/workspaces/frontend/src/app.d.ts b/frontend/src/app.d.ts similarity index 100% rename from workspaces/frontend/src/app.d.ts rename to frontend/src/app.d.ts diff --git a/workspaces/frontend/src/app.html b/frontend/src/app.html similarity index 100% rename from workspaces/frontend/src/app.html rename to frontend/src/app.html diff --git a/workspaces/frontend/src/demo.spec.ts b/frontend/src/demo.spec.ts similarity index 100% rename from workspaces/frontend/src/demo.spec.ts rename to frontend/src/demo.spec.ts diff --git a/workspaces/frontend/src/hooks.server.ts b/frontend/src/hooks.server.ts similarity index 100% rename from workspaces/frontend/src/hooks.server.ts rename to frontend/src/hooks.server.ts diff --git a/workspaces/frontend/src/hooks.ts b/frontend/src/hooks.ts similarity index 100% rename from workspaces/frontend/src/hooks.ts rename to frontend/src/hooks.ts diff --git a/workspaces/frontend/src/lib/assets/favicon.svg b/frontend/src/lib/assets/favicon.svg similarity index 100% rename from workspaces/frontend/src/lib/assets/favicon.svg rename to frontend/src/lib/assets/favicon.svg diff --git a/workspaces/frontend/src/lib/components/PersonTypeahead.svelte b/frontend/src/lib/components/PersonTypeahead.svelte similarity index 100% rename from workspaces/frontend/src/lib/components/PersonTypeahead.svelte rename to frontend/src/lib/components/PersonTypeahead.svelte diff --git a/workspaces/frontend/src/lib/components/TagInput.svelte b/frontend/src/lib/components/TagInput.svelte similarity index 100% rename from workspaces/frontend/src/lib/components/TagInput.svelte rename to frontend/src/lib/components/TagInput.svelte diff --git a/workspaces/frontend/src/lib/index.ts b/frontend/src/lib/index.ts similarity index 100% rename from workspaces/frontend/src/lib/index.ts rename to frontend/src/lib/index.ts diff --git a/workspaces/frontend/src/routes/+layout.server.ts b/frontend/src/routes/+layout.server.ts similarity index 100% rename from workspaces/frontend/src/routes/+layout.server.ts rename to frontend/src/routes/+layout.server.ts diff --git a/workspaces/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte similarity index 100% rename from workspaces/frontend/src/routes/+layout.svelte rename to frontend/src/routes/+layout.svelte diff --git a/workspaces/frontend/src/routes/+page.server.ts b/frontend/src/routes/+page.server.ts similarity index 100% rename from workspaces/frontend/src/routes/+page.server.ts rename to frontend/src/routes/+page.server.ts diff --git a/workspaces/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte similarity index 100% rename from workspaces/frontend/src/routes/+page.svelte rename to frontend/src/routes/+page.svelte diff --git a/workspaces/frontend/src/routes/admin/+page.server.ts b/frontend/src/routes/admin/+page.server.ts similarity index 100% rename from workspaces/frontend/src/routes/admin/+page.server.ts rename to frontend/src/routes/admin/+page.server.ts diff --git a/workspaces/frontend/src/routes/admin/+page.svelte b/frontend/src/routes/admin/+page.svelte similarity index 100% rename from workspaces/frontend/src/routes/admin/+page.svelte rename to frontend/src/routes/admin/+page.svelte diff --git a/workspaces/frontend/src/routes/api/persons/+server.ts b/frontend/src/routes/api/persons/+server.ts similarity index 100% rename from workspaces/frontend/src/routes/api/persons/+server.ts rename to frontend/src/routes/api/persons/+server.ts diff --git a/workspaces/frontend/src/routes/api/tags/+server.ts b/frontend/src/routes/api/tags/+server.ts similarity index 100% rename from workspaces/frontend/src/routes/api/tags/+server.ts rename to frontend/src/routes/api/tags/+server.ts diff --git a/workspaces/frontend/src/routes/conversations/+page.server.ts b/frontend/src/routes/conversations/+page.server.ts similarity index 100% rename from workspaces/frontend/src/routes/conversations/+page.server.ts rename to frontend/src/routes/conversations/+page.server.ts diff --git a/workspaces/frontend/src/routes/conversations/+page.svelte b/frontend/src/routes/conversations/+page.svelte similarity index 100% rename from workspaces/frontend/src/routes/conversations/+page.svelte rename to frontend/src/routes/conversations/+page.svelte diff --git a/workspaces/frontend/src/routes/demo/+page.svelte b/frontend/src/routes/demo/+page.svelte similarity index 100% rename from workspaces/frontend/src/routes/demo/+page.svelte rename to frontend/src/routes/demo/+page.svelte diff --git a/workspaces/frontend/src/routes/demo/paraglide/+page.svelte b/frontend/src/routes/demo/paraglide/+page.svelte similarity index 100% rename from workspaces/frontend/src/routes/demo/paraglide/+page.svelte rename to frontend/src/routes/demo/paraglide/+page.svelte diff --git a/workspaces/frontend/src/routes/documents/[id]/+page.server.ts b/frontend/src/routes/documents/[id]/+page.server.ts similarity index 100% rename from workspaces/frontend/src/routes/documents/[id]/+page.server.ts rename to frontend/src/routes/documents/[id]/+page.server.ts diff --git a/workspaces/frontend/src/routes/documents/[id]/+page.svelte b/frontend/src/routes/documents/[id]/+page.svelte similarity index 100% rename from workspaces/frontend/src/routes/documents/[id]/+page.svelte rename to frontend/src/routes/documents/[id]/+page.svelte diff --git a/workspaces/frontend/src/routes/documents/[id]/edit/+page.server.ts b/frontend/src/routes/documents/[id]/edit/+page.server.ts similarity index 100% rename from workspaces/frontend/src/routes/documents/[id]/edit/+page.server.ts rename to frontend/src/routes/documents/[id]/edit/+page.server.ts diff --git a/workspaces/frontend/src/routes/documents/[id]/edit/+page.svelte b/frontend/src/routes/documents/[id]/edit/+page.svelte similarity index 100% rename from workspaces/frontend/src/routes/documents/[id]/edit/+page.svelte rename to frontend/src/routes/documents/[id]/edit/+page.svelte diff --git a/workspaces/frontend/src/routes/layout.css b/frontend/src/routes/layout.css similarity index 100% rename from workspaces/frontend/src/routes/layout.css rename to frontend/src/routes/layout.css diff --git a/workspaces/frontend/src/routes/login/+page.server.ts b/frontend/src/routes/login/+page.server.ts similarity index 100% rename from workspaces/frontend/src/routes/login/+page.server.ts rename to frontend/src/routes/login/+page.server.ts diff --git a/workspaces/frontend/src/routes/login/+page.svelte b/frontend/src/routes/login/+page.svelte similarity index 100% rename from workspaces/frontend/src/routes/login/+page.svelte rename to frontend/src/routes/login/+page.svelte diff --git a/workspaces/frontend/src/routes/logout/+page.server.ts b/frontend/src/routes/logout/+page.server.ts similarity index 100% rename from workspaces/frontend/src/routes/logout/+page.server.ts rename to frontend/src/routes/logout/+page.server.ts diff --git a/workspaces/frontend/src/routes/page.svelte.spec.ts b/frontend/src/routes/page.svelte.spec.ts similarity index 100% rename from workspaces/frontend/src/routes/page.svelte.spec.ts rename to frontend/src/routes/page.svelte.spec.ts diff --git a/workspaces/frontend/src/routes/persons/+page.server.ts b/frontend/src/routes/persons/+page.server.ts similarity index 100% rename from workspaces/frontend/src/routes/persons/+page.server.ts rename to frontend/src/routes/persons/+page.server.ts diff --git a/workspaces/frontend/src/routes/persons/+page.svelte b/frontend/src/routes/persons/+page.svelte similarity index 100% rename from workspaces/frontend/src/routes/persons/+page.svelte rename to frontend/src/routes/persons/+page.svelte diff --git a/workspaces/frontend/src/routes/persons/[id]/+page.server.ts b/frontend/src/routes/persons/[id]/+page.server.ts similarity index 100% rename from workspaces/frontend/src/routes/persons/[id]/+page.server.ts rename to frontend/src/routes/persons/[id]/+page.server.ts diff --git a/workspaces/frontend/src/routes/persons/[id]/+page.svelte b/frontend/src/routes/persons/[id]/+page.svelte similarity index 100% rename from workspaces/frontend/src/routes/persons/[id]/+page.svelte rename to frontend/src/routes/persons/[id]/+page.svelte diff --git a/workspaces/frontend/static/robots.txt b/frontend/static/robots.txt similarity index 100% rename from workspaces/frontend/static/robots.txt rename to frontend/static/robots.txt diff --git a/workspaces/frontend/svelte.config.js b/frontend/svelte.config.js similarity index 100% rename from workspaces/frontend/svelte.config.js rename to frontend/svelte.config.js diff --git a/workspaces/frontend/tailwind.config.js b/frontend/tailwind.config.js similarity index 100% rename from workspaces/frontend/tailwind.config.js rename to frontend/tailwind.config.js diff --git a/workspaces/frontend/tsconfig.json b/frontend/tsconfig.json similarity index 100% rename from workspaces/frontend/tsconfig.json rename to frontend/tsconfig.json diff --git a/workspaces/frontend/vite.config.ts b/frontend/vite.config.ts similarity index 100% rename from workspaces/frontend/vite.config.ts rename to frontend/vite.config.ts diff --git a/workspaces/frontend/yarn.lock b/frontend/yarn.lock similarity index 100% rename from workspaces/frontend/yarn.lock rename to frontend/yarn.lock diff --git a/scripts/generate_data.py b/scripts/generate_data.py new file mode 100644 index 00000000..6332bf37 --- /dev/null +++ b/scripts/generate_data.py @@ -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}") \ No newline at end of file diff --git a/scripts/schema.sql b/scripts/schema.sql new file mode 100644 index 00000000..9d1a4c53 --- /dev/null +++ b/scripts/schema.sql @@ -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 + diff --git a/workspaces/backend/target/classes/application.properties b/workspaces/backend/target/classes/application.properties deleted file mode 100644 index 75c2bf09..00000000 --- a/workspaces/backend/target/classes/application.properties +++ /dev/null @@ -1,28 +0,0 @@ -spring.application.name=Familienarchiv -# --- Datenbank Konfiguration --- -spring.datasource.url=${SPRING_DATASOURCE_URL} -spring.datasource.username=${SPRING_DATASOURCE_USERNAME} -spring.datasource.password=${SPRING_DATASOURCE_PASSWORD} -spring.datasource.driver-class-name=org.postgresql.Driver - -# JPA / Hibernate -spring.jpa.hibernate.ddl-auto=create -spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect -spring.jpa.show-sql=false -# --- MinIO (S3) Konfiguration --- -# Eigene Properties (werden wir in einer Config-Klasse auslesen) -app.s3.endpoint=${S3_ENDPOINT} -app.s3.access-key=${S3_ACCESS_KEY} -app.s3.secret-key=${S3_SECRET_KEY} -app.s3.bucket=${S3_BUCKET_NAME} -app.s3.region=${S3_REGION} - -# Upload Limits erhöhen (für große Scans) -spring.servlet.multipart.max-file-size=50MB -spring.servlet.multipart.max-request-size=50MB -# --- Excel Import Mapping --- -# Spaltenindex (0 = Spalte A, 1 = Spalte B, usw.) -app.import.excel.col.filename=0 -app.import.excel.col.date=1 -app.import.excel.col.location=2 -app.import.excel.col.transcription=3 \ No newline at end of file diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/FamilienarchivApplication.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/FamilienarchivApplication.class deleted file mode 100644 index 6257e0cc4043c058854711fe3e64895f4f9b360a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 783 zcmbVKO>Yx15PeRQCS3w8DHO_=)LWVZzMx)$DwRk*g%1%F4xGFjXESBjj=bK2_*a}j z9QXnJD8$%QN_r$ad`p~BD3?VoGEu(MYx(DvGKV=}R|%k((~Ss(rL>K+G0 z1P))<##5=MR8e4HjP>zq8R>K*@u-Wcz2yxebA6@KGZt)ZgCUN&$i8x zWG~pa24B$m9LovYPzE<#W83}R!2UW%JGg;e1__5xA{fx=iNROwyB-=8wY_zhBG2o1LN2{@BXV!BF z%TNm8&P5VPLI_6)BqV7!>s;l;zx~r>(en7J&s$y!~tB$KtLp77pZNq!DxXV;&SV^Wxp8)6>Bj@dn z_F2iKW_K_x8t_b4Piej8xbEn~hSq7CmaDqDWjdmZVWozxvFIkv)NIw&66i9|b2NKE zOIwcaTJ{9fS|9KnnA-V<(av;w$F!~h){wL+IhoCNV{km}~2167A}{FhN%}-67TRv=GhbmX|TGmQwVz>AsR#2_0IdCr#aP^pvvC)0JTu+5|92+p6YhP;#NLs*3>+ z9I$mmNoa-!1C7ZgJS^>jBHcN5>gY0v*^pI)u-SMOmH5j?twDU54O|PN zN!V#LD+nk3@G@{Ch%B?=XD$X1fu=u3F4%<8_XFCg5cfAE>=bGyl816OATpy8yg@l@ zD${8yyAuxy$@DSvwuuInl-esDg7j|NjpNmJ{vQC(&jKt-~2n98_D6 z)56PF3^7%8SqUvn3+WVzPG&lJ=GozmYFwQDm8qFdWvWeTZg8fUY02_}1GilU4h?mz zz>eRHqsO(xbec@nRD(mneY&ajdnue|8dPxx**~isSB)Xn*2QzSvR)wAnZR)+arT$V zSRQ~)i!;3=HWnzZw(PN}qs2X(6P$>~?TNH&Mbp3lFA~x1*+P#Q$K323Rx`Q}Tb3K` z!U;4S>=St5fHclN&2(R7W>xs@W02DeuKHEup2L zw(Xfr4+K-0;|w+6%yQa0I4JGRK>xLxeU&?^<3#wm{zOjSgH`3!Fjr_JwdS;hz0*%|Dmw zNYu@=VCs%W{!JZiq|FlH3daRSuEG?fmrT91g{eAj;r@m1*|vnJkE!hv4VGOIWKxpa zh-W4=vrXx-9al39P3hJ~RL^i%`M##Dt*wswX}d(*V0C8tF_|u<0eDN@9D%Gf6}rCs zY{N82LlW&^YAG@goOsrZXr6O2?WD^fhr^z3z*&Je%L7%ILvd$xUz`WDApp=3qRVl2 z$DfjpgW4**w-cr-=qib>gfx_n*)gDH+CyNO>Krb}m|K{2^40rO$-u(Nw>Z-0mq zkj{ag&h9;(eSIMsfr{-M=pF14k99OkdnM9wyT_L%&()1+Omk%#BZH~JLhDV1*ai2a zItnCo&YBfLqa4T%K{-<<9}O-13rXf)0Skjyet=FP(*oSqc?gJOh!grRya6EvDr~ z1`hb2wRJ-5e;eXh$_%qz7H7Yw1pNk(N)>Tpm~Nz-CAz7&1(}Ax3}`alLbpQXJeZ0= zzPA?6J*VTxm+v`|y&cefWY0e5+&X#}y+@*VGp!Q@d!PCor|E^`(^roKkZ!H7NWZl0Q+cO>|aHk2reROZH9$FUG({oOdl3~ zs zo)CV}@8;iQ1Y*Y*qr7S&A!#{&^V}?85@W6!AKR*?v&mG>#h=Y|q||uim^i5z0>$mg ztBA8_q2r37I(k&Z3ct&=riiI2z-i`OYUy$MyhKk-yFeS80FP5LeSw}t^k8|g!A*h2 z=vH()(oPpjqp2x4*Qem2k$Y(7uxgIsnv^?wnQ%KHs#2@s0h?rQ+koE zh?~2Pt|19bwuNbuo|foPE*hFXhD=`+k%lCa1lKS_^bFHN|6VS-Ysw(DMH6Ct#48eg zB?rS-ole_UC;H&^!}MiZE76hZll1SzhUlvh)y=Bugy;{U#hW!FsfOr}p^k&2R!T+n zpP+iHNXbL=r)ay)b*&KnIZC)QjJm%>X*=Sk5PcIR42QaJ0pYDjzKEd84$Ar>D^ z=?OPPe+SQv2UF7#-Gt~nc()N(*+#{~-(#Si8YmT_?};(B3C#}E_vxP``T?BJlygUd zgIph%S>5R1C>W9G6V_+|nY#t9{WJX#P_qr7E>Qc@y25dNpMEUUztFz|fQb~oSA>sM z%X?S!hUr=QcZq(&w5*7r1ui9!G2znw1HQKus}uBC9DL;*T9}@rpGovQOi+nKP6r^< z&*=q_dqjuH!o4v#@Jk9!a_LTNPV`=s>A%Dnuqwe25vrhLBAO8e`$ifbgUM)W(y zexVIAOB{k;YgIDV#T}&M3m! zFfXFD@UL7GW`)m`_zb2M#}$lRdJ1Xevyk(ZLd9I4#koRGA|uEoUkdY5UM?{_T(Ph+ z(1aX-nUG{&!7U({tGi;^Z`&&q%ekOqp{**wbCt|(Vj$#idQvx4W226Hxln~#Ud`u7 z3@;chnS}79xF#?2xqKdi|G|OI{#e&Q?}nak{ANQjk2swa0hA7bz#5q^@L_H5>+I^; zysfXhXFyPQt<3EVM_&Vd!H7&|QBOT9{1QT)Ims91i}-C4V@)_n&&3Z#;HM*CVud@C z`C{&b1e+Ezi<5K4b$Xi)0isLhZtj5rLPYL4-RcBpa?0{8S-Z0mtr)>-euaUL8b7iZ&2mzVa!ni|pN2vSLYtKtu{|>7 z17QDQ5M=z!$iS2c@Ls4PMuBrI-TnZ~LSL8jyDSsw+)hh&NhD9=b;k#r#dbZwUQ~du zpj!#ObHdOe`nMPK$9zlZo*!JIPl8D?%d_K}F!4+$!FCk>MoyccC9(v6Ml%y^#FH~O zY!Izr@5RG<87u>kYuteSAqQ3=9c(~2VZM&9ml%r{XZmdN7eH`()*6GY^p{c5P{loZ zf4hut;CH}jV9O#`#q{+;ub1r^07p2Uz>iui?z14N>B5DoY|Iu=s&L4l;~;oh*nAq) zqA!CXi}x*z*|LzkRKtkruGY~|!&vWGxO{g3YPkS&sF8096Z5SyT}+(~65oP~Y~8zM z`W^Z#>fR+P_KjIn7Bw;76ntQk{oxnP!+$(k+{oPZ|k@!Ars~$s%*aEP&(bO zAw0d66byVu_T8EI79iH4eFeTlEh`VvSwxSaTnJ%_4`E@@hL+KCyhm#c-2#{^QLcu4 z#upZ3Xw@tO3}B{Jcpq+AxvKRLwH-Ue27ic_pjCc|Fr7{3_>&0Jxpbb7K$y-4RVw{q z>nqWK@QP3=hF?P$;8h_p#r$@oqab%v%Tsh=OQi8hYHwNjB&};{eUjEsk!zmc=rrJP zJLrF!kC7l3I_5EI@_8f3+9Wo909Z`FwgT0SsAz1g5Q>WG4XCaHMqPr!T#s@!YQ|f> zKofF@m66*f>75mnq4!1Z%+Lo{9i+Q6^wA7G&|W3LH&;#4$I)H@f5-gc~ zY&=h%ary*(60=`TJ@g2D3Zw49fruOE)0qEf(7u}Zm*jy+uv{~VR2{?XMo3=s%1Qd1 zpwRs!KS7U0G8sDfxF~!Hg{SGuyPl%oYp-q$eTfe5s*L=8Y*$s}4`REjBYzazRTKGI zY?l=IdTduH@@KJKjWvY1P&o9z29VLy$UfEJC8nj}6tOwg+{gmRJWb&0{@wNEAg>1eZf&ZP@Xu6L) zevHQX2)2B_LD%pP=vw|UwsC$!*YQu$?s>W%f}) zm~9A7vXKoysl_~g#wqj-^9rmLioSK2QwDjNiQVgdsM`=*RFC;R%xS!x$Cpzp??b5p zxQE$h2PGFY7X~rF&V$ttMi|Ek0gS7$Lk>OX+o=AeqhwI6L@d#x5{*lIg~aIAPy+nucN0p+70Px&V41V0^fSzrR&M(ozqu{$d*BBBF2Ke~Mtft1}Hs`Ybdz~$iPdF!sMMmmkM-|cy-$ENhjQs4*vo&R>cz_Tm>JcpQ1!xK5MO0;!WYiS5K55{Cq$q|{cOh1zjyIW9C|d6u5-iKQ7a zGjigzVJZ8*6)1aIOIZpnCAAHdvO_8R&X3{ny_u0ETT)OshvOq@=G}YWz4yDzyU)-4 zd*vAbL-?10CV_s}o3%Wd&C1}iH6!zO&Q^}}GIREVm2sUJd)6AW9otQX&jwlqIxffs zY2~CdYmHA|P?XQdIBp;V+jV?_ zgQMC6zo1!XJegM)U2oo+R?_ilP$qD_MN6&!@e7_+o`YL+(A(n8#ugJdp;KVfsO_lJ#r(ALCM8|gz_=Nio06Wb-{ZxWV9q86R)|5vVW9hM z{$NUniilf1y`#Q66I_&@vSeOfb{$Jz^!@C-ri82J9Y>d(?vU%Ri411>oapWl1pxcK(~nvXiZ=@dJOClFvApc zRA8N*IAx+2eGCYrDFfoXqo+Cpd!waTf*$R|fPsF21J~hEY>^2IFJVrU(rtV}d7ho6 z=CN3FNlo3bWL!on6Nb-<@v+j``6!?z#}hb!g9Zj0HZrWxq8HYcM*pP(cQlN7rEquI zgu{5bftLx~R4(da*Ud34OdJ7I$q37Ed`4hv&wVk>VQYxli1jhN!T>AfNMl&nvc$xl z7@~@T4Cd0oB0ES}-y@DLrL4d`l`$`At_%OVs;H$fG&^PDE{w3%gfU_#A(~|zqTUzg z(g_nMaf%G_&QY_BLm}YwG+3XNmLwZAe^~lzZQ|&Px!c4hT`^-AH*i{DR~_u5e&$;f zVW%^32KNXwxeRBr64JPl*EMPFHX$ZyZNa2~UDx?_LUlK1FRN8BLl^yOzo$&Jqg5mD zDib$o1n$Fm1Lx>Z9Ry@Cn6ubBvh1a{%=s4gC8l;JRbJCA<~0JD8jw^Z#D4>+5lzVi zUI%I5^#VhU8l2WgX{EVmJa>T&$KeDMi-g^rmed?(TsN>%Zay!a ztey)v4LQn7c5)7zH<5$QF~Tcy(CBZlQAEmU@R$nb-0T^t=cYh;93|RvGC!S_-8`aF z*Jt~=8oA8TCNXj;qYB}$W`GJdms{W}Wh08XXkdXBm8t1PKTvrSm%u5k*)4KZ*%GO+ zUF!_Ty?_;?WIox3`vtoC`}@1ngI!Z26T_!Y-*xu%iS*=1da^4$IW#e;i3wc6n+&|M zWWm}^OuQLy;c=wL$RI~3x6~-s-YGrHyw$|p@OFXrob3n0#mu}4=+>Q$9hG^`c{yve zEIFb40_Rx8%6%u^ZQxx3N9$B>WyaLq$HaT^-f(V;4eKnOI>o?_G&6Ao-f!Xq_#o#V zJ=GS7?d@y$W{OUj!Av{HFXowT?f5W0YTzRRH-<4<-Oj{A_!u?LxZa4&%rO)(bRkFe zM!i#Q_=LdjIsqG*I6gjlVq)Y}>ZA^vPK{5R_*9q#oRkvq@EH@I#pjq>vnm+loGxcM zJ*_=m<7V24COl%|3;3eIEqOVw=uSok_u9dnb}W#Nj@|BBv98W$j_J~y)hS#f)dd8N zh!ZrNU{LXT4_n(`N|N- zlF{ZT*;I4N?;dsC`C=hi9rlWqHG-3i1y#x3I5ARrZQ06EG2S^PbGft~sN|+rT-5_} zjWq0?>c9^ZtnX({xG0eGM_gFf&f?Ki^Zr!x{=&r9@ECc2-hsywcn;4S_zka3Rai$= z71hx3=x(ix>$d_A|NrrgOS;nOk|Wh2s>JHoZTJI|D(*MOM^288OdRPFZTJ(r#tFp^ z#onoQqx{Qg^>sc<{yM$LS;kC=igsaP#)k538 z!~G-s28ajHMV;H}%1&%SHxK7syyWl10Kbo+hqtOdNOOukN4~Nj=U4rhgH8GMekAEd z6ZbauuHXVtRvAGu5N@?KVu`mRGeOBy(4pW4jSxB#x&q1e1}?Rb2z^Pwha(#J`96r0DM#KZfp;?pbmJjnFG6WpkcF7D=b&0(N! zV-R!{+pwQuIY8PV-9Csz{L@ZHmLA5J@MX&GVN!erU!@U`lE(kx%^2`D(N=ZJtqgdWHiqnRsg|rPW^@Dg*r!5bqA-3YwN#w@Zjzf49M$*{YSlU&0 zS56#S3Z*uqa70UblYB=C<+;cennZxh=Hypm%T}3NfmK@vV2WfX^XTE#q-tXSI zGynSU>OTRD;;#vG2po0X1=E#3+9Zm^R6r_eqS`bNJ%sAE?0cVtW7kh8W9M3aJp*y zR$0wio|P-9QQLNW>06HN2^?t(PDA+Ws&C4hL(MTIZDMt1s8#~EQ8B&Jc3R~E?aZ-^ zR&tGINf_8`AccJbyN_G8<)0AP)ju#tGh{7WJy9*^lshY_GOe9;^0G81T}!v4&Q8B* zaSbD_jNa6zT*v`g^^1yj$p@yGa-AhBF!*FUgEvkz3(_%9NoTYvTsnb+0%uy9>Q?Z& zA#jg@F6>U?F1$}$?~uTFe^W2kDdM=w)O0O`bTylBZ(uG-?E4HPut#GbHt>G*(eR#H z>o|eYb^_aQQv2A@>#m#qT#wMsnX6hQ zGQ%?`e7{o54e2&fsVCOP#&n=+$?>asRSCi`fg!3|Pc1jU^fF-`F)$2MpgSL=3+o!A zV5A*4BesVbhEv>h5)a{60wV$wEm;`N+|1eyJd8(}3i6&iFYxr{j2cs^jp=SdlXNdR zdqgks!v;R0mAX?C#c{cG?X79`R8@Jt*NcvD*l`1o>0ybYlG>*|_!veLI4Ll^8SB&+ zVPH%<$GBqo#ZzitR!hF8^*Ci6ogWj!^A>3z}K%NkIxTSI%aE%_)N(h{79a^_yZ|;PXiUuxBNxc&>w3vTSh78zX zQ*FEJ>11$Ev_+kG=fJu94#*ftR;Uj?rd$rOuYV+V`NE zn3T3$P;QidCZ(S*>ehng`R;N+tODi}U`Bsoo5ZS#ZAf=pQp>=CPDV*-FGqSOUOb$YHai)i z!!>toB4p~p%tGeEwu5;h-2Llu!kFykj>1x+iYo~$2~2I1_v=I$xQb;~48alZd{_Vq zJiocM)C-Sxg=a{u_{mL|2XVr!(~M-E-Y##NfxfxppgT#w*amS-ptw0dtl5BDnziq= zE|DTnhg1tv|Fif~0$&u!?=-`j2sH2t^mc9ZqcY1emL z&Q7vwxQWwg{~4$1<`oZu-17I=&V?Z-hIPp=@MzOzkzi{tV!~NfmchKip*?1sPOP1O zYj;{35H|oZ$8BAPUR1f7W`s?RIgZbAMOMOspQoE|;^hQh5;$Bxq*(Tnv#88$P=#}# zoR@juahDCef>#B4ctogm3H-Z1cD#vZhTs#@E|iqlmvx-QY9$>THskASuXs#^%W!G}T3+%_g>KhcK0)w>??YDgvfwjRwdC1$S_2Gs4Y3g0PFyU8y zF~+w&eCIV55B=S2?Pe>=Sy#+b}NO!0m7Gy@T_@QNTg$=erS(!5z4hEuMey zo+en+l-j}X2j0eAmj?fayKmsV*`dJ|+`EGNhw8|;2ihGX>b*p~FOYB`oEb?lsNVzl z03``Lh<3HgOuOMoJIca&OmW7?IkSrgOg@+(pbap?cWvNV zKDB{QMCv66Z{Wh<(BEmgkJ9TZn^xel5P>^s0ALowhU*l-$v zbx$P#X7onDXE|5vnH*e&r@i5?#Wnf;Xbd;W3#n@jxVq=_0WLE@gd1P~7wVAO@@RnT zVwL%P1Dx*p3VS;7RsMJ2YXPP7BEQb|3;cb9zd?Tg7Onand>7vf-oB4F@T1`E$M`9J q7QFo&zrwHa8;(EB@xR6I@kf%UfIs0cBvO&jx2VyxETXSt-~RyJcrt|m diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/AdminController.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/AdminController.class deleted file mode 100644 index 91b8b9166f04f4db81eec8820f2fc0da1dd45ea5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2175 zcmbVNYg1cA7=AVc0;fkqV=cv6?9~RaoT{}KL#b(cLjy&EaXNn5Buld8WH;TjCmsA% zI-{*qXZ!(g%z?kyBU+=wy4TT)y~Qb={AOUiYSLXTOTtFxdiTOE zdAN-E4Dt+@-9Q~;0(>lBks+mb7;X=Tl8kHNZAK|umP)M0?V2!KE@6gTS=V`3{Hy@?TBIV!(S#YN9zs)LEmzThharpQOHi<&NMD~c!aMrSY^0& zlvlvVHz*U16J8~+3eDj@Z0qNr9mhlR#^A3i8txwAi710_87}>+8wb@ig9^jkXi);T zqyacb06a!`N+94+m`*7=XD~_JsUGFw7=7O*u1~*regKPz$`Y@PG;x5r-!c7U;TPnd zyugX?U*Qz+5+A<6+1$n7@bOPQE1%H6N49|(x<7?0baM7c8%qf2OF`o*dHs~m6GVMR zU*~0ow49!|@DiUdEdGkz&qSr*EIK(50y}Fb6REy6=gs9q?-|{V6F8Gt8rO+P;YKf| qGvw?h(YHt_N$X1#+*x25x5;l3;e8T&fHkb+F>yQ+*uW;XF#9(#@q*X@ diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/DocumentController.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/DocumentController.class deleted file mode 100644 index 0ed07fd91d7ab261ab5ff8c0675436c705a30e83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9275 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 diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/GroupController.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/GroupController.class deleted file mode 100644 index a0e7ef1dc82c3f9033a1d6f5e59115c8eac95eab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5170 zcmcgw`BNL`8Gb&2StHg)QE*Z>bs!G5IW0ReaS~x#a~P9y6#=cAw(d&$fHljmyt{(n z)IHKR>D?qf()+$ox6@!dndx+NO`XtxEXPLp12{T#>e|$wkvMvz9z> z+m3JeCXHsoYdW?ev#G3U=TkZU^b4>Aq|HFdg>r&hu3km;b9%`z+r)=LDM$ZDS8`uGSX0{?p|zWM*4N^LsJVYhEi2u5gK!r}PC7ZmS~Of!Jx7O){)$QbpRHF+ckg)A(?FOAgpJ`Y9kUup zs%C;eMq+e&|_Xy+7ZDpM>JID}m`f;r4<$PmwW%G0rcMdHG7$1G3I zuei>J!0GCQ-6^m}<+21#dXWfgIP&rdGYqg*-dC*j|-fvGgE6UpE@@1NtW)mB3C}pCcEyESbsp*ZS^(mNO!YMJQ8he6ZU$Il`uJJ zIcr&GH8n16>2l2E37!T#%tmJ!YuUWf$(7>SyJSs8QmN%7p|lvYbNEHCf&dMlW81BT z{(Cbw;|utbhA#>{UQ0l*kYD6h9_rNbWqgGT`Si^EcW!J^jGAhz+0Q*?9kf~hu-wgBXni_%F|ECNs0G@=#=8AHFqPOR*OHQ1v| zy^f1%D%d~nwe)y0S9E!kVg9ZbO;=VHPO87hoh#zp#*#QcIyEtUd3J1WY9f=Fn3?8$ z8Fn1s^IfA5t~OpA-@^|ye4m$zN;@&_b!SzkCIifo&{#5Z>K3Wvhxid^9WNQBBY}Ta z58j9~6n@dL^Op2FCmmzmlp$^1F#|ni1z|OYmOD0e&Cksrqew9>PNc5AaOm zq#zscAb&lIQUbf*M%$&EcxbAxcMI>_LWlb9+(K8+U(nZg8z*D<8`^H+%ncI9@GL)* zXyj)nwI8G8<1E}0Nb{s46o^5b;}b<=2=AuK{j~l){7;V2WR?B*EWj}OpD8WcDj3pka- z4Y`d5Eo5(l z4e-X)EvzQ(+bG0vBd{n*7LRsR(w3%wgFHRQOY~4x+S<$hv`7B55l}^}Q=RgHFw1C^ z6{S$QAUI{OPumd#HD77y@Qg{OrUU)#dRwt-2(7es=JtR9j@mIwmtQxyLa z-zch2^IHXADhfbr&rN)$r}s_t_4K`oYk%Ua5TBvQBUR3|mYr)2sz<484eBSvBy+Nl zP}Y!0#8s(No6^)v?do64+j!;DpYi#d_-dsJLM{D)mKcc|@j5?a_*xK$BV_$LpT9v- vA)LR7H`Lz}-@>=?9llcD{+MJx#V_zn{E8<@vi};t#qV*L+us2G(A4~2#slm{ diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/PersonController.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/PersonController.class deleted file mode 100644 index 3ea4199dd4e542fef2b00fbf3778ff9daa511075..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3752 zcmbtWYj+bx7=9+bq)nDKR45cLlu{sVfdxfGQovrJnl`m*tAK)&WZEp~3yN4Dr~WWOpX>-k0v0*rvYO23gV=*%Z=`#bvk@PgWyH zOUJM_6Jwrsx2P5y4ljs%wzH+@r7Y?z!Y$gCE9NX|$Q@GFn>IErE=!JJc<_I8P5OS6 zq+#kw!Qydtl?y4HI^E~n*1aO`mV_%kHKe`Ap|#o^?78?E8o0&5zEafCs0g@XR{ z&JqR7Fxs@H9%L$|Nxvg&~Kvu06`V^n1*poko65J z=agwq@1&fZaHe;X+?6VhDK|TBIF)zms`%J0yirB^lZGXhN`;JYRykpajwS6ZH`lpi zsCBT}Df0$_s%1~Npbav_?kd#{eaEmTEqQi}5Ez(>Eee^pa~0%~+1^U`G9-fHc$HXN zTbK><_Agvk*EI}X+uSTskX`yiBln1K(>9Wqxy+Z7l28S>s3Cz#!n7*D^v*(#Azlld zN>!`CNflLdax*bN=)bJt3f?0~Q*aE2>x#2cva;%^o-P%O#LN!CZ5p#-%uo^=^=X*H zJVVrW=1fmLV@Ql;W)jy#+5N+LUYbDKWNA>==;vg0&bic_=170xzY6Url!T3MFdx%*k+A)OHQ zS-{P^`SIn#y~rRJMwa1dGwa@HzDD!ex2Zv3gP39|wR(F#wYD_NaIC4Y^M%H3h?(x%2)qLJiOO(JQ#*WE^%4QTPdrRm^4<>YwZ}6TX1D1B&P9 z*+swfB0|ro_q&EY^z5eHK6>`kN2B?S7=8BMAgNbqXN&ZN=y`nN4;-9$ihVy|@A%I+ zH1Qm-h42eT9;?-J#F@9ClN~ro-+i7Bhsn|~hA@Itv^VH$!fEKVBAqycvt;Z|dhY-m z!dvvx#b{UE3D4nebb224(Mo;J-vo2#erxu2iEZsrRZZ4Qli)Csp4KF8>-a(GR_Z_lr|ef=l!fz4+ycE>a3 x*->cegh}5a6uevw(3?eTo0R!AEaEP$HCo>%uO8qLzQC8XqnhR`e1q>W^bZ&#IsyOy diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/TagController.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/TagController.class deleted file mode 100644 index e3512e7e6eaadb14249437f8b04ed5255014faed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5204 zcmbVQ`9l=f9sj&_VFX4&niz@kh!OibGn<)N3`y;M zr+0d!>3t==o3_!2ZBu)KWF(eo0Z{H)~w9gj;&njXXfoiE91GL?>Ub0ttmM-T>dhU7U;Mv7p3J$cg{LH zb6I6VfpwvrJFoIyV27T+ByeD?j&Q%cQ46oI4GMH-y-Xpe+_17LaHK(DBdd5Rv89lw zgNlj-9_by6OfQ7CV_mo~Ix?8}9+&ySzDQG$_icA>)|WYT#q$@e`7q2|=T(sR+(4aj zLpxm3f+y`cSB3>&2|V`(f{(^}qL597T6$4)a^-mA>W|ioNY2YDM@M$>IL+)jU!cV~ zHEjp>jH6Dvt{2MCrYi#bYr1bit=)|R|lV=2WRQq;L>Xe1buX6HW z<4($Oep>prWSnSRT*E7ip;mOXYbpqbysR#a^e_|90*2m16Pnww8Cwk8Q@`PE*AphT zVw=F)Stev?X*4U)TdcK2|FLi?b$vFkvn!p!R@{r726nKkR#Q!M<352l&p+h^YHHs1 zt_a-GTNIR(ZD5x`cb#@F*V|h3(R-IUXv1#oHL!=kP*KeSGI2jFfi-iAn9*~4N2>Kd zPz5=0|Foh9119$4fPfLGaDrL|?o5g-Hd^1b&cGoPhqdZ-AQx3Dj^L;P=4zMrYh{XS z^t*{;I4+R#76gtZmBawpc;`}Q`on4d8(Bb`#|6&KUtyv-i1i=?-M zX=+K?td)*LT|{`tVCChK<4F?R6GRPu%nMPRd8yZw^v zJFdccFI(W__6vJH1QbT&R&c`gs}`R zX(ZWEBO;Y{9kYXQuniaSP6Lk%tgoh+co*JHT(Swbl4m}vp#&aLdPa-ul<*$R7?4#c zRHB;5XcS7j>dDXmJE54|~ zO2f$0JTPfxgTT|R50#;U?PQftU#{Z)2HsaZN>}e$WwbpOB2}LxDo92 zmeOFxASY2JsuBi+WQu%azzai3mkW+N8z@sxvAvP&GcH6eo=cA*s*Is##fZ!s&P* zgRaLfns^q^2yBhJT_22kewVh(>1}k*^?Wrf10K;A@nsWV!B<(jLFg-)6WCnUKJltW z|41C{-iIbYXpmfH0PtMx1 zdX=2OS{7F2rZU(dQ>ls*oPE;_esP)|br);Q>YZbbmz(hxtTW2hkgKvB@YdkxCVqrp zL})}2t&?8CROG*!^J%FXS5odAZoCh*icwRqtPE9|;2-UMqj4_8jS7E9)BD~uqz zW61MDrcdVM(>`d$b=)xU3J;{HNTQtB?xMG#tTCCJ$x3dNvpgnwwKTDeo19xY=a-fQ z{+;aDB4;f8Vd-Wa6?Bhz-a;W?-g;A&h@0UKMoO~0~_?aBGX%N2g&PF{JxVfoJRQfF8-dS{4}2r^uLTvyO(iyiq*FL z7J4T3?&<7ZMt=&ou2n_ubYI2RtJF z%eb7vV|sU2dKr1X>pf2hJpcNCv`}s+q;LaE%XqJV4o^A?&yFZx`{?ih?%{=O00+2! zkWTK$1w4pL9DGi2_kMav`^q7kFNSObhf^J>6uHOnA$*vg4`35Mf{#)|DR?pMW2AkY zQtn3Tb!Ma4fH3e013d;$GlOFqc1FQ%5>apkK80t>f&Fw8*k%UpGZdjCXzB=lmcP#h z_(4XIny-!8nZ;ZTph?RN*?ewjS1+kTs6BM#B z7FG6m8(zSR)TYx<3t!+v5WRm)r+&hBZP`!x)MYzPR^1rw{jcC>{kyMWQ~#c8c=T6X ziuLNvz?MkQ_IPVqPdjaj>FrTBl?$$kEo1PP#xEm5FGUgQq)09J*Ay9-+i&nPzje+2 dmZE=$KjP2$3s>~czvA!sC*8ctw7%Bd@;`Ty@}d9$ diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/UserController.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/controller/UserController.class deleted file mode 100644 index 6a3a36a8cc91e8823e8aa5c0e744f8b3734bb36d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4367 zcmcInX?qh@6n<~Igr-wk%c2NcC?H*sVc$}!p)FADMoWu=ER*Dt4ozml%%o5dS6tA4 z;IBX*t;G+1^n*Xj$M?=mvy?QZ`0xQbcjlgR-t(R{fB*Bxp8yj0F^Y)5aofr0j*(6q z-b4M4ku$TVvq=*+c#NV^pyRHwXy{qP%IK5HyE5eov=(@6 zMmmdTN(vkvtD&10)h%CfC=nOfoRQv8!EvPJDT@L(dVD2r-Z8Dr9mmMY`?j;7yE0X9 zOmB%09jPY@-aIADl;N4S74NMoGVghLeOkJC+j8XyZ+lBL*fL{gEW;}}#QXGB+8U@u zM$S<e(i{mDBM-;@UA?AjF)UGhH*8l?ltTJ>NT*A*<@&eVNpgrj^!>;$8is^u~>R zp43rg)1r|r(9KOMNUomaW8)AFx8gNyiK3GMQ}Nme)f%>9n?SqimW4p31sZyKueIQH z?1=e*uCla$)E=^94UK<$}*k9GvHKOqt-a=OtZwnk) z*HUHVHSES7fo9jYEpWSf=+_uhY}KD#`_9|xrSkdmavASIL0!*!$ds4q_Wxatqk_OXe97q9o>}`5yJ_bisGa|PYpa3G8#_f3_Fr5 zy(zSqwrViuRQkj<4B(tV#9k0MSAH$%ZS{wpmDWCHT5_V0OG@X8!Ri(09J5nK zcFu52bq-%Pdh;gB`DCrmux<;cnaxH;-xD}mwOVTSO7;NN4g~sYp{QV%mfKjfsRg!{ z(36gF>CM~eDMK}AkKKjDGs6dn!a?iQ)0liCeQXBh#vSCN*5b6a&9nUPXVXz9|IQ zvBp(?+FqF`OZnAg`CqgM#8QqlJgLG_9IES-UfQ$uq2g^tk955a<$u^sUyc5OJ{9B> zRa3p%44ksvvLV=AIaiArTQOkkS01vXI=$aCKhbalHyQR4-ILC2p34=Rz|CODyaX-l zh*XxPYGb!G7)UbQNh2L%V;$6AeC0!j4yAD?3L@_=O^8vhgBc^6a59A)cdn5KDVbMW zmxhcQEHRe-xO813!@XiJObvHcTWw5|A&wm<$fng+wT@raGmt$cU^N|Nu^_O0Wn*PM zWXzTr*DLm=KrSA3cfTTMXGe!Ol-sM5>?Ndw%niEI+AXVE<_`OyOAB0U(Ae}xX8Q5! z*r-R(l;O>_lS3+51y0x9A-EcPC2^+9MnwJYSc*}TZsbj!d+ex1^g~&$9#T!ivRx2+xRN#S zCm0DR5q7B{Hp%zQ@aw+V`dwjb) zP>%PJ;E85%9z%q1fRKhULgN?swh@uGR$Sy$li&sA$t7NC2+@!F=y&jP3H=B7PAKt2{<1+NSU>V`8ko0%Xkpc!ZoB^?_{KY#u!%t{QF}%wsav9ghefq{%aO>bQQqM6T!86_`bjBnd zlG;g9fHSmumT%+KG~naz^WX0(61ocu$Wpq62y;H6?bKtzrd364GsHxcT0?Rd_)4%? z?-d<#iVnH_5;)|QlUsDCKw0I`aS_&;hs`8_1e-cEYHfd2P1)?p~mKFt6w#m{iO?Jy>QwPUq z$0uie(s9ODnQ?efM$zHH(HETYZ&LBQyPGC$LR)9DyJye&?z!iD=iIaT>)*$}0XPd! zLrma=>n&$Ivsg6!Pcpa7vR$$*$Mgy-_Ijr1yO~MPGJR{IVtI4c-KtgbH7Ej|cg%G& zQ!<_9%$21(R>2q0tHd~F*%IiQuAAq5&vuq`0;*Lu?UF!;?byC;mS)XLzOxqQo>yq>KvSa#HkB*OSF^@OAFD&HG=gx3J+p^`$c*9us_Ybs+ z=FnW#@$Isech>ESy;QQ!I*#j`zU?{;qiee4mY3Ys%tgzwJmz1dUuDuQT1g1(GoT{D zOr~wex?C+US>9EXF6275V3rn5&zA3zQt?-8`aC)Pf0^c zCQ+K7H=s+i%>UvBqg}Q98#(Q3Qnp}H`aEhNi4=WS8aeImZ>Dr$k=2{A{1vx2YkF)0 z-}0EX&V@k&44dMXutUf7VE09i>#<6=FKyMf2v*{HHnV?ktyX~qJJ&2RnoWU+jhh>| zo?@aI11B)TcnhX8CDBrO(m*@*q!7pJ28J;rb*Bv+lsbVo3>*rjtbrHsqJVH^3)Fi* z+JU|A`YVFSJ=qX;qAv=vv#%+T zWM6$x-FL%zkiu0gYFOAbNkWr>Yj{sUTQ^Hp>&k6`mm9mSRNs2-P1Lo&{}u3zyzb1ghcl@u&2Yak1K^|rE|b$8XugwcmtUN8&3>)n&- zuLykIm}GV#%uXO}p-DbuG7To|_h4*RAUuMB0ur#ko( zx_+P#!+zc+1e~?qyc;0^JvhKOA?M8wj?%kx#BsHQqu$*);hv18lvJ?ZGCJrW;8*BDaY*byPD+VY?0y9d=uSy(guJwq&p|KY7hn z5ub8H8O+0>!SA3d4~G7L_y%hH!O-szGsA;gw3<#dfJU<#L8Dnctx1p`fwZ*V02<3C2^!0$(n$$Q zMWAFlRRbvxT9UICX0y>j50S$-sp!VHnBWnNvASR240Uk~;&Z%7N#Tca6>m{eF~b>s zmQn>);U>8a&!2De3r<)8jm)B);O`g(*rYqJY!r(Dc8tM}znWJsRTt=@bu!V)7Yc ztw1>zNRfY8nhS(61}~3|Dk~#%e%7f`H*!{)smwVl|3pxJe*3v}%b^sXQK!-AT4!!t znFxy9+nHNoiS^E*`_M)nA%9EiPh}NpNGp*=mxT{aqggdDvF5=dJ+0PEW7$MtN^F?e z30&3Nx_FnuSfWJYDB~SWGZB^LnV}RT-M4X>$;EMunk$qP7V{)#DXDm$1%8)OA}GrD z(4SJFuqZ;X5PUr4z5X7Pif*ViKn-8lW8bVVxZEPpqHi1IMNobl|UF;;pj+>@w$k;ovC*GZP zcV`VLcgn5hR;~>N%DsUq5+Kn46+-Ypk$B=EPw)bN051p$Apzk#bJ>~kuDy$dgyh}% zo%8#C-=6ckoiqO3zhC_&fWvrMMxTWHYW1a3T`!k)`>E1py=qoW!_w=E%jR0CY}ZOh zYm3dQVcBO_i7<}NostokkiVj@>7|NpEtO6!Trn1H2?^V@D~5!^bfBBH>!!6dDM2ZF zG)GAyVZ_DQX4NQ7*B14Pm?kV$;lMU)7JtFF5PEkiXV-PBu~;`(-Lc$gR;zmbD(xDE zRW|BVW!kyaP1~%L&Yqn*O4e-MSTxKvp>IS1(`LgaAU$g?S-Rbr%zVJ=jR!4LK0K2j?iX-IgTf&`Kh2BuBRIN7W&81*@w6v9sUY+kRMV(d-E?PZgkd#C@~ zfbus7xDh|lZiKe@`&kzwv9P-o$VkzzwDO}P=65PcivhK%2_wAV)|YMikKF^HQNeu!CzevW&z%-AcuYl{RE#0$2^MnqF#)UY!GWf`xXTQ z$V-sLx*2#erzsc`>tg2lDKN6DJp;z(x!oDVUapl->vg?q*hZZ}8lY9w-&;N7b?z4S zS%Q5x(zzkiU^Xw75q2pZ$tll~E=Sb?cZwi^+E=7{*8jG0ZA> zJEq0lSp{#vokDt4!5f8E!ea{VcBRJ^jJeVi3U<5FI~A00pTOw~_Tf!JT2$~>j7X4b z(MIO2iCwN{FB^4wS5#ZkYk65`(jN^vD!+ZXv`3?C zfui89Dw+sG-s+;WiUVzR(3}ej#;&?mao*ZOebxa)I_sdz5t&Q7D{{h}@fP9?ayr@MH8v%J`#uFv;XU;E=`&L^#~73;3CX(AXjXXKBz<@1iczno zi-7|NTe`qU{l#_1NUGS{b-EaAP$@<>k|=sT->$jcJ%dl-GcrES0$+dNDfld&W4~C_ zD^26nWeInOTZ5n9?cJilbNTZMzJM=E*izM3j3YIRhu@>7P0v^jTeoZ$%gr#Echa@0AEw^C48C1G+S%d7meelINV14#@M=X+$;P`H$POX*$oD7 z)orMa48D$U$aqmgF^GU^t<_eHlIs`Of5-JjyH>v{9Q#cP*TU}e&@SP_x>c?ijpB5z zw$fak+|+{+!#Os$4)DiA3>|{*Q5?}Lm06S5pMfO4mcn-=Jk#cZT~4DpDDA#8oaK1Y+*Bvv~=s{_W7q=;kSCbGndGhMuJb6oSp1c+~PoDVBlSedJ1|7LT zdmhh}w{VVU1;?WtB{|x{=T?47lqEhB<3EA=BMN=EgWm!o7P5`siVMK&v7IAH957vo zcJxNX^Qj9_u{R5Yh|V;7?F-iUa(b|Ko+8xhauE=2eDM#Q6?$>k=-n>S5^ z2YMsq4WY}*_V-3Ki342O`oz>o-X}6~eBu?TKc>{4nWHYk%S@5AqHH7_Bs#$p)2W3+ zcw0C69lg?vYHZQV4*i4OS6}RvUKDwYKJCyS?oNMCuk@mKwCFPq{X^a9$9tt0EvZGH zb?A?Dr{B{nz36l;dc~nXieueEdw;L=qJg&Pa}ND+oIuCkaR9XTHRSAz?+Wd1>-#sNCE)bD|EYJUiHQ5zuWqLx<&1Ss!;2Go2AbV(Z|=#o}Y2L-6$ zfd>YwPBA^i)ZGGhEoQQYc^>Hn?h9|L73eO$ahwKe^1ZN#!T5 zL*8=}@4Y1E=d`#`sBuq|62;`I=Cy>QVjVd~DK+7%&S^Hv45h3{!oC;^w>c4K5=s&ikB{5@4#s_AVgv~v z;A7&^DG!zm!2;y^Sr05n!2!O5!ZS&=nFLmyb)I3mlVM=Hq1rRgY+xQRY=-bivKx~G zJY7H@m9i;Sz}6i{LZ;iZ9j~uXFmc42&puJCqA-7kPx3L(&pCe1^K*fpi|+I#_p$IQ zyDB!j?C$fjT@r8l?TsSz7WPv--}z*ZzJm-im#b)S{q{x5?5hO?K<`QzWGzW}(5&kghm zoN>L)f+wq08GKc^FB^8(0y{&TK+0JH3;J~)!HEiFvUB?$V7@9N#yIv?;0r&gM_NF6)rbh=SyLV@L z{mt=&v1tX%t$>Fna=j)3M{YNrz;0Lz&W`Qd8+GflLBe0{ z zKaftqOSl+QATcG=t7399wqpl#Ee6&V1B)gWa7!RvcAH+sx^Amh8E6lTvuYqPzbmdA z_<<+4!xHq<_z-0Sw*|)cMuzR|xLZ~sWFQ27T~-3ud#Ey66ZpClcVrzpyeXY(-SWp5 zU3aUwUFt>Nq3Jrf#u|+=zt>^kuF?)wt#EzN(YlzP2rBfv3BAUs_bUP)bWn1 zpA|U)bHU-%nXgOVw|oP4S@=B+#N}k*Q-RlCY|85i3BU>VNrJV|#}CI@OX8HEw!bB( z`Q~Vb$^8Lpl3We)eUQHbWx=;T`2#ZFQRsszD`f(XnpgNVLjxSb2v_WTj4@p3`tS=K zW?#Lavo?++_%;~K51i7|FzNphAUrc6oWs`h{;YS$A>e*!5 zNP8Tc(#;UVE^{?Z<17;xL76o%LX6|MigVO)8e}9ZNWZw<#rYp8k)c z-$?z9K?C9+j2cMro1%C)6#I9HnI^m zb4K&%{&M=0I-O37nbM3l+amX9rc@)fsZ9P6jOi!1@P*Rni<;WVYSB(g5zein@kE{v zy+)7{xPVJ25|YmUiV~$h*2Ou@5N3i|k71UQ)*|f|wC7Z4Buxks#n*E__tt$%F#^49 z(6-UKRWxI~x!CqDF}~{LA(gO7?q|IB6xV>i%j8MZqhRVH}@e@9XZ_MtQkzl!~ a>s-bP-)b;@#NRqT=1O(VC%A{tko^yWt{~C? diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/model/AppUser$AppUserBuilder.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/model/AppUser$AppUserBuilder.class deleted file mode 100644 index 099fd84e1d39ded7e32c8a3d4e0d7c5a9bec4654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3995 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 diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Document$DocumentBuilder.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Document$DocumentBuilder.class deleted file mode 100644 index da31390d6e0b2a20b8e983677e21d961d267985f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5630 zcmd^C*>V#{6um7kvcxzB;{^gSOAN8iA|N3wG7iROabjZy2@@dOSZd3IM>EdMNQ6A+ zBk~zZ6)94rDj$#!$mgVTdXYWS2+z3mn1|MM-|jwl>D#xD{{HvvUqm!dKc*?g=!WZ6 zbDmkLn88oE4YOw17I#dqylFLZHMhd;+@f2q*SHf*HamCfmR;dqntB->d|@`soNYSQ z-0J!ZUJe+gtP14Ia-tqscJA@xrNum>V~^@iVAc4N)3AJN-RAR-;|6A6xsK0hc-eMq z>+V+WK6kih2E2kTeSsC&Tukn&DF&Y9R53ZQVcEQ32Ak04dREnPO#2>0j#|s%E0kl!kJ}<%$Mx#o-Fg~~JmQ7oTg#|VS!hTrL+#%+bXfW_h$1i)7X zdaY)9uNY;@9v2?YBU(p0VV9r@_?h}Pjzz7@c)ZN52KV67P$;-X9*C7itLngC57ypn zot=&MzW`L%$xChd->>*11>Oap{!7R*`Nce_pw0+Wf?hB z$z!8$L$~I9YS19P$LNuEwe1#l3xC6)Av!3$%^P$`d3(#CVb%N0pu?&+Z_tQ{z*=`QNieC8{B@bb~l=ZOP?EbgpM*AYrS}{wwsr4 zBSC8ELes4+4-Gm_A215`9}iV=x;5ZSgC;~U`qsr$$mqhWtUSExzD7U=2^KU=uw*FrC0>>~t7RzYS5W|Bs|YAQ@$gZrv+$!TT5uHlN{( zBIG!*JFXk}pkdqU<@K{<(N>yXFq+&w6w7J2TRf*CtWM&dSq@z9l{g}s(J$eH(5n^T z1JkM4+@D-_-L3j|e$TUL*;qo|?6CZK2tm>5mh{mO3#M%sEillbe%c%$m(f2vjyF4+ zqfc3tTkQNvNux!lNts2zoihs=au1|g^eQ0+EXGZ$8=h-&T_I~ByF#GZuITR2T`}0< zv|_MBYUK_|Jw;FO$y;n1M10A?zkvnY^nLE93B2@7%oN`qLiR<7^N{1-vNA6f@?)&U|kUz_*X;*Vib{q%|vA2H4zyY zPDBQ-6On=SL}Z{T5g7K(PqeHTB@a{{v*GBShBOBh zhHu}@8~X4!sp<@VMSux>>MVW@wSYdNDU9&!(lm~w9Vid*6z0=2=YFS|nP1UOQ9IO_ zTB4z_SfA;6tnL%YBKR4)5Ql#;F}}(Vjh~VD2jcNBCB|2|rtuF*d?OzJN@9GKw;JD& z_=EIGTzsx3##eVh;}1&wA-Wcae?2k2x=$Kk4GzV}=VoGjbvHHsA!+|`JpOEAe09$? z{;YWkH#O7_@i_u?tB*#0sJFxgCm7dPLMp=JN z7tt=ET|v8wb{*{|+AP`}+HJH2w7Y0aXe(%iH?-FIK~TY7+<9A`(z6bB{EX*c*zpWl zGk?%?d|J#5h^ W8pfI*$fvpte2E%((O$}(rT+k8=;-+X diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Document.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Document.class deleted file mode 100644 index ccdd7cf2fe450ac4c57048ea3f763ae3a6dc9627..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12937 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 diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Tag$TagBuilder.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Tag$TagBuilder.class deleted file mode 100644 index 12f0ba5d66d29a103cb1f7b9ff17936b4699926e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1823 zcmbVM>rN9v6#fP%TWXbyiXv1&K}$i_yGTWadLyZq2x^SKrriMswlidR+614($It|$ z(ZmPvp^RsCH&SS$Xf}J9Gv|EgeBYU~KYo7w4qyQb4mucI9jv(l_dIUixvRV;eJKiQX&@AOlG0x; z|08>-dzEq%^l0v8;d-*eL9h%EA$ zWN;eXuZw4^4CkB0ice#)4deiw`Kc_XagpIfjc8ENX2+6Y#CL(P0KxaLvJ0(s!4*R1Li;+&E=i+CyG7 zI@q=~UuSsVTv_5B13u=;^F=sb)_SwPRctM{$+9PKWqV7saev$7-$u^_qQrfFSsGF7 z?Z)LaW*J5-=iMJgUV8IvdeqMHJfn_fmlTb7$>(7xLI*TS6D{=H5ppokaQe@#^k0bC zQyX?Gpf)@ep?R!BgE5-8PC5b|bkW$+%Au8grz0y($v#_(?DR_^|7Op_WOd1t(K}W6 zj3XbT@IHE4Fi=2$^o$%ZfTOgc`NJ_vzaOX=l><11sZTgw_&}~5*bg;GHgZXz>{nd> z39_avav$OM;N;)%hYpM%YmwmhMEJuPX(PlOx+2bf-;jG#*dYo#82XGe?TKV#-`|>? z#kn?^RuijTzs384aSQns1>jGh{RwCaGm(bw9;q*pElr>|=)Q?tv>Ko!bGVH=7$RE^ LcS*o|QDp8Hc_gSQ diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Tag.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/model/Tag.class deleted file mode 100644 index a3840cc23faa8322c8c9013484a30a1ea374a99b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3145 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 diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/repository/AppUserRepository.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/repository/AppUserRepository.class deleted file mode 100644 index b703ea42a32a6b65f9bfca36ea85f383c70b0754..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 660 zcmb7C!A=4(5S@asfQsnB#6Q58*puhQ@pgYK2F`;rgOeOGHCC!Y4p@_d_ z`{y*Gk}ZfeZiO4^@D6i%PS}(|t*bLT5LYrL2KztkI?jbKcv%rNcg&xWSlg{NxUU%2 z>s?>Yv>bFY6w2F_wj?~VY9%DpKt*X%5flw2k+Wr&&)TU$1~r5e)$RjYj7t82?F<|YFUao4$~j4CTj~< zaE~c_OYB&R`!Wz(s$Huf?Xb-~UF(ZdFhL-_&32gOGOuM--)wVRr(lx6U1KxwmGD|k z#oGM6RBtVGz^rYb4O@NUvtfgW2|OG_weE9UG=Xd8^J99 zfFOdn3z~^z`W1oWT@JYCa8+^$%ykb&*S5J?D#Qg@{p+D|V>lf25ghA4YOq%D+8|15 z)-wOJk*`Z{2QM$mO9G$%z%i6_5%|tpi#E5)(q?XfX`YW4?)f|%*=EAC>Qd=AGCu!z z5aW`4z7~3hk{2QnZ(P3Sc@i@SA1J;8r0IYa=6T4~E@pgkhq)m>=5O_4xwzh-g;Kpy zs^G+-8@1|F+N*E4eo`$}sFPFN=E7VfRrKZKVy#Fs87J4tfShpX1G?hluJo4ZTBShM zh-^7aX|+aayvA~j#!@yLNu8Y2Ewv^K=%ZreWwBVHD@`Ta(Sa2$@d1pI(=Qk!EG_NL z(oki8XBe^~3&>Nd8&iL_Okl$JCXg_WCjv|`0!QjHR5mxYmB6_kd4pP>GliDGk4_Q~ z^@sf4nD*-p<0Q}TuWNNIpRrA49QUTQ--?Ygz>3bL-u1aPU@DLOlE5KIKoU~emnX5S zPQejePva^9N8vdBlLU@|X}BjK-QPOd+d36(orW`LY2@?_ob8`J*V~$nPM?q4x)5z$ zgiA2db$=PIp!;bwd=&=`;2O-Kz)IrkdPg!pm@W*ai-YM6R4}k+k}!|I1ssbwj5vei U5M=S2fSX;Hw<4F5sDB&a7by?2c>n+a diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/repository/DocumentSpecifications.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/repository/DocumentSpecifications.class deleted file mode 100644 index 608f7dbb0a9fb596f83fcab02a3d93e6008b4b57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9987 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 diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/repository/TagRepository.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/repository/TagRepository.class deleted file mode 100644 index 24b100eef49204c13a0bc8ebe200a277c3ad9997..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 738 zcmb7C%}xR_5S}8qf`5pfJ$b;3Js3}GOcY~+S%ru^z{r-RxU`#Y!Qjo;^56sbP{t`3 zcD*PZnr8mK`M#O?{CfWYfJ@l-pupf%n}{0>L$t5Fk0TjNq0saOa>9*BbSkYjQ~rq2 z!@}~Q$e=pJ3Gx_K#9L28(X$?`GdOc_X=0>``UXehMVn_%*vN+o<^gXL%m5i2^rZ@~ zruS6RjFdK_fvI3nuLoJ1j&-p9@!U1GGUlzsO06*V8I(IRQfSA9%Gyhood#HO-T-4_uUwchCK#j9pcn}33#J(wd%7n*Js7-zcXHtYJe09! zFb)f1WYMWqb?Vi7uj=#b{R046aNt3S!MU*^w-^NIUila!sie?oM-w^YR>UTe&e%Ec zC&J!Zlg8cOngyJu265;s!O{KFMion}H9ye$b@xaH?0)^=(w?n{>S z`*+v5mZNT}os7glCUU4mOKamWvy;@EtmKrCRAJma7QEP)PrGJNrdOqtVssB4Y(fcY el$D?k+Z3w|wkVWgCok^)eC|Pm@(pU;2lxiGEYk)6 diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/security/Permission.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/security/Permission.class deleted file mode 100644 index 196e9be6760e91baa34d8530625793af680dd1dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1387 zcmb7DTTc@~6#j-@wp|veRgjw~Ql%|Osa(9Y5-L>F*aBgprtyIc?NXMsTeIDg)F=Om ze?iLwL?iLpA7wl%ax85%sto@3`%xs0x7cFA`zy>plgkA*kUt?l5?h9hb3iwwtx?*rruZWFmP#`HpGu z!0Uq|z=Q@x0G|NU8hiry1-P%lFMuk*Lk%jtViwXc2#sMRYg)!mqk3%E2mH8VkcMon z$SZknn*z&46)prxsdH-9sa_$2${(_LmAr@Apk|j$i&v;-Im0=vmG-zz+m2zAzxSM1 z8U{^P!jZlUrXq&8f@NavDMYjG7*!2Vu|hY-ZJRfXwU14PXm7c8kI#&vlgRW`@ZS=Z zkU^2Uc25|#d&4?aj`VxAqDap)tl~MtS});Nh1cte9u+qybTbkSO)cqe7gg134ZCQ( zF~xn1bf3YJ2%wC0vutsvVbkvG9$rC`>{s?iVlz(t;G)Or-JB3D1(2m~l9n1tTIwNb zseORJq-Y+Ba8siVVVL4a2z?5 z1hc-M#NcXSR4=$&7}pD)7N+!qw}lzKptLZnUtsPV9W{VQ^q(QQLX1lChe+Tg;dzp_ zO0A!w)E-Mu;Z3iL{z7b=)g#l}U>j>;uJFzky)Gn03OU!*6_ysi(oS1xo1EP!@{`83j-n`8akLs_(JQR~0{efQ Tkm6x@@mUbRl=KNCrG51maLqdU diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/security/PermissionAspect.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/security/PermissionAspect.class deleted file mode 100644 index d3cef19776388ca08b4c7dd26dfe6ffab5ceb2b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4967 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 SH}DtEtBm$n{2l*5{eJ;*#?Jx( diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/security/RequirePermission.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/security/RequirePermission.class deleted file mode 100644 index e8610bbf8cbea9239ef0fcae4bf017e48fb7a4c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcma)(&q@O^5XQgMwyX7DRS-Og#Y54Hfr2Mb1y>YWTh>(&Pw957DcP)MvxWL-9(({F zN}PJI2Mc=0WHR}E`G(2I=i57gHg*D(1Wq$Il1>eW%D>7-m1?8ODwjOziOeY}oc2>0 z(MzEn^~t3=&vj-4lm+TzHBr(iJCeP@m=YhLDsV8bDr+;ZJoB>slL}NO$`mBfIy&zB z$9-;lCQ!S{3YXA@HvGcwuf|Sh?gD#JVZBc2PUm`HXzrd1>~|J+7%Mj-&kl!+??Xc= zSszcIiJ@vYj4ylV0_FI=9||-Uiz4!@;Q_Fu`3KU^j83Ku2GQ+xeANw`0s>3CD*Ru9 k2OeOVvl3RmV-2gkH~759Oz?mbVI3Q@u!;JtMA*Xi7tXkoi~s-t diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/service/CustomUserDetailsService.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/service/CustomUserDetailsService.class deleted file mode 100644 index 01a67b603147ed47b93e4e40d2c5be56d2d60a02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4121 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 diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/service/ExcelService.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/service/ExcelService.class deleted file mode 100644 index 592e2d4dc0785c41bb5d2a94e50bac85e812001f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6284 zcmb7J31AfE75@HQv)P?MSOr-`Trffch6Uu%1hh#=BoY!$LLgw($!3xa+1-gVlK`T% zT3dVCORd;btESZ+h#C?vdO~aO`@ZabANHgw{r-P;m(4*^f!+C!_rLf4_r7<`^6X1b zJOiLcEYpxD5VM`$m}7Kz8{YM?9wTWbEHh;|@jh!P=9mS6k?M`LbnP+Yo6 zu%zsOF)*;wN)FhLx6+hWTS@sVd(sM2t-4V_Twp`O*Q`=NuMpu>@14g{h zEE}+`GS@8|BqEY_x0xubGZTsS{R6y3-fkK-urZ#nQkHiKflyx2Ay809vLMdExf&J; zoHY>^4ZbyXM6p<)xYzW2xCoqI-gF9GbqT|Dt1Bj>su%+2=_o`I!O~=<%;v#lm+7<{ zgqMP0+(>j7jwR>m#gOk81!jSDBObrZrZJuKqNm{17!oRO&$8t8RHN*s#OSAbdh|vYHeXiRR z%Q_*pv#qUR2NBw3+xgzM%A$S~J& z5iS-8Qu($%)AVW>@Jq`ZeZS=BH}0^atPX$yQrqUyoMu$nKH8|_Bbv0l=r+a+W34JG z4ZP{VjTb~^Xs7{!ub%DZK92+G@J%{G(1W-XH5y(aFy|Cd8dILhY@?$Vb&N3;kS#p| z^Q4xO$f_l`dL471%h6>z&hST#I_5$TVJo(2Xks``#I25Iv=H7_s>c>6&&4V|%BxiG z&JpJ)$7*TsE77K*RbcUS_Esj-(T?qOB8}Z@@1=)kGBl~GL)d{%4Lb$SolXErb?m}! znuzRW5X*p@!I6@zI!HUcQpeS}M&Qi!S(X24T>s(%>-~^A9Uc^$TxX;W7KDMghOTjC z#oyD>4TiI3xwR}d{VKWa3ZWO4hCYGlbXS$)bnF37h0^-^39FnDH`75$NsuIAYhVhU zHb|r(Nv~r7*HPK#?c3^G8;QcD|DTv3TnuVpNKGq72F7;J;+=*-RGeYCQm|ZYu$`pg zv2d#7In&juE0hKI>$n~VXmi>|GLg)bKbbu2E0kb8#BS5D?`Vd@fHS-;YnhF%5-$*h+-*G`e&EA<@MUBC^^3sZ`bfP zrsUI*=y(U-Ni=!3EXwI3p3UEiWp+blm^*b8BN)WHa8SeDtgq5HFRz8saSz^2l?Dg8 zsc4H+$Erb(J9aW%$6BUHK{a%0m1&6ORYhN; ztQ`01xDN~1_rw#n%PN0A?$z)BF{unUzSsmYj1O!0P-a&(jqQDoy;qiI9S`AQ3S$4+ zHaIZgn64{foT*#miJ3GabivSVB*0pGnL$ zJSwn2-9hc88%1eo)k+2NIF4u-8F!WJu8vWR`89GIuVM5OfmsMEerdCZ*?m8$<0(8% zzb1`-v(8Sj$J=3feH^K1VOzX(3caUHo`-Q%mi1YP{DO9DK zZWitW*}7(qzKm{%M~m$t)7k4-veOm2*e6OI=K30rhX{!SveA}p%uHD`(~^8S-%UR3KsE8)Ug6jOHZszeKIY(>?KbjBJDxiMMh)xIuk;l$K|%nsO;LOl_qJV zxJ0(gFB#XCQ}0t^6o|5T5LYJO;P)XjAbsMyVns&~`S_2Fr3JDn{I4|6d})^#b-aX=EG(+4B#J9& zu^HW(X(5ErMV@R73TvBcnzyp45Cys@RINg7OG{IIO|x9nbP-Tg^{uTft#T!(i;$vf zXldQHy{Sg7mFQxYTq|m8Z*6S8OfHq`Vvag^O>;|gy(Z2Wm&2Ovw!wH`gJmYV>t#aJ zFrPW9%^q~(rtG;{M{`4drNlb>T6MdL@y_b(n6}4OCw3}Bl+s6SGyI}8p~Pmac%m2n4^ z19CRgaGR<>&!I}Qs526YHs-GC*+n7}5K-Dh*(us@r}(N7OpSjW9R(GBkPPOm6VqX!6Fq(#vI}kbfa1 zN2m>d^5Lw4Px+@fEJm^LQ7n0clRT91TPg|4KVPlL&|QjU+~cu)le@FIbWk*ls)7|` zC>N+Id=e`=BZWt>s;Vebls|^Gd8pD3V@bG5dm8zj`O6=}#!+0-)>**OW;H70s6ma2 zINBmdW4JsY1?vODcsQcX4UFLmvMG)fA4kzJ?pz)zmTbn*k%tjnRTYc`kKv|Ba0J&L zlmwor3MrD!ilj=9=*LhQ(Z|3S&BI7Mh-gF~g>w+|<>Ed;E;o$gmJz&u1h-d(eEtnt z{w4mxmh8eTioYWgjD#X3ky#5zaM!H?F*gv=#_%42`%kt+ijHAnq-YEu5bUbL&2k=0 z&nu5c3Xh>DQaFMS4&&;og39A4jubQxV|Hbv-~kl#djt+07I&jTLFsm)o4~;*@hPRtL3|pYkx=8>XUQp#`nKXY zK1Za^7xVCWJWH@GVd?n-zR2j=&HH_c5D!qRd+=q-Ev8;K9p7LS-N%ab zO?-=#&oK(W&D|2}Rf_L$G>cj-#CP#M+Ti=t;x2?w@}k8WgoX-!hSk6OHLTNcC3SlN zVGTQ8KvaYAA}-PJ0}Z_=X^qn#$va8IYEy8OGKNn;7fpPILMKpMqXs8wg#0wUqzfBD<9%|ouZdf3@qnI0zt0H z&jynILZWjK2fr4$eH6bR#vD%mB-kMTbr^-=zaJu@kB~(wXEl=5SZ!R1Hr z@8v5V#~l-sQfZFNU{+>OWmAz6QH;{kfb5(BuW`YDKg_#|llkB0{oD}#wosZ(gA>Of+S$82L z;v6jFPm^Ir);e6o=f!NA>iKLy3x9eFGw!b9&o^OQOMEBz^nKtb^;R2Q6`om F@;~e$sP+H= diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/service/FileService$S3FileDownload.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/service/FileService$S3FileDownload.class deleted file mode 100644 index 24ccece7f8b0db5e41fba1e3c1bc3b823ac5dcd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1758 zcmbtUZBG+H5Pr5$u9TBP1r<^71*9#=iTFwZBM<@!qM?Kj`oV0k3mjZ;>)sWjzsV1h zNKE+P5Aa7BXRk*%4<<- z$quQE=kk{@+&n8Qq7@9Li6mMWGE0spmh08BP^-M`hHTR2?iyE)K1aeXVmsl4w$o|C zK#BqmWW%*A<+jU27TpY`TQLW_H(rCg% z6ZbF>rfiK$_MHeeW#t3c1sMoM(WXmb!RqR!`&h}3>W3%MjFf>NC|+w|{WJ;~F)+-~ ze^eT(?gdU&SdDZ=nkF7&l%chJXn|obo?FM;k=w#*XfJTD;tGFYNy_bdt#~q?m?Q$~ zHklK?t(;mQRU9(wa^H^&qMUp>X(Y~mtni|j&$J+)!Wcu>VQ&{>U7De$rLTiJYti$B z3WrR$3N*ups?_3^zs>#;B>A zsKgW0!Zaahm(?9kYYW{Zp_@KUr$Jg7t;xbqwEdt>0@orX;4|7o2}s32<`hWB*^o|R zJcJC9Si#nCMI5QK&kE9Ifr-i-l(TKfzOs h;~B}a#PA$1@ftlOpTH!oQz2#o(;-G%)9)0%(m%oIyh;E7 diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/service/FileService$StorageFileNotFoundException.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/service/FileService$StorageFileNotFoundException.class deleted file mode 100644 index 196ff4dc03b0a25a3000e105a597aff0cb319592..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 619 zcmb_Z+e!m55IwWjuGV_LBEASdcmelaMG#RGYY{8H$KA1w>?V?=Mf@wD1RwkWKT4df zqJkg@CNMK+&P?W#m)ECf0DD-75fM(TYbQ=+nF{yGwJLP3*(jHGbT9GjdOGFgQ0Lrw zw^v%hI@RXV)wJQzc1?D0m-21U*2Jg~7H?EfCAl)~c@9~;ANKUdzfk1-Iu5UbI=s~OqwGvAdkYYsS++WP~Y9i>~#H%t+!e=KKDcH>4G(fB*mh diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/service/FileService.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/service/FileService.class deleted file mode 100644 index 32c5b005bc07820139350781ae24efba52737e37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6224 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%0Dx| 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 HRmA=W;O*&P diff --git a/workspaces/backend/target/classes/org/raddatz/familienarchiv/service/UserService.class b/workspaces/backend/target/classes/org/raddatz/familienarchiv/service/UserService.class deleted file mode 100644 index ee56a0d1acdb67b60e21b2767160805736b86755..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6469 zcmbtZ33wFc8GipwV3N%sF$NH=cIA*HkSr*Qu!tt%icNsB5CpC5WOuR|GCQ-*&IW^8 zTYKM!_Rya8vaLP52t=#3wzbyQ+Pk&)eOY_orMBTfXa!3anL%k71@au`%A6%SmI) zqEt3F6QK^T(LLIX(oBs4#j=8On9WcFJ2E(Jmm@@2s!?Wb? z(qhUp86Jtrc5io%eBsV3TBd_CO|QErq;{HD7R$j#)6Bm~<^>I0p;1nK7Mpv8%6* zVlkF#SR$};nl!2ErjE0*OrU|Gk$N4nLZG>&H58qsFA0-qKr5DOXk%VY4zrFGXeS#i zXV4W`77lGuIHWE}#YAhrhPc4ViUkGVvg2Eg{7};Lqv*gY9p|7?VD@@NH|gJM9p~Zv zz*0r_p0rHMlBG&Ruf@1E-~z1Eu$Jjr)-9jtNMOByX5}|!b3U_`9Ns4xwn0Y&^afmv zE{z2TYo`G*l*CoiPDeL3(#Ao{Nq5?I*Jw{#;OsCSJwB@k*-Cm2vsE2>i-ce}RD!bTD$TKCnVS3phNsF zP;KKT%ZY95;#TQ?QpYZdu~xKSg43^~9?=F|ihUaP3aptKI8!Q|j>~X4V|vd|$JZA$JA3e2l!M!!6BNQZ^}WD8Sda%vR0tbuW9nFg4Oav@Q5bj-m? zQ4Axe<4UkNpBxyq*>khS3M6pb36!m>#b(AeK151V?|5op9f(eoDx<6xEL8^-?j6#{ z5gi9`6?rvKux!xZev0D%=@SG$J{j!bNLPHLhgse!4OiPGrT>3F?@t27zN#W(7> z0XI@@Mh+gV#FrG+s2%IyWaMiX?@wt<7UA8S*E`$ET4iS2;8Y_dH9*~8bRWS6dRD!9pRwk4{ z+jQns0u|NwHcf z8|EZ^BQ@M-4OUB{8#O>D_ulz2Q^_M%c%dE}Vt7z;yySXd;OR5`K9$TH6LNh{+R ze!*jL*f3>kJuY5J)RLU^*fOZUl&=?`h|_FOBvQpsuFcE_^3I(W#BXh>EJH1RH%Smz5RVh==mjdl1Q z>((|mcoS1aGdAdQ#7xJQM)3puNW%}w(z2qUnd8zpg) zL0jsOjG~||@#1!t=Eg49_49lK&IR=_AI0zR2MxckfZuXP++j1`tHR2S z#$f4d!XNP`rWY${X^Ghz_Pr<>DBo&0Y1_;%>2=-VLM|~C&Cp7P;4T^+-ahk(!I9I; zh67X7+-=x)((=v3+}U`t5&NU8N`KSwEqt2`f0Z*uSm>D1Y{Wl`!bf%d9KWFOzq!VO z(c|#jmHOCX<~1Ss6{gJ53hyd0(?kv5rKaCXUIzfPS5?mIIE!x7u;J9=H2Ecmzcl`m z*E(LC>(@n@|VL!T0tzjnxt8;F2Ncs#YI?#KC~c( zHol0q<0^iBxgK%ch?ShcSK$_xnfKvb+=kV-lb>K7#QE&kYw!p^vpmXYk6|54UP8gY zRYmqm?teeeBGmW*Ze>8`lfyUQgACXjM)gDZFvD{tuA$D4@a{(b{U|<0J0D}vg1e6^ zTWgAvw@*mkF(G*;@9yHRX4D+TMH)6A#U2e;9K{-qZ=84Y$t=O+B_9qEvnhPQbzGCQ zY?lBYUOoXH@5Uooeh=;gPjW!jxa27~A|pcC`ZMV5CG*=~MK*r>3G z1)t3L{UA-YlLeHbLo8W8^^b;1^A z&sOHi7Io_UKy>2N1$@)}5>GASajiP*F@`XLFDpe~QD?5^7MWmCdFD92Do{Q~CMwXY z)a${nqI!X^g*1JAil!hZCTrSJRns~62Hgo42ATGk)6QC6o7)cKn{CSvVRze#L%6W5 z{SdO{Py`mvS9;rm{SyE*tMVc}XqF%O6gfyh+LA}`{loa_WUso^>5Lmyu;x}(@yqE|Y%Qsv3%};M5&UMN uh&{pIzvW*U-#^pzzu@oqr@H$W{)4CRUp{M+|4$+!q81DJf<7!}q5glZ^IoO^ diff --git a/workspaces/backend/target/test-classes/org/raddatz/familienarchiv/FamilienarchivApplicationTests.class b/workspaces/backend/target/test-classes/org/raddatz/familienarchiv/FamilienarchivApplicationTests.class deleted file mode 100644 index 55da04ef86ab382eed34b95a5bbed0c8fa651947..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 581 zcmbVJO-lnY5PjKJtF>CcE`kTaiyvTaf+#{2dMXMky{EfrJL@)Cve_#BD^G$4e}F$q zoU9`1!Gnj%WM*F8%)Gq5J--0xV7-Az;K;g>bSg=de~?2pp^UUqE*{fVc7KGOJkKar zo~*gig)bVY3oNH`4A%(pOuS%G$sjJ_x* z1MP0qAkzY?JsYd6uN;N=GgJyzu=pP>u}Eb!U-0I*-= n2w383gf`y-YMFf?+Gh)I#BY*?ZzL>UMG|3!p%GTUXx4yt&k>OK