124 lines
4.7 KiB
Markdown
124 lines
4.7 KiB
Markdown
# Backend - AI Context
|
|
|
|
## Tech Stack
|
|
|
|
- **Framework**: Spring Boot 3.4.2
|
|
- **Language**: Kotlin 1.9.25, Java 21
|
|
- **Database**: PostgreSQL
|
|
- **Migrations**: Liquibase (manual)
|
|
- **PDF Generation**: LaTeX (lualatex) via Thymeleaf templates
|
|
- **API**: Auto-generated server stubs from OpenAPI spec
|
|
|
|
---
|
|
|
|
## Development
|
|
|
|
```bash
|
|
# Run backend (port 8080)
|
|
./gradlew bootRun
|
|
|
|
# Build
|
|
./gradlew build
|
|
|
|
# Generate server stubs (after OpenAPI spec changes)
|
|
./gradlew generate_legalconsenthub_server
|
|
|
|
# Database migrations
|
|
# Never create Liquibase changesets in src/main/resources/db/changelog/
|
|
```
|
|
|
|
---
|
|
|
|
## Seed Data Maintenance
|
|
|
|
The application automatically seeds initial data on first startup. Seed files are split into smaller section files for easier maintenance.
|
|
|
|
### File Structure
|
|
```
|
|
src/main/resources/seed/
|
|
├── template/ # Form template (isTemplate=true)
|
|
│ ├── _main.yaml # Main file with metadata and !include directives
|
|
│ ├── section_01_*.yaml # Individual section files
|
|
│ └── ...
|
|
├── demo/ # Demo form (isTemplate=false)
|
|
│ ├── _main.yaml
|
|
│ ├── section_01_*.yaml
|
|
│ └── ...
|
|
```
|
|
|
|
### !include Directive
|
|
The `_main.yaml` files use `!include` directives to reference section files:
|
|
```yaml
|
|
formElementSections:
|
|
- !include section_01_angaben_zum_itsystem.yaml
|
|
- !include section_02_modulbeschreibung.yaml
|
|
```
|
|
|
|
`SplitYamlLoader` merges these files before deserialization.
|
|
|
|
### 1. Template Seeding
|
|
**Seeder:** `InitialApplicationFormTemplateSeeder`
|
|
**Directory:** `src/main/resources/seed/template/`
|
|
**Condition:** Seeds if no templates exist (`isTemplate = true`)
|
|
**Purpose:** Comprehensive IT system approval workflow template (16 sections)
|
|
|
|
**IMPORTANT:** Keep section files updated when form structure or validation rules change. After any change, also update the flow diagram at `docs/form-flow-diagram.md`.
|
|
|
|
### 2. Application Form Seeding
|
|
**Seeder:** `InitialApplicationFormSeeder`
|
|
**Directory:** `src/main/resources/seed/demo/`
|
|
**Condition:** Seeds if no forms exist for empty organizationId (`isTemplate = false`)
|
|
**Purpose:** Realistic SAP S/4HANA application form for development and UI testing (11 sections)
|
|
**organizationId:** Empty string (global form visible to all organizations)
|
|
|
|
**IMPORTANT:** Keep demo form synchronized with template changes. When modifying a template section, update the corresponding demo section.
|
|
|
|
**Note:**
|
|
- Forms with empty/null organizationId act as "global" forms and are visible to all organizations
|
|
- The demo form demonstrates visibility conditions, section spawning, clonable elements, and GDPR compliance features
|
|
|
|
---
|
|
|
|
## Key Files
|
|
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| `src/main/resources/templates/application_form_latex_template.tex` | PDF template |
|
|
| `src/main/resources/seed/template/` | Form template sections (16 files) |
|
|
| `src/main/resources/seed/demo/` | Demo form sections (11 files) |
|
|
| `src/main/kotlin/.../seed/SplitYamlLoader.kt` | YAML merger for !include directives |
|
|
| `src/main/resources/db/changelog/` | Liquibase migrations |
|
|
| `src/main/kotlin/com/legalconsenthub/service/ApplicationFormFormatService.kt` | HTML/PDF export logic |
|
|
| `docs/form-flow-diagram.md` | Visual form flow diagram (update after template changes) |
|
|
|
|
---
|
|
|
|
## Rules for AI
|
|
|
|
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)
|
|
3. **PDF Export Validation** - After changes to form elements, visibility, or spawning:
|
|
- Test both HTML and PDF export for real form instances
|
|
- Verify all element types render correctly
|
|
- Ensure template sections excluded, spawned sections included
|
|
- Hotspots: `ApplicationFormFormatService.kt`, `application_form_latex_template.tex`
|
|
4. **Stateless** - Any implementation must support statelessness for horizontal scaling (multiple instances behind load balancer)
|
|
|
|
### Architecture Guidelines
|
|
- **Service layer** - Business logic lives here
|
|
- **Repository layer** - JPA repositories for data access
|
|
- **Controller layer** - Thin controllers that delegate to services
|
|
- **Mapper layer** - Separate mapper classes for DTO/Entity conversions
|
|
- **Entity layer** - JPA entities with relationships
|
|
|
|
### Code Quality Rules
|
|
- **Never use @Suppress annotations** - Fix the underlying issue instead of suppressing warnings
|
|
- **Controller methods must override generated interfaces** - All public endpoints must be in OpenAPI spec
|
|
|
|
### PDF Generation
|
|
- LaTeX templates in `src/main/resources/templates/`
|
|
- Thymeleaf for dynamic content
|
|
- Use `lualatex` for compilation
|
|
- Escape special LaTeX characters in user input
|
|
- Test PDF generation after form structure changes
|