Compare commits
7 Commits
a51875c3f1
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| afec157b35 | |||
| 52fe6b6392 | |||
| ea41b1edec | |||
| 37a907e087 | |||
| d4c6def398 | |||
| 097631adc1 | |||
| 5cc0635630 |
@@ -1,12 +1,12 @@
|
|||||||
---
|
---
|
||||||
name: feature-implementer
|
name: feature-implementer
|
||||||
description: "Use this agent when the user requests implementation of a new feature, enhancement, or functionality for the Legal Consent Hub platform. This includes adding new form elements, creating new API endpoints, implementing UI components, or extending existing capabilities."
|
description: "Use this agent when the user requests implementation of a new feature, enhancement, or functionality for the GremiumHub platform. This includes adding new form elements, creating new API endpoints, implementing UI components, or extending existing capabilities."
|
||||||
model: sonnet
|
model: sonnet
|
||||||
color: green
|
color: green
|
||||||
tools: Read, Write, Edit, Bash, Glob, Grep
|
tools: Read, Write, Edit, Bash, Glob, Grep
|
||||||
---
|
---
|
||||||
|
|
||||||
You are an elite full-stack feature architect for the Legal Consent Hub platform, specializing in implementing cohesive features across the entire technology stack. You have deep expertise in the platform's architecture, conventions, and design patterns.
|
You are an elite full-stack feature architect for the GremiumHub platform, specializing in implementing cohesive features across the entire technology stack. You have deep expertise in the platform's architecture, conventions, and design patterns.
|
||||||
|
|
||||||
## Your Core Responsibilities
|
## Your Core Responsibilities
|
||||||
|
|
||||||
@@ -83,17 +83,17 @@ When implementing a feature:
|
|||||||
|
|
||||||
## Key Files Reference
|
## Key Files Reference
|
||||||
|
|
||||||
- `api/legalconsenthub.yml` - OpenAPI specification
|
- `api/gremiumhub.yml` - OpenAPI specification
|
||||||
- `legalconsenthub-backend/src/main/resources/templates/application_form_latex_template.tex` - PDF template
|
- `gremiumhub-backend/src/main/resources/templates/application_form_latex_template.tex` - PDF template
|
||||||
- `legalconsenthub-backend/src/main/resources/seed/*.yaml` - Seed data
|
- `gremiumhub-backend/src/main/resources/seed/*.yaml` - Seed data
|
||||||
- `legalconsenthub-backend/src/main/resources/db/changelog/` - Database migrations
|
- `gremiumhub-backend/src/main/resources/db/changelog/` - Database migrations
|
||||||
- `.github/workflows/pipeline.yaml` - CI/CD configuration
|
- `.github/workflows/pipeline.yaml` - CI/CD configuration
|
||||||
|
|
||||||
## Composables to Leverage
|
## Composables to Leverage
|
||||||
|
|
||||||
- `useFormElementVisibility` - Visibility condition evaluation
|
- `useFormElementVisibility` - Visibility condition evaluation
|
||||||
- `useSectionSpawning` - Template section spawning
|
- `useSectionSpawning` - Template section spawning
|
||||||
- `useClonableElements` - Element cloning logic
|
- `useFormElementDuplication` - Element cloning logic
|
||||||
- `useFormElementValueClearing` - Clear hidden element values
|
- `useFormElementValueClearing` - Clear hidden element values
|
||||||
- `useTableCrossReferences` - Table column/row references
|
- `useTableCrossReferences` - Table column/row references
|
||||||
- `useApplicationFormValidator` - Form validation
|
- `useApplicationFormValidator` - Form validation
|
||||||
|
|||||||
62
.claude/skills/coolify/SKILL.md
Normal file
62
.claude/skills/coolify/SKILL.md
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
---
|
||||||
|
name: coolify
|
||||||
|
description: Use when user asks you to use this skill to debug Coolify issues or to investigate something related to Coolify.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Coolify
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
Opens Playwright MCP, lets the user log in to Coolify, and then takes a snapshot for further investigation.
|
||||||
|
|
||||||
|
## Coolify Instance
|
||||||
|
|
||||||
|
- **Primary URL:** `https://coolify.gremiumhub.de/`
|
||||||
|
|
||||||
|
## Process
|
||||||
|
|
||||||
|
1. Open the browser
|
||||||
|
2. If you know the URL related to the current request, navigate to that URL or ask the user to do so. Otherwise, assume
|
||||||
|
the user needs to log in first and navigate to log in if the user does not provide a URL
|
||||||
|
(`mcp__playwright__browser_navigate → https://coolify.gremiumhub.de/login`)
|
||||||
|
3. (If not logged in) Stop and wait for user to log in.
|
||||||
|
4. (When logged in) Navigate to the page that might be related to the current request if the user has not done so. Ask
|
||||||
|
for the content of the page if this might be easier for you to understand the issue.
|
||||||
|
|
||||||
|
## Additional Notes
|
||||||
|
|
||||||
|
- If you need to do something in the terminal, write down all commands first that you want to execute and ask the user
|
||||||
|
to execute them. Do not execute any command directly.
|
||||||
|
- Write down in a summary what you have changed in the Coolify instance.
|
||||||
|
- If you encounter an error while opening the browser (e.g., "browserType.launchPersistentContext: Failed to launch the
|
||||||
|
browser process"), ask the user to restart the browser and stop until the user confirms that the browser is restarted
|
||||||
|
or that you can try to open the browser again.
|
||||||
|
- Always rely on the docker-compose files and configured environment variables in the Coolify instance to understand how
|
||||||
|
the instance is set up and how it works. Do not assume anything that is not explicitly stated in the docker-compose
|
||||||
|
files or environment variables. If you are not sure about something, ask the user to check the docker-compose files
|
||||||
|
and environment variables instead of making assumptions.
|
||||||
|
- Ignore the local deployment files. Only rely on settings and configurations that are actually used in the running instance. If you are not sure which files are relevant, ask the user to check which files are actually used in the running instance instead of making assumptions.
|
||||||
|
|
||||||
|
## Efficient Data Extraction
|
||||||
|
|
||||||
|
**Env vars — use Developer view:** Click it via JS (button refs are unreliable in Livewire apps), then read the textarea:
|
||||||
|
```js
|
||||||
|
// Click Developer view
|
||||||
|
Array.from(document.querySelectorAll('button')).find(b => b.textContent.trim().includes('Developer view'))?.click()
|
||||||
|
// Read all vars at once
|
||||||
|
document.querySelector('textarea')?.value
|
||||||
|
```
|
||||||
|
|
||||||
|
**Compose file — Coolify uses Monaco editor:**
|
||||||
|
```js
|
||||||
|
window.monaco?.editor?.getModels()?.[0]?.getValue()
|
||||||
|
```
|
||||||
|
|
||||||
|
Prefer JS extraction over screenshots/scrolling for any text data.
|
||||||
|
|
||||||
|
## Key Behavioral Notes
|
||||||
|
|
||||||
|
- **`$SERVICE_*` magic variables are only substituted in the compose file**, not in manually-added panel env vars. Panel vars with `$SERVICE_URL_*` values are passed as literal strings to containers — this causes `NOT_SET` errors in Nuxt OAuth when `NUXT_OAUTH_KEYCLOAK_SERVER_URL=$SERVICE_URL_KEYCLOAK` is set via the panel instead of the compose.
|
||||||
|
- **Panel vars are driven by the compose file.** Coolify syncs env vars from the compose into the panel — they are not independent. You cannot delete a variable from the panel without first removing it from the compose file. To fix a value, edit the compose file; the panel updates automatically.
|
||||||
|
- **`$SERVICE_URL_*`** includes `https://`; **`$SERVICE_FQDN_*`** is hostname only (no protocol). Mixing them breaks JWT issuer validation.
|
||||||
|
- The "Hardcoded variables are not shown here" warning refers to vars with fully hardcoded literal values in the compose. Vars referencing `$SERVICE_*` or `${VAR}` do appear in the panel.
|
||||||
@@ -7,7 +7,7 @@ description: Use when modifying seed files in template/ or demo/ directories - e
|
|||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
The Legal Consent Hub has two interdependent seed file directories that must stay synchronized:
|
GremiumHub has two interdependent seed file directories that must stay synchronized:
|
||||||
|
|
||||||
1. **Template** (`seed/template/`) - `isTemplate: true` - defines the form structure, element types, options, visibility conditions, section spawn triggers, and template sections.
|
1. **Template** (`seed/template/`) - `isTemplate: true` - defines the form structure, element types, options, visibility conditions, section spawn triggers, and template sections.
|
||||||
2. **Demo form** (`seed/demo/`) - `isTemplate: false` - a realistic SAP S/4HANA application form with pre-filled values derived from the template. Used for development testing and UI validation.
|
2. **Demo form** (`seed/demo/`) - `isTemplate: false` - a realistic SAP S/4HANA application form with pre-filled values derived from the template. Used for development testing and UI validation.
|
||||||
@@ -17,7 +17,7 @@ Changes to either directory can break the other. This skill ensures consistency.
|
|||||||
## File Structure
|
## File Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
legalconsenthub-backend/src/main/resources/seed/
|
gremiumhub-backend/src/main/resources/seed/
|
||||||
├── template/ # Template (source of truth for structure)
|
├── template/ # Template (source of truth for structure)
|
||||||
│ ├── _main.yaml # Main file: isTemplate, name, !include directives
|
│ ├── _main.yaml # Main file: isTemplate, name, !include directives
|
||||||
│ ├── section_01_angaben_zum_itsystem.yaml
|
│ ├── section_01_angaben_zum_itsystem.yaml
|
||||||
@@ -158,6 +158,13 @@ When adding a new section file:
|
|||||||
2. Add the `!include` directive to the corresponding `_main.yaml`
|
2. Add the `!include` directive to the corresponding `_main.yaml`
|
||||||
3. Maintain logical section ordering
|
3. Maintain logical section ordering
|
||||||
|
|
||||||
|
### Rule 9: Change process must start with template, then sync demo
|
||||||
|
|
||||||
|
Any change request that affects form structure, visibility conditions, or section spawn triggers must follow this process:
|
||||||
|
1. **Modify the template**: Make all necessary changes to the template files first, ensuring structural integrity and logical consistency
|
||||||
|
2. **Sync the demo form**: After the template is updated, modify the demo form to mirror the structural changes and add contextually appropriate test data
|
||||||
|
3. **Verify both**: Ensure that the template remains the source of truth and that the demo form accurately reflects the template's structure and visibility logic
|
||||||
|
|
||||||
## Checklist for Template Changes
|
## Checklist for Template Changes
|
||||||
|
|
||||||
When you modify files in the **template/ directory**, verify each item:
|
When you modify files in the **template/ directory**, verify each item:
|
||||||
|
|||||||
446
.github/workflows/pipeline.yaml
vendored
446
.github/workflows/pipeline.yaml
vendored
@@ -1,221 +1,225 @@
|
|||||||
#name: CI/CD Pipeline
|
name: CI/CD Pipeline
|
||||||
#run-name: ${{ github.actor }} triggered pipeline on ${{ github.ref_name }}
|
run-name: ${{ github.actor }} triggered pipeline on ${{ github.ref_name }}
|
||||||
#
|
|
||||||
#on:
|
on:
|
||||||
# pull_request:
|
pull_request:
|
||||||
# paths:
|
paths:
|
||||||
# - 'legalconsenthub/**'
|
- 'gremiumhub/**'
|
||||||
# - 'legalconsenthub-backend/**'
|
- 'gremiumhub-backend/**'
|
||||||
# - 'api/**'
|
- 'api/**'
|
||||||
# - '.github/workflows/pipeline.yaml'
|
- '.github/workflows/pipeline.yaml'
|
||||||
# push:
|
push:
|
||||||
# branches:
|
branches:
|
||||||
# - main
|
- main
|
||||||
# paths:
|
paths:
|
||||||
# - 'legalconsenthub/**'
|
- 'gremiumhub/**'
|
||||||
# - 'legalconsenthub-backend/**'
|
- 'gremiumhub-backend/**'
|
||||||
# - 'api/**'
|
- 'api/**'
|
||||||
# - '.github/workflows/pipeline.yaml'
|
- '.github/workflows/pipeline.yaml'
|
||||||
#
|
|
||||||
#concurrency:
|
concurrency:
|
||||||
# group: ci-${{ github.ref }}
|
group: ci-${{ github.ref }}
|
||||||
# cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
#
|
|
||||||
#jobs:
|
jobs:
|
||||||
# frontend:
|
frontend:
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
# defaults:
|
defaults:
|
||||||
# run:
|
run:
|
||||||
# working-directory: ./legalconsenthub
|
working-directory: ./gremiumhub
|
||||||
#
|
|
||||||
# steps:
|
steps:
|
||||||
# - name: Checkout code
|
- name: Checkout code
|
||||||
# uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
#
|
|
||||||
# - name: Setup Node.js
|
- name: Setup Node.js
|
||||||
# uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
# with:
|
with:
|
||||||
# node-version: '22.16.0'
|
node-version: '22.16.0'
|
||||||
#
|
|
||||||
# - name: Setup Java
|
- name: Setup Java
|
||||||
# uses: actions/setup-java@v4
|
uses: actions/setup-java@v4
|
||||||
# with:
|
with:
|
||||||
# distribution: 'temurin'
|
distribution: 'temurin'
|
||||||
# java-version: '21'
|
java-version: '21'
|
||||||
#
|
|
||||||
# - name: Setup pnpm
|
- name: Setup pnpm
|
||||||
# uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
# with:
|
with:
|
||||||
# version: 10.13.1
|
version: 10.13.1
|
||||||
# run_install: false
|
run_install: false
|
||||||
#
|
|
||||||
# - name: Get pnpm store directory
|
- name: Get pnpm store directory
|
||||||
# id: pnpm-cache
|
id: pnpm-cache
|
||||||
# run: |
|
run: |
|
||||||
# echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
|
||||||
#
|
|
||||||
# - name: Setup pnpm cache
|
- name: Setup pnpm cache
|
||||||
# uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
# with:
|
with:
|
||||||
# path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
|
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
|
||||||
# key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
||||||
# restore-keys: |
|
restore-keys: |
|
||||||
# ${{ runner.os }}-pnpm-store-
|
${{ runner.os }}-pnpm-store-
|
||||||
#
|
|
||||||
# - name: Install dependencies
|
- name: Install dependencies
|
||||||
# run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
#
|
|
||||||
# - name: Build application
|
- name: Build application
|
||||||
# run: pnpm build
|
run: pnpm build
|
||||||
#
|
|
||||||
# - name: Run linting
|
- name: Run linting
|
||||||
# run: pnpm lint
|
run: pnpm lint
|
||||||
#
|
|
||||||
# - name: Run type checking
|
- name: Run type checking
|
||||||
# run: pnpm type-check
|
run: pnpm type-check
|
||||||
#
|
|
||||||
# - name: Set up Docker Buildx
|
- name: Set up Docker Buildx
|
||||||
# uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
#
|
|
||||||
# - name: Log in to Gitea Container Registry
|
- name: Log in to Gitea Container Registry
|
||||||
# if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||||
# uses: docker/login-action@v3
|
uses: docker/login-action@v3
|
||||||
# with:
|
with:
|
||||||
# registry: gitea.lugnas.de
|
registry: git.gremiumhub.de
|
||||||
# username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
# password: ${{ secrets.DOCKER_PUSH_TOKEN }}
|
password: ${{ secrets.DOCKER_PUSH_TOKEN }}
|
||||||
#
|
|
||||||
# - name: Extract metadata for Docker
|
- name: Extract metadata for Docker
|
||||||
# id: meta
|
id: meta
|
||||||
# uses: docker/metadata-action@v5
|
uses: docker/metadata-action@v5
|
||||||
# with:
|
with:
|
||||||
# images: gitea.lugnas.de/${{ github.repository_owner }}/legalconsenthub
|
images: git.gremiumhub.de/${{ github.repository_owner }}/gremiumhub
|
||||||
# tags: |
|
tags: |
|
||||||
# type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
|
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
|
||||||
# type=sha,prefix=,format=long
|
type=sha,prefix=,format=long
|
||||||
#
|
|
||||||
# - name: Build and push Docker image
|
- name: Build and push Docker image
|
||||||
# uses: docker/build-push-action@v5
|
uses: docker/build-push-action@v5
|
||||||
# with:
|
with:
|
||||||
# context: .
|
context: .
|
||||||
# file: ./legalconsenthub/Dockerfile
|
file: ./gremiumhub/Dockerfile
|
||||||
# push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
||||||
# platforms: linux/amd64
|
platforms: linux/amd64
|
||||||
# tags: ${{ steps.meta.outputs.tags }}
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
# labels: ${{ steps.meta.outputs.labels }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
# cache-from: type=local,src=/tmp/.buildx-cache
|
cache-from: type=local,src=/tmp/.buildx-cache-frontend
|
||||||
# cache-to: type=local,dest=/tmp/.buildx-cache
|
cache-to: type=local,dest=/tmp/.buildx-cache-frontend,mode=max
|
||||||
#
|
|
||||||
# - name: Image built successfully
|
- name: Image built successfully
|
||||||
# if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||||
# run: |
|
run: |
|
||||||
# echo "✅ Docker image built and pushed successfully"
|
echo "✅ Docker image built and pushed successfully"
|
||||||
# echo "📦 Image: gitea.lugnas.de/${{ github.repository_owner }}/legalconsenthub:latest"
|
echo "📦 Image: git.gremiumhub.de/${{ github.repository_owner }}/gremiumhub:latest"
|
||||||
# echo "📦 Image: gitea.lugnas.de/${{ github.repository_owner }}/legalconsenthub:${{ github.sha }}"
|
echo "📦 Image: git.gremiumhub.de/${{ github.repository_owner }}/gremiumhub:${{ github.sha }}"
|
||||||
#
|
|
||||||
# - name: Dry-run completed
|
- name: Dry-run completed
|
||||||
# if: github.event_name == 'pull_request'
|
if: github.event_name == 'pull_request'
|
||||||
# run: |
|
run: |
|
||||||
# echo "✅ Dry-run build completed successfully (image not pushed)"
|
echo "✅ Dry-run build completed successfully (image not pushed)"
|
||||||
#
|
|
||||||
# backend:
|
backend:
|
||||||
# runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
#
|
|
||||||
# defaults:
|
defaults:
|
||||||
# run:
|
run:
|
||||||
# working-directory: ./legalconsenthub-backend
|
working-directory: ./gremiumhub-backend
|
||||||
#
|
|
||||||
# steps:
|
steps:
|
||||||
# - name: Checkout code
|
- name: Checkout code
|
||||||
# uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
#
|
|
||||||
# - name: Setup Java
|
- name: Setup Java
|
||||||
# uses: actions/setup-java@v4
|
uses: actions/setup-java@v4
|
||||||
# with:
|
with:
|
||||||
# distribution: 'temurin'
|
distribution: 'temurin'
|
||||||
# java-version: '21'
|
java-version: '21'
|
||||||
#
|
|
||||||
# - name: Setup Gradle cache
|
- name: Setup Gradle cache
|
||||||
# uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
# with:
|
with:
|
||||||
# path: |
|
path: |
|
||||||
# ~/.gradle/caches
|
~/.gradle/caches
|
||||||
# ~/.gradle/wrapper
|
~/.gradle/wrapper
|
||||||
# legalconsenthub-backend/.gradle
|
gremiumhub-backend/.gradle
|
||||||
# key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||||
# restore-keys: |
|
restore-keys: |
|
||||||
# ${{ runner.os }}-gradle-
|
${{ runner.os }}-gradle-
|
||||||
#
|
|
||||||
# - name: Build application
|
- name: Build application
|
||||||
# run: ./gradlew build -x test
|
run: ./gradlew build -x test
|
||||||
#
|
|
||||||
# - name: Run ktlint check
|
- name: Run ktlint check
|
||||||
# run: ./gradlew ktlintCheck
|
run: ./gradlew ktlintCheck
|
||||||
#
|
|
||||||
# - name: Run tests
|
- name: Run tests
|
||||||
# run: ./gradlew test
|
run: ./gradlew test
|
||||||
# env:
|
env:
|
||||||
# # Fixes Ryuk testcontainers error during test (https://github.com/testcontainers/testcontainers-java/issues/7036)
|
TESTCONTAINERS_RYUK_DISABLED: "true"
|
||||||
# TESTCONTAINERS_HOST_OVERRIDE: host.docker.internal
|
|
||||||
#
|
- name: Set up Docker Buildx
|
||||||
# - name: Set up Docker Buildx
|
uses: docker/setup-buildx-action@v3
|
||||||
# uses: docker/setup-buildx-action@v3
|
|
||||||
#
|
- name: Log in to Gitea Container Registry
|
||||||
# - name: Log in to Gitea Container Registry
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||||
# if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
uses: docker/login-action@v3
|
||||||
# uses: docker/login-action@v3
|
with:
|
||||||
# with:
|
registry: git.gremiumhub.de
|
||||||
# registry: gitea.lugnas.de
|
username: ${{ github.actor }}
|
||||||
# username: ${{ github.actor }}
|
password: ${{ secrets.DOCKER_PUSH_TOKEN }}
|
||||||
# password: ${{ secrets.DOCKER_PUSH_TOKEN }}
|
|
||||||
#
|
- name: Extract metadata for Docker
|
||||||
# - name: Extract metadata for Docker
|
id: meta
|
||||||
# id: meta
|
uses: docker/metadata-action@v5
|
||||||
# uses: docker/metadata-action@v5
|
with:
|
||||||
# with:
|
images: git.gremiumhub.de/${{ github.repository_owner }}/gremiumhub-backend
|
||||||
# images: gitea.lugnas.de/${{ github.repository_owner }}/legalconsenthub-backend
|
tags: |
|
||||||
# tags: |
|
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
|
||||||
# type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
|
type=sha,prefix=,format=long
|
||||||
# type=sha,prefix=,format=long
|
|
||||||
#
|
- name: Build and push Docker image
|
||||||
# - name: Build and push Docker image
|
uses: docker/build-push-action@v5
|
||||||
# uses: docker/build-push-action@v5
|
with:
|
||||||
# with:
|
context: .
|
||||||
# context: .
|
file: ./gremiumhub-backend/Dockerfile
|
||||||
# file: ./legalconsenthub-backend/Dockerfile
|
push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
||||||
# push: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
platforms: linux/amd64
|
||||||
# platforms: linux/amd64
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
# tags: ${{ steps.meta.outputs.tags }}
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
# labels: ${{ steps.meta.outputs.labels }}
|
cache-from: type=local,src=/tmp/.buildx-cache-backend
|
||||||
# cache-from: type=local,src=/tmp/.buildx-cache
|
cache-to: type=local,dest=/tmp/.buildx-cache-backend,mode=max
|
||||||
# cache-to: type=local,dest=/tmp/.buildx-cache
|
|
||||||
#
|
- name: Image built successfully
|
||||||
# - name: Image built successfully
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||||
# if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
run: |
|
||||||
# run: |
|
echo "✅ Docker image built and pushed successfully"
|
||||||
# echo "✅ Docker image built and pushed successfully"
|
echo "📦 Image: git.gremiumhub.de/${{ github.repository_owner }}/gremiumhub-backend:latest"
|
||||||
# echo "📦 Image: gitea.lugnas.de/${{ github.repository_owner }}/legalconsenthub-backend:latest"
|
echo "📦 Image: git.gremiumhub.de/${{ github.repository_owner }}/gremiumhub-backend:${{ github.sha }}"
|
||||||
# echo "📦 Image: gitea.lugnas.de/${{ github.repository_owner }}/legalconsenthub-backend:${{ github.sha }}"
|
|
||||||
#
|
- name: Dry-run completed
|
||||||
# - name: Dry-run completed
|
if: github.event_name == 'pull_request'
|
||||||
# if: github.event_name == 'pull_request'
|
run: |
|
||||||
# run: |
|
echo "✅ Dry-run build completed successfully (image not pushed)"
|
||||||
# echo "✅ Dry-run build completed successfully (image not pushed)"
|
|
||||||
#
|
deploy:
|
||||||
# deploy:
|
runs-on: ubuntu-latest
|
||||||
# runs-on: ubuntu-latest
|
needs: [frontend, backend]
|
||||||
# needs: [frontend, backend]
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
||||||
# if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
|
||||||
#
|
steps:
|
||||||
# steps:
|
- name: Trigger Coolify redeploy (frontend)
|
||||||
# - name: Checkout code
|
run: |
|
||||||
# uses: actions/checkout@v4
|
curl -s -X POST \
|
||||||
#
|
-H "Authorization: Bearer ${{ secrets.COOLIFY_DEPLOY_TOKEN }}" \
|
||||||
# - name: Deploy to server
|
"https://coolify.gremiumhub.de/api/v1/deploy?uuid=${{ secrets.COOLIFY_FRONTEND_UUID }}&force=false"
|
||||||
# run: |
|
|
||||||
# ssh -i ~/.ssh/id_rsa -p 32766 -o StrictHostKeyChecking=accept-new deploy@ds218 "sudo /usr/local/bin/deployLegalconsenthub.sh"
|
- name: Trigger Coolify redeploy (backend)
|
||||||
#
|
run: |
|
||||||
# - name: Deployment successful
|
curl -s -X POST \
|
||||||
# run: |
|
-H "Authorization: Bearer ${{ secrets.COOLIFY_DEPLOY_TOKEN }}" \
|
||||||
# echo "✅ Deployment triggered successfully"
|
"https://coolify.gremiumhub.de/api/v1/deploy?uuid=${{ secrets.COOLIFY_BACKEND_UUID }}&force=false"
|
||||||
# echo "🚀 Application is being deployed to production"
|
|
||||||
|
- name: Deployment triggered
|
||||||
|
run: |
|
||||||
|
echo "✅ Coolify redeployment triggered successfully"
|
||||||
|
echo "🚀 Frontend and backend are being redeployed"
|
||||||
|
|||||||
11
.gitignore
vendored
11
.gitignore
vendored
@@ -58,16 +58,19 @@ bin/
|
|||||||
.kotlin
|
.kotlin
|
||||||
|
|
||||||
### OpenAPI ###
|
### OpenAPI ###
|
||||||
legalconsenthub/.api-client
|
gremiumhub/.api-client
|
||||||
legalconsenthub/.api-client-middleware
|
gremiumhub/.api-client-middleware
|
||||||
|
|
||||||
### TestContainers persistent data ###
|
### TestContainers persistent data ###
|
||||||
legalconsenthub-backend/postgres-data/
|
gremiumhub-backend/postgres-data/
|
||||||
|
|
||||||
### Docker BuildKit cache ###
|
### Docker BuildKit cache ###
|
||||||
.buildx-cache/
|
.buildx-cache/
|
||||||
|
|
||||||
### Version PDF cache (dev) ###
|
### Version PDF cache (dev) ###
|
||||||
legalconsenthub-backend/.pdf-store/*
|
gremiumhub-backend/.pdf-store/*
|
||||||
|
|
||||||
data
|
data
|
||||||
|
.playwright-*
|
||||||
|
coverage
|
||||||
|
.worktrees/
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
<option name="ACTIVE_PROFILES" value="h2" />
|
<option name="ACTIVE_PROFILES" value="h2" />
|
||||||
<option name="ALTERNATIVE_JRE_PATH" value="ms-21" />
|
<option name="ALTERNATIVE_JRE_PATH" value="ms-21" />
|
||||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
|
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
|
||||||
<module name="com.betriebsratkanzlei.legalconsenthub.main" />
|
<module name="gremiumhub.main" />
|
||||||
<option name="SPRING_BOOT_MAIN_CLASS" value="com.betriebsratkanzlei.legalconsenthub.LegalconsenthubApplication" />
|
<option name="SPRING_BOOT_MAIN_CLASS" value="com.betriebsratkanzlei.gremiumhub.GremiumhubApplication" />
|
||||||
<method v="2">
|
<method v="2">
|
||||||
<option name="Make" enabled="true" />
|
<option name="Make" enabled="true" />
|
||||||
</method>
|
</method>
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
<option name="ACTIVE_PROFILES" value="testcontainers" />
|
<option name="ACTIVE_PROFILES" value="testcontainers" />
|
||||||
<option name="ALTERNATIVE_JRE_PATH" value="ms-21" />
|
<option name="ALTERNATIVE_JRE_PATH" value="ms-21" />
|
||||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
|
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
|
||||||
<module name="com.betriebsratkanzlei.legalconsenthub.main" />
|
<module name="com.betriebsratkanzlei.gremiumhub.main" />
|
||||||
<option name="SPRING_BOOT_MAIN_CLASS" value="com.betriebsratkanzlei.legalconsenthub.LegalconsenthubApplication" />
|
<option name="SPRING_BOOT_MAIN_CLASS" value="com.betriebsratkanzlei.gremiumhub.GremiumhubApplication" />
|
||||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/legalconsenthub-backend" />
|
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/gremiumhub-backend" />
|
||||||
<method v="2">
|
<method v="2">
|
||||||
<option name="Make" enabled="true" />
|
<option name="Make" enabled="true" />
|
||||||
</method>
|
</method>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<component name="ProjectRunConfigurationManager">
|
<component name="ProjectRunConfigurationManager">
|
||||||
<configuration default="false" name="server: nuxt" type="NodeJSConfigurationType" application-parameters="dev --port 3001 --host" path-to-js-file="node_modules/nuxt/bin/nuxt.mjs" working-dir="$PROJECT_DIR$/legalconsenthub">
|
<configuration default="false" name="server: nuxt" type="NodeJSConfigurationType" application-parameters="dev --port 3001 --host" path-to-js-file="node_modules/nuxt/bin/nuxt.mjs" working-dir="$PROJECT_DIR$/gremiumhub">
|
||||||
<method v="2" />
|
<method v="2" />
|
||||||
</configuration>
|
</configuration>
|
||||||
</component>
|
</component>
|
||||||
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
@@ -8,13 +8,13 @@
|
|||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "client: chrome",
|
"name": "client: chrome",
|
||||||
"url": "http://192.168.178.114:3001",
|
"url": "http://192.168.178.114:3001",
|
||||||
"webRoot": "${workspaceFolder}/legalconsenthub"
|
"webRoot": "${workspaceFolder}/gremiumhub"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "server: nuxt",
|
"name": "server: nuxt",
|
||||||
"outputCapture": "std",
|
"outputCapture": "std",
|
||||||
"cwd": "${workspaceFolder}/legalconsenthub",
|
"cwd": "${workspaceFolder}/gremiumhub",
|
||||||
"type": "node-terminal",
|
"type": "node-terminal",
|
||||||
"command": "pnpm run dev"
|
"command": "pnpm run dev"
|
||||||
}
|
}
|
||||||
|
|||||||
34
CLAUDE.md
34
CLAUDE.md
@@ -1,4 +1,4 @@
|
|||||||
# Legal Consent Hub - AI Context
|
# GremiumHub - AI Context
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
@@ -73,9 +73,9 @@ ApplicationForm
|
|||||||
## Project Structure
|
## Project Structure
|
||||||
|
|
||||||
```
|
```
|
||||||
legalconsenthub/ # Frontend (Nuxt 4, Vue 3) - see legalconsenthub/CLAUDE.md
|
gremiumhub/ # Frontend (Nuxt 4, Vue 3) - see gremiumhub/CLAUDE.md
|
||||||
api/ # OpenAPI spec - see api/CLAUDE.md
|
api/ # OpenAPI spec - see api/CLAUDE.md
|
||||||
legalconsenthub-backend/ # Backend (Spring Boot, Kotlin) - see legalconsenthub-backend/CLAUDE.md
|
gremiumhub-backend/ # Backend (Spring Boot, Kotlin) - see gremiumhub-backend/CLAUDE.md
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -84,20 +84,20 @@ legalconsenthub-backend/ # Backend (Spring Boot, Kotlin) - see legalconsen
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Frontend (port 3001)
|
# Frontend (port 3001)
|
||||||
cd legalconsenthub && pnpm install && pnpm run dev
|
cd gremiumhub && pnpm install && pnpm run dev
|
||||||
|
|
||||||
# Backend (port 8080)
|
# Backend (port 8080)
|
||||||
cd legalconsenthub-backend && ./gradlew bootRun
|
cd gremiumhub-backend && ./gradlew bootRun
|
||||||
|
|
||||||
# Generate API clients (REQUIRED after modifying api/legalconsenthub.yml)
|
# Generate API clients (REQUIRED after modifying api/gremiumhub.yml)
|
||||||
cd legalconsenthub && pnpm run api:generate # Frontend TypeScript client
|
cd gremiumhub && pnpm run api:generate # Frontend TypeScript client
|
||||||
cd legalconsenthub-backend && ./gradlew generate_legalconsenthub_server # Backend Kotlin server stubs
|
cd gremiumhub-backend && ./gradlew generate_gremiumhub_server # Backend Kotlin server stubs
|
||||||
```
|
```
|
||||||
|
|
||||||
**⚠️ CRITICAL: API Client Regeneration**
|
**⚠️ CRITICAL: API Client Regeneration**
|
||||||
After ANY change to `api/legalconsenthub.yml`, you MUST regenerate BOTH clients:
|
After ANY change to `api/gremiumhub.yml`, you MUST regenerate BOTH clients:
|
||||||
1. Frontend: `pnpm run api:generate` (TypeScript client)
|
1. Frontend: `pnpm run api:generate` (TypeScript client)
|
||||||
2. Backend: `./gradlew generate_legalconsenthub_server` (Kotlin server stubs)
|
2. Backend: `./gradlew generate_gremiumhub_server` (Kotlin server stubs)
|
||||||
|
|
||||||
Compilation/runtime will fail if clients are out of sync with the OpenAPI spec.
|
Compilation/runtime will fail if clients are out of sync with the OpenAPI spec.
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ Compilation/runtime will fail if clients are out of sync with the OpenAPI spec.
|
|||||||
|
|
||||||
| File | Purpose |
|
| File | Purpose |
|
||||||
|------|---------|
|
|------|---------|
|
||||||
| `api/legalconsenthub.yml` | OpenAPI spec (source of truth) |
|
| `api/gremiumhub.yml` | OpenAPI spec (source of truth) |
|
||||||
| `.github/workflows/pipeline.yaml` | CI/CD workflow |
|
| `.github/workflows/pipeline.yaml` | CI/CD workflow |
|
||||||
|
|
||||||
See subproject CLAUDE.md files for component-specific key files.
|
See subproject CLAUDE.md files for component-specific key files.
|
||||||
@@ -117,15 +117,17 @@ See subproject CLAUDE.md files for component-specific key files.
|
|||||||
## Rules for AI
|
## Rules for AI
|
||||||
|
|
||||||
1. **API-first workflow** - ALWAYS follow this sequence when modifying APIs:
|
1. **API-first workflow** - ALWAYS follow this sequence when modifying APIs:
|
||||||
a. Modify `api/legalconsenthub.yml` OpenAPI spec first
|
a. Modify `api/gremiumhub.yml` OpenAPI spec first
|
||||||
b. Regenerate frontend client: `cd legalconsenthub && pnpm run api:generate`
|
b. Regenerate frontend client: `cd gremiumhub && pnpm run api:generate`
|
||||||
c. Regenerate backend stubs: `cd legalconsenthub-backend && ./gradlew generate_legalconsenthub_server`
|
c. Regenerate backend stubs: `cd gremiumhub-backend && ./gradlew generate_gremiumhub_server`
|
||||||
d. Implement backend controller methods (they implement generated interfaces)
|
d. **Update backend entity class AND mapper class** for every new DTO field — fields missing from the entity silently return `null` from the API. If the new field requires database storage, note that a SQL migration is needed (the user handles migrations).
|
||||||
e. Use generated client in frontend (never write manual API calls)
|
e. Implement backend controller methods (they implement generated interfaces)
|
||||||
|
f. Use generated client in frontend (never write manual API calls)
|
||||||
2. **Organization context** - Always consider `organizationId` for multi-tenancy. Forms with empty/null organizationId are "global" forms visible to all organizations
|
2. **Organization context** - Always consider `organizationId` for multi-tenancy. Forms with empty/null organizationId are "global" forms visible to all organizations
|
||||||
3. **Form structure is 3-level** - Section → SubSection → Element
|
3. **Form structure is 3-level** - Section → SubSection → Element
|
||||||
4. **Roles managed in Keycloak** - Not in application database
|
4. **Roles managed in Keycloak** - Not in application database
|
||||||
5. **Subproject-specific rules** - See `CLAUDE.md` files in each subproject directory
|
5. **Subproject-specific rules** - See `CLAUDE.md` files in each subproject directory
|
||||||
|
6. **Don't create worktrees, don't commit** - Directly modify the main branch. The user will handle branching and PRs.
|
||||||
|
|
||||||
### Code Style
|
### Code Style
|
||||||
- Order functions top-down by abstraction (public API first, helpers below)
|
- Order functions top-down by abstraction (public API first, helpers below)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Legal Consent Hub
|
# GremiumHub
|
||||||
|
|
||||||
A comprehensive platform for digital applications, approvals, and discussions, designed for organizational workflows involving employee data processing and consent management.
|
A comprehensive platform for digital applications, approvals, and discussions, designed for organizational workflows involving employee data processing and consent management.
|
||||||
|
|
||||||
|
|||||||
@@ -43,13 +43,13 @@ DELETE /notifications/clear-all
|
|||||||
|
|
||||||
| File | Purpose |
|
| File | Purpose |
|
||||||
|------|---------|
|
|------|---------|
|
||||||
| `legalconsenthub.yml` | OpenAPI 3.0.3 specification (source of truth) |
|
| `gremiumhub.yml` | OpenAPI 3.0.3 specification (source of truth) |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## API-First Workflow
|
## API-First Workflow
|
||||||
|
|
||||||
1. **Modify OpenAPI spec** (`api/legalconsenthub.yml`)
|
1. **Modify OpenAPI spec** (`api/gremiumhub.yml`)
|
||||||
- Add/update endpoints, request/response schemas
|
- Add/update endpoints, request/response schemas
|
||||||
- Follow OpenAPI 3.0.3 standards
|
- Follow OpenAPI 3.0.3 standards
|
||||||
- Document all parameters and responses
|
- Document all parameters and responses
|
||||||
@@ -57,10 +57,10 @@ DELETE /notifications/clear-all
|
|||||||
2. **Generate clients**
|
2. **Generate clients**
|
||||||
```bash
|
```bash
|
||||||
# Frontend TypeScript client
|
# Frontend TypeScript client
|
||||||
cd legalconsenthub && pnpm run api:generate
|
cd gremiumhub && pnpm run api:generate
|
||||||
|
|
||||||
# Backend Kotlin server stubs
|
# Backend Kotlin server stubs
|
||||||
cd legalconsenthub-backend && ./gradlew generate_legalconsenthub_server
|
cd gremiumhub-backend && ./gradlew generate_gremiumhub_server
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Implement backend logic**
|
3. **Implement backend logic**
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
openapi: "3.0.3"
|
openapi: "3.0.3"
|
||||||
info:
|
info:
|
||||||
title: legalconsenthub
|
title: gremiumhub
|
||||||
version: 0.1.0
|
version: 0.1.0
|
||||||
description: A platform for digital applications, approvals and discussions.
|
description: A platform for digital applications, approvals and discussions.
|
||||||
contact:
|
contact:
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
# Same file as .env in Synology docker directory
|
# Same file as .env in Synology docker directory
|
||||||
|
|
||||||
# Database Configuration
|
# Database Configuration
|
||||||
LEGALCONSENTHUB_POSTGRES_USER=legalconsenthub
|
GREMIUMHUB_POSTGRES_USER=gremiumhub
|
||||||
LEGALCONSENTHUB_POSTGRES_PASSWORD=legalconsenthub
|
GREMIUMHUB_POSTGRES_PASSWORD=gremiumhub
|
||||||
LEGALCONSENTHUB_POSTGRES_DB=legalconsenthub
|
GREMIUMHUB_POSTGRES_DB=gremiumhub
|
||||||
|
|
||||||
KEYCLOAK_POSTGRES_USER=keycloak
|
KEYCLOAK_POSTGRES_USER=keycloak
|
||||||
KEYCLOAK_POSTGRES_PASSWORD=keycloak
|
KEYCLOAK_POSTGRES_PASSWORD=keycloak
|
||||||
@@ -16,17 +16,17 @@ MAIL_HOST=maildev
|
|||||||
KEYCLOAK_ADMIN=admin
|
KEYCLOAK_ADMIN=admin
|
||||||
KEYCLOAK_ADMIN_PASSWORD=
|
KEYCLOAK_ADMIN_PASSWORD=
|
||||||
KEYCLOAK_HOSTNAME=keycloak.lugnas.de
|
KEYCLOAK_HOSTNAME=keycloak.lugnas.de
|
||||||
KEYCLOAK_REALM=legalconsenthub
|
KEYCLOAK_REALM=gremiumhub
|
||||||
|
|
||||||
# Frontend Configuration (Nuxt)
|
# Frontend Configuration (Nuxt)
|
||||||
NUXT_PUBLIC_CLIENT_PROXY_BASE_PATH=/api
|
NUXT_PUBLIC_CLIENT_PROXY_BASE_PATH=/api
|
||||||
NUXT_PUBLIC_SERVER_API_BASE_URL=http://backend:8080
|
NUXT_PUBLIC_SERVER_API_BASE_URL=http://backend:8080
|
||||||
NUXT_PUBLIC_SERVER_API_BASE_PATH=/
|
NUXT_PUBLIC_SERVER_API_BASE_PATH=/
|
||||||
NUXT_PUBLIC_KEYCLOAK_TOKEN_URL=http://keycloak.lugnas.de/realms/legalconsenthub/protocol/openid-connect/token
|
NUXT_PUBLIC_KEYCLOAK_TOKEN_URL=http://keycloak.lugnas.de/realms/gremiumhub/protocol/openid-connect/token
|
||||||
|
|
||||||
NUXT_OAUTH_KEYCLOAK_CLIENT_ID=legalconsenthub
|
NUXT_OAUTH_KEYCLOAK_CLIENT_ID=gremiumhub
|
||||||
NUXT_OAUTH_KEYCLOAK_CLIENT_SECRET=
|
NUXT_OAUTH_KEYCLOAK_CLIENT_SECRET=
|
||||||
NUXT_OAUTH_KEYCLOAK_REALM=legalconsenthub
|
NUXT_OAUTH_KEYCLOAK_REALM=gremiumhub
|
||||||
NUXT_OAUTH_KEYCLOAK_SERVER_URL=http://keycloak.lugnas.de
|
NUXT_OAUTH_KEYCLOAK_SERVER_URL=http://keycloak.lugnas.de
|
||||||
NUXT_OAUTH_KEYCLOAK_SERVER_URL_INTERNAL=http://keycloak.lugnas.de
|
NUXT_OAUTH_KEYCLOAK_SERVER_URL_INTERNAL=http://keycloak.lugnas.de
|
||||||
# Make sure to add the host to (1) Keycloak valid redirect URIs and (2) web origins!
|
# Make sure to add the host to (1) Keycloak valid redirect URIs and (2) web origins!
|
||||||
|
|||||||
@@ -1,18 +1,18 @@
|
|||||||
name: legalconsenthub-dev
|
name: gremiumhub-dev
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
legalconsenthub-net:
|
gremiumhub-net:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
legalconsenthub_postgres_data:
|
gremiumhub_postgres_data:
|
||||||
legalconsenthub_pdf_cache:
|
gremiumhub_pdf_cache:
|
||||||
keycloak_postgres_data:
|
keycloak_postgres_data:
|
||||||
|
|
||||||
services:
|
services:
|
||||||
keycloak:
|
keycloak:
|
||||||
image: quay.io/keycloak/keycloak:26.4.0
|
image: quay.io/keycloak/keycloak:26.4.0
|
||||||
container_name: legalconsenthub-keycloak
|
container_name: gremiumhub-keycloak
|
||||||
command: start-dev
|
command: start-dev
|
||||||
environment:
|
environment:
|
||||||
KC_DB: postgres
|
KC_DB: postgres
|
||||||
@@ -37,7 +37,7 @@ services:
|
|||||||
keycloak-db:
|
keycloak-db:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
networks:
|
networks:
|
||||||
- legalconsenthub-net
|
- gremiumhub-net
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD-SHELL", "curl --head -fsS http://localhost:9000/health/ready | echo $?"]
|
test: ["CMD-SHELL", "curl --head -fsS http://localhost:9000/health/ready | echo $?"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
@@ -47,7 +47,7 @@ services:
|
|||||||
|
|
||||||
keycloak-db:
|
keycloak-db:
|
||||||
image: postgres:latest
|
image: postgres:latest
|
||||||
container_name: legalconsenthub-keycloak-postgres
|
container_name: gremiumhub-keycloak-postgres
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_USER: ${KEYCLOAK_POSTGRES_USER}
|
POSTGRES_USER: ${KEYCLOAK_POSTGRES_USER}
|
||||||
POSTGRES_PASSWORD: ${KEYCLOAK_POSTGRES_PASSWORD}
|
POSTGRES_PASSWORD: ${KEYCLOAK_POSTGRES_PASSWORD}
|
||||||
@@ -57,7 +57,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "5532:5432"
|
- "5532:5432"
|
||||||
networks:
|
networks:
|
||||||
- legalconsenthub-net
|
- gremiumhub-net
|
||||||
volumes:
|
volumes:
|
||||||
- keycloak_postgres_data:/var/lib/postgresql
|
- keycloak_postgres_data:/var/lib/postgresql
|
||||||
healthcheck:
|
healthcheck:
|
||||||
@@ -69,63 +69,63 @@ services:
|
|||||||
|
|
||||||
maildev:
|
maildev:
|
||||||
image: maildev/maildev:2.2.1
|
image: maildev/maildev:2.2.1
|
||||||
container_name: legalconsenthub-maildev
|
container_name: gremiumhub-maildev
|
||||||
ports:
|
ports:
|
||||||
- "1080:1080"
|
- "1080:1080"
|
||||||
- "1025:1025"
|
- "1025:1025"
|
||||||
networks:
|
networks:
|
||||||
- legalconsenthub-net
|
- gremiumhub-net
|
||||||
|
|
||||||
###############################################
|
###############################################
|
||||||
#
|
#
|
||||||
# backend:
|
# backend:
|
||||||
# image: gitea.lugnas.de/denis/legalconsenthub-backend:latest
|
# image: gitea.lugnas.de/denis/gremiumhub-backend:latest
|
||||||
# container_name: legalconsenthub-backend-local
|
# container_name: gremiumhub-backend-local
|
||||||
# restart: on-failure:2
|
# restart: on-failure:2
|
||||||
# environment:
|
# environment:
|
||||||
# LOGGING_LEVEL_ROOT: ${LOGGING_LEVEL_ROOT:-DEBUG}
|
# LOGGING_LEVEL_ROOT: ${LOGGING_LEVEL_ROOT:-DEBUG}
|
||||||
# LOGGING_LEVEL_APP: ${LOGGING_LEVEL_APP:-DEBUG}
|
# LOGGING_LEVEL_APP: ${LOGGING_LEVEL_APP:-DEBUG}
|
||||||
# LEGALCONSENTHUB_DB_URL: jdbc:postgresql://legalconsenthub-db:5432/${LEGALCONSENTHUB_POSTGRES_DB}
|
# GREMIUMHUB_DB_URL: jdbc:postgresql://gremiumhub-db:5432/${GREMIUMHUB_POSTGRES_DB}
|
||||||
# LEGALCONSENTHUB_DB_APP_USER: ${LEGALCONSENTHUB_POSTGRES_USER}
|
# GREMIUMHUB_DB_APP_USER: ${GREMIUMHUB_POSTGRES_USER}
|
||||||
# LEGALCONSENTHUB_DB_PASSWORD: ${LEGALCONSENTHUB_POSTGRES_PASSWORD}
|
# GREMIUMHUB_DB_PASSWORD: ${GREMIUMHUB_POSTGRES_PASSWORD}
|
||||||
# SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI: ${KEYCLOAK_ISSUER_URL}/realms/${KEYCLOAK_REALM}
|
# SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI: ${KEYCLOAK_ISSUER_URL}/realms/${KEYCLOAK_REALM}
|
||||||
# SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_JWK_SET_URI: http://keycloak:8080/realms/${KEYCLOAK_REALM}/protocol/openid-connect/certs
|
# SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_JWK_SET_URI: http://keycloak:8080/realms/${KEYCLOAK_REALM}/protocol/openid-connect/certs
|
||||||
# SERVER_PORT: 8080
|
# SERVER_PORT: 8080
|
||||||
# LEGALCONSENTHUB_PDF_STORAGE_FILESYSTEM_BASE_DIR: /var/lib/legalconsenthub/pdfs
|
# GREMIUMHUB_PDF_STORAGE_FILESYSTEM_BASE_DIR: /var/lib/gremiumhub/pdfs
|
||||||
# ports:
|
# ports:
|
||||||
# - "8081:8080"
|
# - "8081:8080"
|
||||||
# volumes:
|
# volumes:
|
||||||
# - legalconsenthub_pdf_cache:/var/lib/legalconsenthub/pdfs
|
# - gremiumhub_pdf_cache:/var/lib/gremiumhub/pdfs
|
||||||
# depends_on:
|
# depends_on:
|
||||||
# legalconsenthub-db:
|
# gremiumhub-db:
|
||||||
# condition: service_started
|
# condition: service_started
|
||||||
# networks:
|
# networks:
|
||||||
# - legalconsenthub-net
|
# - gremiumhub-net
|
||||||
# env_file:
|
# env_file:
|
||||||
# - .env.dev
|
# - .env.dev
|
||||||
#
|
#
|
||||||
# frontend:
|
# frontend:
|
||||||
# image: gitea.lugnas.de/denis/legalconsenthub:latest
|
# image: gitea.lugnas.de/denis/gremiumhub:latest
|
||||||
# container_name: legalconsenthub-frontend-local
|
# container_name: gremiumhub-frontend-local
|
||||||
# ports:
|
# ports:
|
||||||
# - "3211:3000"
|
# - "3211:3000"
|
||||||
# networks:
|
# networks:
|
||||||
# - legalconsenthub-net
|
# - gremiumhub-net
|
||||||
# env_file:
|
# env_file:
|
||||||
# - .env.dev
|
# - .env.dev
|
||||||
#
|
#
|
||||||
# legalconsenthub-db:
|
# gremiumhub-db:
|
||||||
# image: postgres:latest
|
# image: postgres:latest
|
||||||
# container_name: legalconsenthub-postgres-local
|
# container_name: gremiumhub-postgres-local
|
||||||
# environment:
|
# environment:
|
||||||
# POSTGRES_USER: ${LEGALCONSENTHUB_POSTGRES_USER}
|
# POSTGRES_USER: ${GREMIUMHUB_POSTGRES_USER}
|
||||||
# POSTGRES_PASSWORD: ${LEGALCONSENTHUB_POSTGRES_PASSWORD}
|
# POSTGRES_PASSWORD: ${GREMIUMHUB_POSTGRES_PASSWORD}
|
||||||
# POSTGRES_DB: ${LEGALCONSENTHUB_POSTGRES_DB}
|
# POSTGRES_DB: ${GREMIUMHUB_POSTGRES_DB}
|
||||||
# ports:
|
# ports:
|
||||||
# - "5446:5432"
|
# - "5446:5432"
|
||||||
# networks:
|
# networks:
|
||||||
# - legalconsenthub-net
|
# - gremiumhub-net
|
||||||
# volumes:
|
# volumes:
|
||||||
# - legalconsenthub_postgres_data:/var/lib/postgresql
|
# - gremiumhub_postgres_data:/var/lib/postgresql
|
||||||
# env_file:
|
# env_file:
|
||||||
# - .env.dev
|
# - .env.dev
|
||||||
|
|||||||
@@ -1,66 +1,66 @@
|
|||||||
networks:
|
networks:
|
||||||
legalconsenthub-net:
|
gremiumhub-net:
|
||||||
driver: bridge
|
driver: bridge
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
legalconsenthub_postgres_data:
|
gremiumhub_postgres_data:
|
||||||
keycloak_postgres_data:
|
keycloak_postgres_data:
|
||||||
legalconsenthub_pdf_cache:
|
gremiumhub_pdf_cache:
|
||||||
|
|
||||||
services:
|
services:
|
||||||
backend:
|
backend:
|
||||||
image: gitea.lugnas.de/denis/legalconsenthub-backend:latest
|
image: gitea.lugnas.de/denis/gremiumhub-backend:latest
|
||||||
container_name: legalconsenthub-backend
|
container_name: gremiumhub-backend
|
||||||
restart: on-failure:2
|
restart: on-failure:2
|
||||||
environment:
|
environment:
|
||||||
LOGGING_LEVEL_ROOT: ${LOGGING_LEVEL_ROOT:-WARN}
|
LOGGING_LEVEL_ROOT: ${LOGGING_LEVEL_ROOT:-WARN}
|
||||||
LOGGING_LEVEL_APP: ${LOGGING_LEVEL_APP:-WARN}
|
LOGGING_LEVEL_APP: ${LOGGING_LEVEL_APP:-WARN}
|
||||||
LEGALCONSENTHUB_DB_URL: jdbc:postgresql://legalconsenthub-db:5432/${LEGALCONSENTHUB_POSTGRES_DB}
|
GREMIUMHUB_DB_URL: jdbc:postgresql://gremiumhub-db:5432/${GREMIUMHUB_POSTGRES_DB}
|
||||||
LEGALCONSENTHUB_DB_APP_USER: ${LEGALCONSENTHUB_POSTGRES_USER}
|
GREMIUMHUB_DB_APP_USER: ${GREMIUMHUB_POSTGRES_USER}
|
||||||
LEGALCONSENTHUB_DB_PASSWORD: ${LEGALCONSENTHUB_POSTGRES_PASSWORD}
|
GREMIUMHUB_DB_PASSWORD: ${GREMIUMHUB_POSTGRES_PASSWORD}
|
||||||
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI: ${KEYCLOAK_ISSUER_URL}/realms/${KEYCLOAK_REALM}
|
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER_URI: ${KEYCLOAK_ISSUER_URL}/realms/${KEYCLOAK_REALM}
|
||||||
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_JWK_SET_URI: ${KEYCLOAK_ISSUER_URL}/realms/${KEYCLOAK_REALM}/protocol/openid-connect/certs
|
SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_JWK_SET_URI: ${KEYCLOAK_ISSUER_URL}/realms/${KEYCLOAK_REALM}/protocol/openid-connect/certs
|
||||||
SERVER_PORT: 8080
|
SERVER_PORT: 8080
|
||||||
LEGALCONSENTHUB_PDF_STORAGE_FILESYSTEM_BASE_DIR: /var/lib/legalconsenthub/pdfs
|
GREMIUMHUB_PDF_STORAGE_FILESYSTEM_BASE_DIR: /var/lib/gremiumhub/pdfs
|
||||||
ports:
|
ports:
|
||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
volumes:
|
volumes:
|
||||||
- legalconsenthub_pdf_cache:/var/lib/legalconsenthub/pdfs
|
- gremiumhub_pdf_cache:/var/lib/gremiumhub/pdfs
|
||||||
- ./keycloak-theme:/opt/keycloak/themes
|
- ./keycloak-theme:/opt/keycloak/themes
|
||||||
depends_on:
|
depends_on:
|
||||||
legalconsenthub-db:
|
gremiumhub-db:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
keycloak:
|
keycloak:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
networks:
|
networks:
|
||||||
- legalconsenthub-net
|
- gremiumhub-net
|
||||||
env_file:
|
env_file:
|
||||||
- .env.prod
|
- .env.prod
|
||||||
|
|
||||||
frontend:
|
frontend:
|
||||||
image: gitea.lugnas.de/denis/legalconsenthub:latest
|
image: gitea.lugnas.de/denis/gremiumhub:latest
|
||||||
container_name: legalconsenthub-frontend
|
container_name: gremiumhub-frontend
|
||||||
ports:
|
ports:
|
||||||
- "3210:3000"
|
- "3210:3000"
|
||||||
depends_on:
|
depends_on:
|
||||||
keycloak:
|
keycloak:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
networks:
|
networks:
|
||||||
- legalconsenthub-net
|
- gremiumhub-net
|
||||||
env_file:
|
env_file:
|
||||||
- .env.prod
|
- .env.prod
|
||||||
|
|
||||||
landing:
|
landing:
|
||||||
image: gitea.lugnas.de/denis/legalconsenthub-landing:latest
|
image: gitea.lugnas.de/denis/gremiumhub-landing:latest
|
||||||
container_name: legalconsenthub-landing
|
container_name: gremiumhub-landing
|
||||||
ports:
|
ports:
|
||||||
- "3211:3000"
|
- "3211:3000"
|
||||||
networks:
|
networks:
|
||||||
- legalconsenthub-net
|
- gremiumhub-net
|
||||||
|
|
||||||
keycloak:
|
keycloak:
|
||||||
image: quay.io/keycloak/keycloak:26.4.0
|
image: quay.io/keycloak/keycloak:26.4.0
|
||||||
container_name: legalconsenthub-keycloak
|
container_name: gremiumhub-keycloak
|
||||||
command: start-dev
|
command: start-dev
|
||||||
environment:
|
environment:
|
||||||
KC_DB: postgres
|
KC_DB: postgres
|
||||||
@@ -82,13 +82,13 @@ services:
|
|||||||
keycloak-db:
|
keycloak-db:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
networks:
|
networks:
|
||||||
- legalconsenthub-net
|
- gremiumhub-net
|
||||||
env_file:
|
env_file:
|
||||||
- .env.prod
|
- .env.prod
|
||||||
|
|
||||||
keycloak-db:
|
keycloak-db:
|
||||||
image: postgres:latest
|
image: postgres:latest
|
||||||
container_name: legalconsenthub-keycloak-postgres
|
container_name: gremiumhub-keycloak-postgres
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_USER: ${KEYCLOAK_POSTGRES_USER}
|
POSTGRES_USER: ${KEYCLOAK_POSTGRES_USER}
|
||||||
POSTGRES_PASSWORD: ${KEYCLOAK_POSTGRES_PASSWORD}
|
POSTGRES_PASSWORD: ${KEYCLOAK_POSTGRES_PASSWORD}
|
||||||
@@ -96,33 +96,33 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "5445:5432"
|
- "5445:5432"
|
||||||
networks:
|
networks:
|
||||||
- legalconsenthub-net
|
- gremiumhub-net
|
||||||
volumes:
|
volumes:
|
||||||
- keycloak_postgres_data:/var/lib/postgresql
|
- keycloak_postgres_data:/var/lib/postgresql
|
||||||
env_file:
|
env_file:
|
||||||
- .env.prod
|
- .env.prod
|
||||||
|
|
||||||
legalconsenthub-db:
|
gremiumhub-db:
|
||||||
image: postgres:latest
|
image: postgres:latest
|
||||||
container_name: legalconsenthub-postgres
|
container_name: gremiumhub-postgres
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_USER: ${LEGALCONSENTHUB_POSTGRES_USER}
|
POSTGRES_USER: ${GREMIUMHUB_POSTGRES_USER}
|
||||||
POSTGRES_PASSWORD: ${LEGALCONSENTHUB_POSTGRES_PASSWORD}
|
POSTGRES_PASSWORD: ${GREMIUMHUB_POSTGRES_PASSWORD}
|
||||||
POSTGRES_DB: ${LEGALCONSENTHUB_POSTGRES_DB}
|
POSTGRES_DB: ${GREMIUMHUB_POSTGRES_DB}
|
||||||
ports:
|
ports:
|
||||||
- "5444:5432"
|
- "5444:5432"
|
||||||
networks:
|
networks:
|
||||||
- legalconsenthub-net
|
- gremiumhub-net
|
||||||
volumes:
|
volumes:
|
||||||
- legalconsenthub_postgres_data:/var/lib/postgresql
|
- gremiumhub_postgres_data:/var/lib/postgresql
|
||||||
env_file:
|
env_file:
|
||||||
- .env.prod
|
- .env.prod
|
||||||
|
|
||||||
maildev:
|
maildev:
|
||||||
image: maildev/maildev:2.2.1
|
image: maildev/maildev:2.2.1
|
||||||
container_name: legalconsenthub-maildev
|
container_name: gremiumhub-maildev
|
||||||
ports:
|
ports:
|
||||||
- "1080:1080"
|
- "1080:1080"
|
||||||
- "1026:1025"
|
- "1026:1025"
|
||||||
networks:
|
networks:
|
||||||
- legalconsenthub-net
|
- gremiumhub-net
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# LegalConsentHub Keycloak Theme - German translations
|
# GremiumHub Keycloak Theme - German translations
|
||||||
# Override default Keycloak messages here
|
# Override default Keycloak messages here
|
||||||
|
|
||||||
# Login page
|
# Login page
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# LegalConsentHub Keycloak Theme - English translations
|
# GremiumHub Keycloak Theme - English translations
|
||||||
# Override default Keycloak messages here
|
# Override default Keycloak messages here
|
||||||
|
|
||||||
# Login page
|
# Login page
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
/* LegalConsentHub Keycloak Theme - Matching Nuxt UI 4 Styling */
|
/* GremiumHub Keycloak Theme - Matching Nuxt UI 4 Styling */
|
||||||
/* Compatible with Keycloak 26+ PatternFly-based themes */
|
/* Compatible with Keycloak 26+ PatternFly-based themes */
|
||||||
|
|
||||||
/* CSS Variables matching Nuxt UI teal/cyan/violet theme */
|
/* CSS Variables matching Nuxt UI teal/cyan/violet theme */
|
||||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
## Context
|
## Context
|
||||||
|
|
||||||
The Legal Consent Hub requires real-time notification delivery to users. When events occur (e.g., form submissions, approvals, comments), affected users should receive notifications immediately without refreshing the page.
|
The GremiumHub requires real-time notification delivery to users. When events occur (e.g., form submissions, approvals, comments), affected users should receive notifications immediately without refreshing the page.
|
||||||
|
|
||||||
### Constraint: Stateless Backend
|
### Constraint: Stateless Backend
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ The backend **must be stateless** for horizontal scaling. Multiple backend insta
|
|||||||
|
|
||||||
## Current Implementation
|
## Current Implementation
|
||||||
|
|
||||||
**Location:** `src/main/kotlin/com/betriebsratkanzlei/legalconsenthub/notification/`
|
**Location:** `src/main/kotlin/com/betriebsratkanzlei/gremiumhub/notification/`
|
||||||
|
|
||||||
### Files
|
### Files
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
./gradlew build
|
./gradlew build
|
||||||
|
|
||||||
# Generate server stubs (after OpenAPI spec changes)
|
# Generate server stubs (after OpenAPI spec changes)
|
||||||
./gradlew generate_legalconsenthub_server
|
./gradlew generate_gremiumhub_server
|
||||||
|
|
||||||
# Database migrations
|
# Database migrations
|
||||||
# Never create Liquibase changesets in src/main/resources/db/changelog/
|
# Never create Liquibase changesets in src/main/resources/db/changelog/
|
||||||
@@ -88,7 +88,7 @@ formElementSections:
|
|||||||
| `src/main/resources/seed/demo/` | Demo form sections (11 files) |
|
| `src/main/resources/seed/demo/` | Demo form sections (11 files) |
|
||||||
| `src/main/kotlin/.../seed/SplitYamlLoader.kt` | YAML merger for !include directives |
|
| `src/main/kotlin/.../seed/SplitYamlLoader.kt` | YAML merger for !include directives |
|
||||||
| `src/main/resources/db/changelog/` | Liquibase migrations |
|
| `src/main/resources/db/changelog/` | Liquibase migrations |
|
||||||
| `src/main/kotlin/com/legalconsenthub/service/ApplicationFormFormatService.kt` | HTML/PDF export logic |
|
| `src/main/kotlin/com/betriebsratkanzlei/gremiumhub/application_form_version/ApplicationFormFormatService.kt` | HTML/PDF export logic |
|
||||||
| `docs/form-flow-diagram.md` | Visual form flow diagram (update after template changes) |
|
| `docs/form-flow-diagram.md` | Visual form flow diagram (update after template changes) |
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -97,6 +97,8 @@ formElementSections:
|
|||||||
|
|
||||||
1. **Never add SQL migrations** - They will be handled by the user
|
1. **Never add SQL migrations** - They will be handled by the user
|
||||||
2. **Use mapper classes** - All DTO ↔ Entity conversions must happen in dedicated mapper classes (never in services/controllers)
|
2. **Use mapper classes** - All DTO ↔ Entity conversions must happen in dedicated mapper classes (never in services/controllers)
|
||||||
|
- **CRITICAL: Entity + Mapper must be updated together** — When a new field is added to an OpenAPI DTO, you MUST update BOTH the entity class AND the mapper. A field present in the DTO but absent from the entity will silently return `null` from the API with no compile error. New entity fields that are persisted require a SQL migration (the user handles this).
|
||||||
|
- For JSON-typed fields (e.g. `GroupCondition`), use `@JdbcTypeCode(SqlTypes.JSON)` + `@Column(columnDefinition = "jsonb")`, same as `FormElement.visibilityConditions`.
|
||||||
3. **PDF Export Validation** - After changes to form elements, visibility, or spawning:
|
3. **PDF Export Validation** - After changes to form elements, visibility, or spawning:
|
||||||
- Test both HTML and PDF export for real form instances
|
- Test both HTML and PDF export for real form instances
|
||||||
- Verify all element types render correctly
|
- Verify all element types render correctly
|
||||||
@@ -4,18 +4,18 @@ WORKDIR /workspace/app
|
|||||||
|
|
||||||
RUN mkdir -p ../api
|
RUN mkdir -p ../api
|
||||||
|
|
||||||
COPY api/legalconsenthub.yml ../api/
|
COPY api/gremiumhub.yml ../api/
|
||||||
|
|
||||||
COPY legalconsenthub-backend/gradlew .
|
COPY gremiumhub-backend/gradlew .
|
||||||
COPY legalconsenthub-backend/gradle gradle
|
COPY gremiumhub-backend/gradle gradle
|
||||||
COPY legalconsenthub-backend/build.gradle .
|
COPY gremiumhub-backend/build.gradle .
|
||||||
COPY legalconsenthub-backend/settings.gradle .
|
COPY gremiumhub-backend/settings.gradle .
|
||||||
|
|
||||||
RUN chmod +x ./gradlew
|
RUN chmod +x ./gradlew
|
||||||
|
|
||||||
RUN ./gradlew dependencies --no-daemon
|
RUN ./gradlew dependencies --no-daemon
|
||||||
|
|
||||||
COPY legalconsenthub-backend/src src
|
COPY gremiumhub-backend/src src
|
||||||
|
|
||||||
RUN ./gradlew bootJar -x test --no-daemon
|
RUN ./gradlew bootJar -x test --no-daemon
|
||||||
|
|
||||||
@@ -35,14 +35,14 @@ RUN apk add --no-cache \
|
|||||||
RUN addgroup -S spring && adduser -S spring -G spring
|
RUN addgroup -S spring && adduser -S spring -G spring
|
||||||
|
|
||||||
# PDF cache directory must be writable by the non-root user (and ideally mounted as a volume in production)
|
# PDF cache directory must be writable by the non-root user (and ideally mounted as a volume in production)
|
||||||
RUN mkdir -p /var/lib/legalconsenthub/pdfs && chown -R spring:spring /var/lib/legalconsenthub
|
RUN mkdir -p /var/lib/gremiumhub/pdfs && chown -R spring:spring /var/lib/gremiumhub
|
||||||
USER spring:spring
|
USER spring:spring
|
||||||
|
|
||||||
COPY --from=builder /workspace/app/build/libs/*.jar app.jar
|
COPY --from=builder /workspace/app/build/libs/*.jar app.jar
|
||||||
|
|
||||||
ENV SPRING_PROFILES_ACTIVE=prod
|
ENV SPRING_PROFILES_ACTIVE=prod
|
||||||
ENV JAVA_OPTS="-Xms256m -Xmx512m"
|
ENV JAVA_OPTS="-Xms256m -Xmx512m"
|
||||||
ENV LEGALCONSENTHUB_PDF_STORAGE_FILESYSTEM_BASE_DIR=/var/lib/legalconsenthub/pdfs
|
ENV GREMIUMHUB_PDF_STORAGE_FILESYSTEM_BASE_DIR=/var/lib/gremiumhub/pdfs
|
||||||
|
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
# Legal Consent Hub Backend
|
# GremiumHub Backend
|
||||||
|
|
||||||
## Pipeline Triggering
|
## Pipeline Triggering
|
||||||
|
|
||||||
@@ -68,11 +68,11 @@ ktlint {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
def generatedSourcesServerLegalconsenthubDir = "$buildDir/generated/server".toString()
|
def generatedSourcesServerGremiumhubDir = "$buildDir/generated/server".toString()
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
main {
|
main {
|
||||||
kotlin.srcDirs += generatedSourcesServerLegalconsenthubDir + '/src/main/kotlin'
|
kotlin.srcDirs += generatedSourcesServerGremiumhubDir + '/src/main/kotlin'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,14 +80,14 @@ tasks.named('test') {
|
|||||||
useJUnitPlatform()
|
useJUnitPlatform()
|
||||||
}
|
}
|
||||||
|
|
||||||
task generate_legalconsenthub_server(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask) {
|
task generate_gremiumhub_server(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask) {
|
||||||
generatorName = 'kotlin-spring'
|
generatorName = 'kotlin-spring'
|
||||||
inputSpec = "$rootDir/../api/legalconsenthub.yml".toString()
|
inputSpec = "$rootDir/../api/gremiumhub.yml".toString()
|
||||||
outputDir = generatedSourcesServerLegalconsenthubDir
|
outputDir = generatedSourcesServerGremiumhubDir
|
||||||
apiPackage = 'com.betriebsratkanzlei.legalconsenthub_api.api'
|
apiPackage = 'com.betriebsratkanzlei.gremiumhub_api.api'
|
||||||
modelPackage = 'com.betriebsratkanzlei.legalconsenthub_api.model'
|
modelPackage = 'com.betriebsratkanzlei.gremiumhub_api.model'
|
||||||
groupId = 'com.betriebsratkanzlei'
|
groupId = 'com.betriebsratkanzlei'
|
||||||
id = 'legalconsenthub_api'
|
id = 'gremiumhub_api'
|
||||||
configOptions = [useTags : 'true',
|
configOptions = [useTags : 'true',
|
||||||
enumPropertyNaming: 'original',
|
enumPropertyNaming: 'original',
|
||||||
interfaceOnly : 'true',
|
interfaceOnly : 'true',
|
||||||
@@ -96,5 +96,5 @@ task generate_legalconsenthub_server(type: org.openapitools.generator.gradle.plu
|
|||||||
importMappings = [Instant: "java.time.Instant"]
|
importMappings = [Instant: "java.time.Instant"]
|
||||||
}
|
}
|
||||||
|
|
||||||
compileKotlin.dependsOn(tasks.generate_legalconsenthub_server)
|
compileKotlin.dependsOn(tasks.generate_gremiumhub_server)
|
||||||
runKtlintCheckOverMainSourceSet.dependsOn(generate_legalconsenthub_server)
|
runKtlintCheckOverMainSourceSet.dependsOn(generate_gremiumhub_server)
|
||||||
1
gremiumhub-backend/settings.gradle
Normal file
1
gremiumhub-backend/settings.gradle
Normal file
@@ -0,0 +1 @@
|
|||||||
|
rootProject.name = 'gremiumhub'
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub
|
package com.betriebsratkanzlei.gremiumhub
|
||||||
|
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication
|
import org.springframework.boot.autoconfigure.SpringBootApplication
|
||||||
import org.springframework.boot.runApplication
|
import org.springframework.boot.runApplication
|
||||||
@@ -10,8 +10,8 @@ import org.springframework.scheduling.annotation.EnableScheduling
|
|||||||
@EnableJpaAuditing
|
@EnableJpaAuditing
|
||||||
@EnableAsync
|
@EnableAsync
|
||||||
@EnableScheduling
|
@EnableScheduling
|
||||||
class LegalconsenthubApplication
|
class GremiumhubApplication
|
||||||
|
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
runApplication<LegalconsenthubApplication>(*args)
|
runApplication<GremiumhubApplication>(*args)
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form
|
package com.betriebsratkanzlei.gremiumhub.application_form
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form_version.ApplicationFormVersion
|
import com.betriebsratkanzlei.gremiumhub.application_form_version.ApplicationFormVersion
|
||||||
import com.betriebsratkanzlei.legalconsenthub.form_element.FormElementSection
|
import com.betriebsratkanzlei.gremiumhub.form_element.FormElementSection
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.User
|
import com.betriebsratkanzlei.gremiumhub.user.User
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormStatus
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormStatus
|
||||||
import jakarta.persistence.CascadeType
|
import jakarta.persistence.CascadeType
|
||||||
import jakarta.persistence.Column
|
import jakarta.persistence.Column
|
||||||
import jakarta.persistence.Entity
|
import jakarta.persistence.Entity
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form
|
package com.betriebsratkanzlei.gremiumhub.application_form
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.api.ApplicationFormApi
|
import com.betriebsratkanzlei.gremiumhub_api.api.ApplicationFormApi
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.FormElementDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.FormElementDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.PagedApplicationFormDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.PagedApplicationFormDto
|
||||||
import org.springframework.http.ResponseEntity
|
import org.springframework.http.ResponseEntity
|
||||||
import org.springframework.security.access.prepost.PreAuthorize
|
import org.springframework.security.access.prepost.PreAuthorize
|
||||||
import org.springframework.web.bind.annotation.RestController
|
import org.springframework.web.bind.annotation.RestController
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form
|
package com.betriebsratkanzlei.gremiumhub.application_form
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.export.latex.LatexEscaper
|
import com.betriebsratkanzlei.gremiumhub.application_form.export.latex.LatexEscaper
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.export.latex.LatexExportModel
|
import com.betriebsratkanzlei.gremiumhub.application_form.export.latex.LatexExportModel
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.export.latex.LatexFormElement
|
import com.betriebsratkanzlei.gremiumhub.application_form.export.latex.LatexFormElement
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.export.latex.LatexPdfRenderer
|
import com.betriebsratkanzlei.gremiumhub.application_form.export.latex.LatexPdfRenderer
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.export.latex.LatexSection
|
import com.betriebsratkanzlei.gremiumhub.application_form.export.latex.LatexSection
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.export.latex.LatexSubSection
|
import com.betriebsratkanzlei.gremiumhub.application_form.export.latex.LatexSubSection
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.export.latex.RichTextToLatexConverter
|
import com.betriebsratkanzlei.gremiumhub.application_form.export.latex.RichTextToLatexConverter
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormSnapshotDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormSnapshotDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.FormElementSectionSnapshotDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.FormElementSectionSnapshotDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.FormElementSnapshotDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.FormElementSnapshotDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.FormElementSubSectionSnapshotDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.FormElementSubSectionSnapshotDto
|
||||||
import com.fasterxml.jackson.core.type.TypeReference
|
import com.fasterxml.jackson.core.type.TypeReference
|
||||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
@@ -20,10 +20,10 @@ import java.time.Instant
|
|||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
import java.time.ZoneId
|
import java.time.ZoneId
|
||||||
import java.time.format.DateTimeFormatter
|
import java.time.format.DateTimeFormatter
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.VisibilityConditionGroup as VisibilityConditionGroupDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.VisibilityConditionGroup as VisibilityConditionGroupDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.VisibilityConditionNode as VisibilityConditionNodeDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.VisibilityConditionNode as VisibilityConditionNodeDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.VisibilityConditionOperator as VisibilityConditionOperatorDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.VisibilityConditionOperator as VisibilityConditionOperatorDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.VisibilityConditionType as VisibilityConditionTypeDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.VisibilityConditionType as VisibilityConditionTypeDto
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
class ApplicationFormFormatService(
|
class ApplicationFormFormatService(
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form
|
package com.betriebsratkanzlei.gremiumhub.application_form
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.form_element.FormElementSectionMapper
|
import com.betriebsratkanzlei.gremiumhub.form_element.FormElementSectionMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.User
|
import com.betriebsratkanzlei.gremiumhub.user.User
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.UserMapper
|
import com.betriebsratkanzlei.gremiumhub.user.UserMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.UserService
|
import com.betriebsratkanzlei.gremiumhub.user.UserService
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormDto
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
@@ -60,7 +60,7 @@ class ApplicationFormMapper(
|
|||||||
organizationId = applicationFormDto.organizationId ?: "",
|
organizationId = applicationFormDto.organizationId ?: "",
|
||||||
status =
|
status =
|
||||||
applicationFormDto.status
|
applicationFormDto.status
|
||||||
?: com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormStatus.DRAFT,
|
?: com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormStatus.DRAFT,
|
||||||
createdBy = user,
|
createdBy = user,
|
||||||
lastModifiedBy = user,
|
lastModifiedBy = user,
|
||||||
)
|
)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form
|
package com.betriebsratkanzlei.gremiumhub.application_form
|
||||||
|
|
||||||
import org.springframework.data.domain.Page
|
import org.springframework.data.domain.Page
|
||||||
import org.springframework.data.domain.Pageable
|
import org.springframework.data.domain.Pageable
|
||||||
@@ -1,24 +1,24 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form
|
package com.betriebsratkanzlei.gremiumhub.application_form
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form_version.ApplicationFormVersionService
|
import com.betriebsratkanzlei.gremiumhub.application_form_version.ApplicationFormVersionService
|
||||||
import com.betriebsratkanzlei.legalconsenthub.comment.CommentRepository
|
import com.betriebsratkanzlei.gremiumhub.comment.CommentRepository
|
||||||
import com.betriebsratkanzlei.legalconsenthub.email.ApplicationFormCreatedEvent
|
import com.betriebsratkanzlei.gremiumhub.email.ApplicationFormCreatedEvent
|
||||||
import com.betriebsratkanzlei.legalconsenthub.email.ApplicationFormSubmittedEvent
|
import com.betriebsratkanzlei.gremiumhub.email.ApplicationFormSubmittedEvent
|
||||||
import com.betriebsratkanzlei.legalconsenthub.email.ApplicationFormUpdatedEvent
|
import com.betriebsratkanzlei.gremiumhub.email.ApplicationFormUpdatedEvent
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormInvalidStateException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormInvalidStateException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormNotCreatedException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormNotCreatedException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormNotDeletedException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormNotDeletedException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormNotFoundException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormNotFoundException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormNotUpdatedException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormNotUpdatedException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.file.FileService
|
import com.betriebsratkanzlei.gremiumhub.file.FileService
|
||||||
import com.betriebsratkanzlei.legalconsenthub.form_element.FormElementMapper
|
import com.betriebsratkanzlei.gremiumhub.form_element.FormElementMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub.notification.NotificationService
|
import com.betriebsratkanzlei.gremiumhub.notification.NotificationService
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.UserService
|
import com.betriebsratkanzlei.gremiumhub.user.UserService
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormStatus
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormStatus
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.CreateNotificationDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.CreateNotificationDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.FormElementDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.FormElementDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.NotificationType
|
import com.betriebsratkanzlei.gremiumhub_api.model.NotificationType
|
||||||
import org.springframework.context.ApplicationEventPublisher
|
import org.springframework.context.ApplicationEventPublisher
|
||||||
import org.springframework.data.domain.Page
|
import org.springframework.data.domain.Page
|
||||||
import org.springframework.data.domain.PageRequest
|
import org.springframework.data.domain.PageRequest
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form
|
package com.betriebsratkanzlei.gremiumhub.application_form
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.PagedApplicationFormDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.PagedApplicationFormDto
|
||||||
import org.springframework.data.domain.Page
|
import org.springframework.data.domain.Page
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form.export.latex
|
package com.betriebsratkanzlei.gremiumhub.application_form.export.latex
|
||||||
|
|
||||||
object LatexEscaper {
|
object LatexEscaper {
|
||||||
fun escape(text: String?): String {
|
fun escape(text: String?): String {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form.export.latex
|
package com.betriebsratkanzlei.gremiumhub.application_form.export.latex
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form.export.latex
|
package com.betriebsratkanzlei.gremiumhub.application_form.export.latex
|
||||||
|
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form.export.latex
|
package com.betriebsratkanzlei.gremiumhub.application_form.export.latex
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode
|
import com.fasterxml.jackson.databind.JsonNode
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form_template
|
package com.betriebsratkanzlei.gremiumhub.application_form_template
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationFormMapper
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationFormMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.PagedApplicationFormMapper
|
import com.betriebsratkanzlei.gremiumhub.application_form.PagedApplicationFormMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.api.ApplicationFormTemplateApi
|
import com.betriebsratkanzlei.gremiumhub_api.api.ApplicationFormTemplateApi
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.PagedApplicationFormDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.PagedApplicationFormDto
|
||||||
import org.springframework.http.ResponseEntity
|
import org.springframework.http.ResponseEntity
|
||||||
import org.springframework.security.access.prepost.PreAuthorize
|
import org.springframework.security.access.prepost.PreAuthorize
|
||||||
import org.springframework.web.bind.annotation.RestController
|
import org.springframework.web.bind.annotation.RestController
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form_template
|
package com.betriebsratkanzlei.gremiumhub.application_form_template
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationForm
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationForm
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationFormMapper
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationFormMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationFormRepository
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationFormRepository
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormNotCreatedException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormNotCreatedException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormNotDeletedException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormNotDeletedException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormNotFoundException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormNotFoundException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormNotUpdatedException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormNotUpdatedException
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormDto
|
||||||
import org.springframework.data.domain.Page
|
import org.springframework.data.domain.Page
|
||||||
import org.springframework.data.domain.PageRequest
|
import org.springframework.data.domain.PageRequest
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form_version
|
package com.betriebsratkanzlei.gremiumhub.application_form_version
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationForm
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationForm
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.User
|
import com.betriebsratkanzlei.gremiumhub.user.User
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormStatus
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormStatus
|
||||||
import jakarta.persistence.Column
|
import jakarta.persistence.Column
|
||||||
import jakarta.persistence.Entity
|
import jakarta.persistence.Entity
|
||||||
import jakarta.persistence.EntityListeners
|
import jakarta.persistence.EntityListeners
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form_version
|
package com.betriebsratkanzlei.gremiumhub.application_form_version
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationFormMapper
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationFormMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form_version.pdf.ApplicationFormVersionPdfService
|
import com.betriebsratkanzlei.gremiumhub.application_form_version.pdf.ApplicationFormVersionPdfService
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.UserService
|
import com.betriebsratkanzlei.gremiumhub.user.UserService
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.api.ApplicationFormVersionApi
|
import com.betriebsratkanzlei.gremiumhub_api.api.ApplicationFormVersionApi
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormVersionDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormVersionDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormVersionListItemDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormVersionListItemDto
|
||||||
import org.springframework.core.io.ByteArrayResource
|
import org.springframework.core.io.ByteArrayResource
|
||||||
import org.springframework.core.io.Resource
|
import org.springframework.core.io.Resource
|
||||||
import org.springframework.http.HttpHeaders
|
import org.springframework.http.HttpHeaders
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form_version
|
package com.betriebsratkanzlei.gremiumhub.application_form_version
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.UserMapper
|
import com.betriebsratkanzlei.gremiumhub.user.UserMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormSnapshotDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormSnapshotDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormVersionDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormVersionDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormVersionListItemDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormVersionListItemDto
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form_version
|
package com.betriebsratkanzlei.gremiumhub.application_form_version
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository
|
import org.springframework.data.jpa.repository.JpaRepository
|
||||||
import org.springframework.stereotype.Repository
|
import org.springframework.stereotype.Repository
|
||||||
@@ -1,21 +1,21 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form_version
|
package com.betriebsratkanzlei.gremiumhub.application_form_version
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationForm
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationForm
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationFormRepository
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationFormRepository
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormNotFoundException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormNotFoundException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormVersionNotFoundException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormVersionNotFoundException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.form_element.FormElement
|
import com.betriebsratkanzlei.gremiumhub.form_element.FormElement
|
||||||
import com.betriebsratkanzlei.legalconsenthub.form_element.FormElementSection
|
import com.betriebsratkanzlei.gremiumhub.form_element.FormElementSection
|
||||||
import com.betriebsratkanzlei.legalconsenthub.form_element.FormElementSubSection
|
import com.betriebsratkanzlei.gremiumhub.form_element.FormElementSubSection
|
||||||
import com.betriebsratkanzlei.legalconsenthub.form_element.FormElementVisibilityConditionMapper
|
import com.betriebsratkanzlei.gremiumhub.form_element.FormElementVisibilityConditionMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub.form_element.FormOptionMapper
|
import com.betriebsratkanzlei.gremiumhub.form_element.FormOptionMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub.form_element.SectionSpawnTriggerMapper
|
import com.betriebsratkanzlei.gremiumhub.form_element.SectionSpawnTriggerMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub.form_element.TableRowPresetMapper
|
import com.betriebsratkanzlei.gremiumhub.form_element.TableRowPresetMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.User
|
import com.betriebsratkanzlei.gremiumhub.user.User
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormSnapshotDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormSnapshotDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.FormElementSectionSnapshotDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.FormElementSectionSnapshotDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.FormElementSnapshotDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.FormElementSnapshotDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.FormElementSubSectionSnapshotDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.FormElementSubSectionSnapshotDto
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
import org.springframework.transaction.annotation.Transactional
|
import org.springframework.transaction.annotation.Transactional
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form_version.pdf
|
package com.betriebsratkanzlei.gremiumhub.application_form_version.pdf
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationFormFormatService
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationFormFormatService
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form_version.ApplicationFormVersionService
|
import com.betriebsratkanzlei.gremiumhub.application_form_version.ApplicationFormVersionService
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormSnapshotDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormSnapshotDto
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form_version.pdf
|
package com.betriebsratkanzlei.gremiumhub.application_form_version.pdf
|
||||||
|
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form_version.pdf
|
package com.betriebsratkanzlei.gremiumhub.application_form_version.pdf
|
||||||
|
|
||||||
interface PdfStorage {
|
interface PdfStorage {
|
||||||
fun get(key: PdfStorageKey): ByteArray?
|
fun get(key: PdfStorageKey): ByteArray?
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form_version.pdf
|
package com.betriebsratkanzlei.gremiumhub.application_form_version.pdf
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.application_form_version.pdf
|
package com.betriebsratkanzlei.gremiumhub.application_form_version.pdf
|
||||||
|
|
||||||
import org.springframework.boot.context.properties.ConfigurationProperties
|
import org.springframework.boot.context.properties.ConfigurationProperties
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties
|
import org.springframework.boot.context.properties.EnableConfigurationProperties
|
||||||
@@ -9,7 +9,7 @@ import org.springframework.context.annotation.Configuration
|
|||||||
@EnableConfigurationProperties(PdfStorageProperties::class)
|
@EnableConfigurationProperties(PdfStorageProperties::class)
|
||||||
class PdfStorageConfiguration
|
class PdfStorageConfiguration
|
||||||
|
|
||||||
@ConfigurationProperties(prefix = "legalconsenthub.pdf.storage")
|
@ConfigurationProperties(prefix = "gremiumhub.pdf.storage")
|
||||||
data class PdfStorageProperties(
|
data class PdfStorageProperties(
|
||||||
@NestedConfigurationProperty
|
@NestedConfigurationProperty
|
||||||
val filesystem: FileSystemProperties = FileSystemProperties(),
|
val filesystem: FileSystemProperties = FileSystemProperties(),
|
||||||
@@ -19,14 +19,14 @@ data class PdfStorageProperties(
|
|||||||
* Base directory for stored PDFs. In development this defaults to a folder next to the backend code.
|
* Base directory for stored PDFs. In development this defaults to a folder next to the backend code.
|
||||||
*
|
*
|
||||||
* Configure either via application.yaml:
|
* Configure either via application.yaml:
|
||||||
* legalconsenthub:
|
* gremiumhub:
|
||||||
* pdf:
|
* pdf:
|
||||||
* storage:
|
* storage:
|
||||||
* filesystem:
|
* filesystem:
|
||||||
* base-dir: /var/lib/legalconsenthub/pdfs
|
* base-dir: /var/lib/gremiumhub/pdfs
|
||||||
*
|
*
|
||||||
* or via environment variable:
|
* or via environment variable:
|
||||||
* LEGALCONSENTHUB_PDF_STORAGE_FILESYSTEM_BASE_DIR=/var/lib/legalconsenthub/pdfs
|
* GREMIUMHUB_PDF_STORAGE_FILESYSTEM_BASE_DIR=/var/lib/gremiumhub/pdfs
|
||||||
*/
|
*/
|
||||||
val baseDir: String = ".pdf-store",
|
val baseDir: String = ".pdf-store",
|
||||||
)
|
)
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.comment
|
package com.betriebsratkanzlei.gremiumhub.comment
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationForm
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationForm
|
||||||
import com.betriebsratkanzlei.legalconsenthub.form_element.FormElement
|
import com.betriebsratkanzlei.gremiumhub.form_element.FormElement
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.User
|
import com.betriebsratkanzlei.gremiumhub.user.User
|
||||||
import jakarta.persistence.Column
|
import jakarta.persistence.Column
|
||||||
import jakarta.persistence.Entity
|
import jakarta.persistence.Entity
|
||||||
import jakarta.persistence.EntityListeners
|
import jakarta.persistence.EntityListeners
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.comment
|
package com.betriebsratkanzlei.gremiumhub.comment
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.api.CommentApi
|
import com.betriebsratkanzlei.gremiumhub_api.api.CommentApi
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormCommentCountsDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormCommentCountsDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.CommentDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.CommentDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.CreateCommentDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.CreateCommentDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.CursorPagedCommentDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.CursorPagedCommentDto
|
||||||
import org.springframework.http.ResponseEntity
|
import org.springframework.http.ResponseEntity
|
||||||
import org.springframework.security.access.prepost.PreAuthorize
|
import org.springframework.security.access.prepost.PreAuthorize
|
||||||
import org.springframework.web.bind.annotation.RestController
|
import org.springframework.web.bind.annotation.RestController
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.comment
|
package com.betriebsratkanzlei.gremiumhub.comment
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationFormRepository
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationFormRepository
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormNotFoundException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormNotFoundException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.FormElementNotFoundException
|
import com.betriebsratkanzlei.gremiumhub.error.FormElementNotFoundException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.form_element.FormElementRepository
|
import com.betriebsratkanzlei.gremiumhub.form_element.FormElementRepository
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.UserMapper
|
import com.betriebsratkanzlei.gremiumhub.user.UserMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.UserService
|
import com.betriebsratkanzlei.gremiumhub.user.UserService
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.CommentDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.CommentDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.CreateCommentDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.CreateCommentDto
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.comment
|
package com.betriebsratkanzlei.gremiumhub.comment
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationForm
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationForm
|
||||||
import org.springframework.data.domain.Page
|
import org.springframework.data.domain.Page
|
||||||
import org.springframework.data.domain.Pageable
|
import org.springframework.data.domain.Pageable
|
||||||
import org.springframework.data.jpa.repository.JpaRepository
|
import org.springframework.data.jpa.repository.JpaRepository
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.comment
|
package com.betriebsratkanzlei.gremiumhub.comment
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.application_form.ApplicationFormRepository
|
import com.betriebsratkanzlei.gremiumhub.application_form.ApplicationFormRepository
|
||||||
import com.betriebsratkanzlei.legalconsenthub.email.CommentAddedEvent
|
import com.betriebsratkanzlei.gremiumhub.email.CommentAddedEvent
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormNotFoundException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormNotFoundException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.CommentNotCreatedException
|
import com.betriebsratkanzlei.gremiumhub.error.CommentNotCreatedException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.CommentNotDeletedException
|
import com.betriebsratkanzlei.gremiumhub.error.CommentNotDeletedException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.CommentNotFoundException
|
import com.betriebsratkanzlei.gremiumhub.error.CommentNotFoundException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.CommentNotUpdatedException
|
import com.betriebsratkanzlei.gremiumhub.error.CommentNotUpdatedException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.notification.NotificationService
|
import com.betriebsratkanzlei.gremiumhub.notification.NotificationService
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.CommentDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.CommentDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.CreateCommentDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.CreateCommentDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.CreateNotificationDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.CreateNotificationDto
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.NotificationType
|
import com.betriebsratkanzlei.gremiumhub_api.model.NotificationType
|
||||||
import com.fasterxml.jackson.databind.JsonNode
|
import com.fasterxml.jackson.databind.JsonNode
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
import org.springframework.context.ApplicationEventPublisher
|
import org.springframework.context.ApplicationEventPublisher
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.config
|
package com.betriebsratkanzlei.gremiumhub.config
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.Module
|
import com.fasterxml.jackson.databind.Module
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.config
|
package com.betriebsratkanzlei.gremiumhub.config
|
||||||
|
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
import org.springframework.context.annotation.Configuration
|
import org.springframework.context.annotation.Configuration
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.config
|
package com.betriebsratkanzlei.gremiumhub.config
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.security.CustomJwtAuthenticationConverter
|
import com.betriebsratkanzlei.gremiumhub.security.CustomJwtAuthenticationConverter
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
import org.springframework.context.annotation.Configuration
|
import org.springframework.context.annotation.Configuration
|
||||||
import org.springframework.core.annotation.Order
|
import org.springframework.core.annotation.Order
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.config
|
package com.betriebsratkanzlei.gremiumhub.config
|
||||||
|
|
||||||
import org.springframework.boot.testcontainers.service.connection.ServiceConnection
|
import org.springframework.boot.testcontainers.service.connection.ServiceConnection
|
||||||
import org.springframework.context.annotation.Bean
|
import org.springframework.context.annotation.Bean
|
||||||
@@ -14,11 +14,11 @@ class TestContainersConfig {
|
|||||||
@ServiceConnection
|
@ServiceConnection
|
||||||
fun postgresContainer(): PostgreSQLContainer<*> =
|
fun postgresContainer(): PostgreSQLContainer<*> =
|
||||||
PostgreSQLContainer(DockerImageName.parse("postgres:17-alpine"))
|
PostgreSQLContainer(DockerImageName.parse("postgres:17-alpine"))
|
||||||
.withDatabaseName("legalconsenthub")
|
.withDatabaseName("gremiumhub")
|
||||||
.withUsername("legalconsenthub")
|
.withUsername("gremiumhub")
|
||||||
.withPassword("legalconsenthub")
|
.withPassword("gremiumhub")
|
||||||
.withCreateContainerCmdModifier { cmd ->
|
.withCreateContainerCmdModifier { cmd ->
|
||||||
cmd.withName("legalconsenthub-test-${System.currentTimeMillis()}")
|
cmd.withName("gremiumhub-test-${System.currentTimeMillis()}")
|
||||||
// Comment this in to be able to connect to the database, needs to be commented our during tests
|
// Comment this in to be able to connect to the database, needs to be commented our during tests
|
||||||
// cmd.withHostConfig(
|
// cmd.withHostConfig(
|
||||||
// HostConfig().apply {
|
// HostConfig().apply {
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.config
|
package com.betriebsratkanzlei.gremiumhub.config
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.VisibilityConditionNode
|
import com.betriebsratkanzlei.gremiumhub_api.model.VisibilityConditionNode
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.VisibilityConditionOperator
|
import com.betriebsratkanzlei.gremiumhub_api.model.VisibilityConditionOperator
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.VisibilityConditionType
|
import com.betriebsratkanzlei.gremiumhub_api.model.VisibilityConditionType
|
||||||
import com.fasterxml.jackson.core.JsonGenerator
|
import com.fasterxml.jackson.core.JsonGenerator
|
||||||
import com.fasterxml.jackson.core.JsonParser
|
import com.fasterxml.jackson.core.JsonParser
|
||||||
import com.fasterxml.jackson.databind.DeserializationContext
|
import com.fasterxml.jackson.databind.DeserializationContext
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.contact
|
package com.betriebsratkanzlei.gremiumhub.contact
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.api.ContactApi
|
import com.betriebsratkanzlei.gremiumhub_api.api.ContactApi
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ContactMessageDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.ContactMessageDto
|
||||||
import org.springframework.http.ResponseEntity
|
import org.springframework.http.ResponseEntity
|
||||||
import org.springframework.security.access.prepost.PreAuthorize
|
import org.springframework.security.access.prepost.PreAuthorize
|
||||||
import org.springframework.web.bind.annotation.RestController
|
import org.springframework.web.bind.annotation.RestController
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.contact
|
package com.betriebsratkanzlei.gremiumhub.contact
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.email.EmailService
|
import com.betriebsratkanzlei.gremiumhub.email.EmailService
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.UserService
|
import com.betriebsratkanzlei.gremiumhub.user.UserService
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import org.springframework.stereotype.Service
|
import org.springframework.stereotype.Service
|
||||||
import org.thymeleaf.TemplateEngine
|
import org.thymeleaf.TemplateEngine
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.email
|
package com.betriebsratkanzlei.gremiumhub.email
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.email
|
package com.betriebsratkanzlei.gremiumhub.email
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.email
|
package com.betriebsratkanzlei.gremiumhub.email
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.email
|
package com.betriebsratkanzlei.gremiumhub.email
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.email
|
package com.betriebsratkanzlei.gremiumhub.email
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.UserRepository
|
import com.betriebsratkanzlei.gremiumhub.user.UserRepository
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import org.springframework.context.event.EventListener
|
import org.springframework.context.event.EventListener
|
||||||
import org.springframework.scheduling.annotation.Async
|
import org.springframework.scheduling.annotation.Async
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.email
|
package com.betriebsratkanzlei.gremiumhub.email
|
||||||
|
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import org.springframework.mail.MailException
|
import org.springframework.mail.MailException
|
||||||
@@ -28,7 +28,7 @@ class EmailService(
|
|||||||
helper.setTo(to)
|
helper.setTo(to)
|
||||||
helper.setSubject(subject)
|
helper.setSubject(subject)
|
||||||
helper.setText(body, true)
|
helper.setText(body, true)
|
||||||
helper.setFrom("noreply@legalconsenthub.com")
|
helper.setFrom("noreply@gremiumhub.de")
|
||||||
|
|
||||||
mailSender.send(message)
|
mailSender.send(message)
|
||||||
logger.info("Email sent successfully to: $to")
|
logger.info("Email sent successfully to: $to")
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ApplicationFormStatus
|
import com.betriebsratkanzlei.gremiumhub_api.model.ApplicationFormStatus
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
class ApplicationFormInvalidStateException(
|
class ApplicationFormInvalidStateException(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
class ApplicationFormNotCreatedException(
|
class ApplicationFormNotCreatedException(
|
||||||
e: Exception,
|
e: Exception,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
class ApplicationFormNotDeletedException(
|
class ApplicationFormNotDeletedException(
|
||||||
e: Exception,
|
e: Exception,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
class CommentNotCreatedException(
|
class CommentNotCreatedException(
|
||||||
e: Exception,
|
e: Exception,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
class CommentNotDeletedException(
|
class CommentNotDeletedException(
|
||||||
e: Exception,
|
e: Exception,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.ProblemDetails
|
import com.betriebsratkanzlei.gremiumhub_api.model.ProblemDetails
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import org.springframework.http.HttpStatus
|
import org.springframework.http.HttpStatus
|
||||||
import org.springframework.http.MediaType
|
import org.springframework.http.MediaType
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
class FileStorageException(
|
class FileStorageException(
|
||||||
message: String,
|
message: String,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
class FileTooLargeException(
|
class FileTooLargeException(
|
||||||
message: String,
|
message: String,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
class UnsupportedFileTypeException(
|
class UnsupportedFileTypeException(
|
||||||
message: String,
|
message: String,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
class UserAlreadyExistsException(
|
class UserAlreadyExistsException(
|
||||||
id: String,
|
id: String,
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.error
|
package com.betriebsratkanzlei.gremiumhub.error
|
||||||
|
|
||||||
class UserNotFoundException(
|
class UserNotFoundException(
|
||||||
id: String,
|
id: String,
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.file
|
package com.betriebsratkanzlei.gremiumhub.file
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.ApplicationFormNotFoundException
|
import com.betriebsratkanzlei.gremiumhub.error.ApplicationFormNotFoundException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.FileNotFoundException
|
import com.betriebsratkanzlei.gremiumhub.error.FileNotFoundException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.FileTooLargeException
|
import com.betriebsratkanzlei.gremiumhub.error.FileTooLargeException
|
||||||
import com.betriebsratkanzlei.legalconsenthub.error.UnsupportedFileTypeException
|
import com.betriebsratkanzlei.gremiumhub.error.UnsupportedFileTypeException
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.api.FileApi
|
import com.betriebsratkanzlei.gremiumhub_api.api.FileApi
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.AssociateFilesWithApplicationFormRequest
|
import com.betriebsratkanzlei.gremiumhub_api.model.AssociateFilesWithApplicationFormRequest
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.UploadedFileDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.UploadedFileDto
|
||||||
import org.springframework.core.io.ByteArrayResource
|
import org.springframework.core.io.ByteArrayResource
|
||||||
import org.springframework.core.io.Resource
|
import org.springframework.core.io.Resource
|
||||||
import org.springframework.http.HttpHeaders
|
import org.springframework.http.HttpHeaders
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.file
|
package com.betriebsratkanzlei.gremiumhub.file
|
||||||
|
|
||||||
import com.betriebsratkanzlei.legalconsenthub.user.UserMapper
|
import com.betriebsratkanzlei.gremiumhub.user.UserMapper
|
||||||
import com.betriebsratkanzlei.legalconsenthub_api.model.UploadedFileDto
|
import com.betriebsratkanzlei.gremiumhub_api.model.UploadedFileDto
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.betriebsratkanzlei.legalconsenthub.file
|
package com.betriebsratkanzlei.gremiumhub.file
|
||||||
|
|
||||||
import org.springframework.data.jpa.repository.JpaRepository
|
import org.springframework.data.jpa.repository.JpaRepository
|
||||||
import org.springframework.data.jpa.repository.Query
|
import org.springframework.data.jpa.repository.Query
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user