1
0
Fork 0
mirror of https://github.com/s-frick/effigenix.git synced 2026-03-28 10:09:35 +01:00
effigenix/backend
Sebastian Frick e4f0665086 fix(backend): lückenloses Error-Handling und Logging im Infrastructure Layer
Stack-Traces in allen JPA-Repositories per logger.trace() bewahren, bevor
sie durch Result.failure() auf die Message reduziert werden. Security-Layer
erhält eigene Handler-Beans (ApiAuthenticationEntryPoint, ApiAccessDeniedHandler)
mit konsistentem ErrorResponse-Format statt Inline-Lambdas. JWT-Filter loggt
Validierungsfehler auf WARN statt DEBUG und fängt IllegalArgumentException.
RoleController nutzt jetzt das Exception-Pattern der anderen Controller statt
eines leeren 500-Bodys. GlobalExceptionHandler differenziert zwischen
fachlichen Domain-Fehlern (WARN) und technischen Repository-Fehlern (ERROR)
und fängt auch checked Exceptions als Catch-All.
2026-02-18 23:23:00 +01:00
..
docs refactor: EntityDraft-Pattern auf Customer, Article und ProductCategory anwenden 2026-02-18 11:56:33 +01:00
src fix(backend): lückenloses Error-Handling und Logging im Infrastructure Layer 2026-02-18 23:23:00 +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 refactor: restructure repository with separate backend and frontend directories 2026-02-17 22:08:51 +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