1
0
Fork 0
mirror of https://github.com/s-frick/effigenix.git synced 2026-03-28 08:29:36 +01:00
effigenix/backend
Sebastian Frick e5bc5690da refactor(production): UnitOfWork-Pattern + JdbcClient-Migration für Production-BC
Production-BC von JPA auf JdbcClient migriert und UnitOfWork-Port
eingeführt, der Transaktionen explizit steuert und bei Result.failure
zurückrollt — löst das Problem, dass @Transactional bei funktionalem
Error-Handling keinen Rollback auslöst.

- UnitOfWork-Interface (shared) + SpringUnitOfWork-Implementierung
- JdbcProductionOrderRepository, JdbcRecipeRepository, JdbcBatchRepository,
  JdbcBatchNumberGenerator ersetzen JPA-Pendants
- 17 JPA-Dateien entfernt (Entities, Mapper, Spring Data Interfaces)
- Alle Production-Use-Cases nutzen UnitOfWork statt @Transactional
- Liquibase-Changelogs H2-kompatibel gemacht (dbms-Attribute)
- Tests auf Liquibase-Schema umgestellt (ddl-auto: none)
2026-02-25 08:53:17 +01:00
..
docs feat(production): Produktion über Auftrag starten (US-P15) 2026-02-25 08:53:17 +01:00
src refactor(production): UnitOfWork-Pattern + JdbcClient-Migration für Production-BC 2026-02-25 08:53:17 +01:00
.factorypath refactor: restructure repository with separate backend and frontend directories 2026-02-17 22:08:51 +01:00
CLAUDE.md refactor: restructure repository with separate backend and frontend directories 2026-02-17 22:08:51 +01:00
INTEGRATION_TESTS_SUMMARY.md refactor: restructure repository with separate backend and frontend directories 2026-02-17 22:08:51 +01:00
pom.xml feat(loadtest): Gatling-Lasttests mit ~2500 Requests für komprimiertes Jahres-Volumen 2026-02-24 21:53:25 +01:00
README.md fix(frontend): pnpm dev und pnpm build ohne manuelle Vorbereitung 2026-02-18 21:39:32 +01:00
TEST_FILES_INDEX.md refactor: restructure repository with separate backend and frontend directories 2026-02-17 22:08:51 +01:00
TEST_SUMMARY.md refactor: restructure repository with separate backend and frontend directories 2026-02-17 22:08:51 +01:00
TESTING_GUIDE.md refactor: restructure repository with separate backend and frontend directories 2026-02-17 22:08:51 +01:00
TODO.md refactor: restructure repository with separate backend and frontend directories 2026-02-17 22:08:51 +01:00
UNIT_TESTS_README.md refactor: restructure repository with separate backend and frontend directories 2026-02-17 22:08:51 +01:00

Effigenix Backend

Java Spring Boot Backend für das Effigenix ERP-System.

Schnellstart

# 1. PostgreSQL starten (Docker)
docker run --name effigenix-postgres \
  -e POSTGRES_DB=effigenix \
  -e POSTGRES_USER=effigenix \
  -e POSTGRES_PASSWORD=effigenix \
  -p 5432:5432 \
  -d postgres:15

# 2. Bauen & starten
mvn spring-boot:run

Ohne Datenbank (Stub-Modus nur API-Docs):

mvn spring-boot:run
# Warnung im Log: "⚠️  Keine Datenbankverbindung  Stub-Modus aktiv"
# OpenAPI-Spec: http://localhost:8080/api-docs

API-Dokumentation (mit laufender DB):

Build

# Kompilieren + Tests
mvn clean install

# Nur starten (ohne Tests)
mvn spring-boot:run

# Mit Profil
mvn spring-boot:run -Dspring-boot.run.profiles=dev

Architektur

DDD + Clean Architecture. Einweg-Abhängigkeit: domain → application → infrastructure.

de.effigenix/
├── domain/              # Reine Geschäftslogik  keine Framework-Deps
│   ├── usermanagement/
│   └── masterdata/
├── application/         # Use Cases, Commands, DTOs
│   ├── usermanagement/
│   └── masterdata/
├── infrastructure/      # Spring, JPA, REST, Security, Audit
│   ├── config/
│   ├── security/
│   ├── audit/
│   ├── stub/            # Stub-Beans für no-db-Profil
│   ├── usermanagement/
│   └── masterdata/
└── shared/              # Shared Kernel (Result<E,T>, AuthorizationPort, Action)

Liquibase-Migrationen: src/main/resources/db/changelog/

User Management

Vordefinierte Rollen

Rolle Zielgruppe
ADMIN Systemadministrator (alle Rechte)
PRODUCTION_MANAGER Leiter Produktion
PRODUCTION_WORKER Produktionsmitarbeiter
QUALITY_MANAGER Qualitätsbeauftragter
QUALITY_INSPECTOR QM-Mitarbeiter
PROCUREMENT_MANAGER Einkaufsleiter
WAREHOUSE_WORKER Lagermitarbeiter
SALES_MANAGER Verkaufsleiter
SALES_STAFF Verkaufsmitarbeiter

AuthorizationPort

// Typsichere, fachliche Authorization  kein direkter Zugriff auf User/Roles
authPort.assertCan(ProductionAction.RECIPE_WRITE);
authPort.assertCan(SalesAction.ORDER_READ, orderId);

Tests

mvn test                          # Unit Tests
mvn verify                        # + Integration Tests
mvn clean verify jacoco:report    # Test Coverage

Dokumentation