mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 10:09:35 +01:00
Startet das Backend ohne DB (z.B. für OpenAPI-Generierung):
- DatabaseProfileInitializer prüft JDBC-Verbindung vor Context-Start
- Bei Fehler: Profil "no-db" aktiviert, Warnlog erscheint
- application-no-db.yml schließt DataSource/JPA/Liquibase aus
- JpaAuditingConfig ersetzt @EnableJpaAuditing in der Hauptklasse
- Stub-Repositories und NoOpAuditLogger für Profil "no-db"
- Alle Jpa*Repository + DatabaseAuditLogger mit @Profile("!no-db")
|
||
|---|---|---|
| .. | ||
| docs | ||
| src | ||
| .factorypath | ||
| CLAUDE.md | ||
| INTEGRATION_TESTS_SUMMARY.md | ||
| pom.xml | ||
| README.md | ||
| TEST_FILES_INDEX.md | ||
| TEST_SUMMARY.md | ||
| TESTING_GUIDE.md | ||
| TODO.md | ||
| UNIT_TESTS_README.md | ||
Effigenix Fleischerei ERP
ERP-System für Fleischereien mit HACCP-Compliance, GoBD-konform, Mehrfilialen-Support.
Architektur
Domain-Driven Design + Clean Architecture + Java 21 + Spring Boot
┌─────────────────────────────────────────────────────┐
│ Presentation (REST Controllers) │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ Application Layer (Use Cases) │
│ - Transaction Script for Generic Subdomains │
│ - Rich Domain Model for Core Domains │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ Domain Layer (DDD Tactical Patterns) │
│ - Aggregates, Entities, Value Objects │
│ - Domain Events, Repositories │
└─────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ Infrastructure Layer │
│ - Spring, JPA, PostgreSQL, JWT, REST │
└─────────────────────────────────────────────────────┘
Bounded Contexts (11)
Core Domains (7)
- Production Management - Rezeptverwaltung, Chargenproduktion
- Quality Management - HACCP-Compliance, Temperaturüberwachung
- Inventory Management - Bestandsführung, Lagerverwaltung
- Procurement - Einkauf, Wareneingang, Lieferanten
- Sales - Auftragserfassung, Rechnungsstellung, Kunden
Supporting Domains (3)
- Labeling - Etikettendruck mit HACCP-Daten
- Filiales - Mehrfilialen-Verwaltung
Generic Subdomains (3)
- User Management - Authentifizierung, Autorisierung, Rollen
- Reporting - Standard-Reports
- Notifications - E-Mail/SMS-Benachrichtigungen
Tech Stack
- Java 21 (Records, Sealed Interfaces, Pattern Matching)
- Spring Boot 3.2 (Spring Security 6, Spring Data JPA 3)
- PostgreSQL 15+ (Produktiv-DB)
- JWT (Stateless Authentication)
- Flyway (Schema Migrations)
- Maven (Build Tool)
Getting Started
Prerequisites
- Java 21+
- Maven 3.9+
- PostgreSQL 15+
- Docker (optional, für PostgreSQL)
Database Setup
# PostgreSQL mit Docker
docker run --name effigenix-postgres \
-e POSTGRES_DB=effigenix \
-e POSTGRES_USER=effigenix \
-e POSTGRES_PASSWORD=effigenix \
-p 5432:5432 \
-d postgres:15
Build & Run
# Build
mvn clean install
# Run
mvn spring-boot:run
# Run with specific profile
mvn spring-boot:run -Dspring-boot.run.profiles=dev
API Documentation
Nach dem Start verfügbar unter:
- Swagger UI: http://localhost:8080/swagger-ui.html
- OpenAPI Spec: http://localhost:8080/api-docs
Project Structure
src/main/java/com/effigenix/
├── domain/ # Domain Layer (keine Framework-Dependencies!)
│ └── usermanagement/
│ ├── User.java
│ ├── Role.java
│ ├── UserId.java
│ └── UserRepository.java
├── application/ # Application Layer (Use Cases)
│ └── usermanagement/
│ ├── CreateUser.java
│ ├── AuthenticateUser.java
│ └── dto/
├── infrastructure/ # Infrastructure Layer
│ ├── persistence/
│ ├── security/
│ ├── web/
│ └── audit/
└── shared/ # Shared Kernel
├── security/ # AuthorizationPort, Action
└── common/ # Result, ApplicationError
src/main/resources/
└── db/migration/ # Flyway Migrations
User Management (Generic Subdomain)
Vordefinierte Rollen
| Rolle | Permissions | Zielgruppe |
|---|---|---|
| ADMIN | Alle | Systemadministrator |
| PRODUCTION_MANAGER | RECIPE_, BATCH_, PRODUCTION_ORDER_* | Leiter Produktion |
| PRODUCTION_WORKER | RECIPE_READ, BATCH_* | Produktionsmitarbeiter |
| QUALITY_MANAGER | HACCP_, TEMPERATURE_LOG_ | Qualitätsbeauftragter |
| QUALITY_INSPECTOR | TEMPERATURE_LOG_, GOODS_INSPECTION_ | QM-Mitarbeiter |
| PROCUREMENT_MANAGER | PURCHASE_ORDER_, SUPPLIER_ | Einkaufsleiter |
| WAREHOUSE_WORKER | STOCK_, INVENTORY_COUNT_ | Lagermitarbeiter |
| SALES_MANAGER | ORDER_, INVOICE_, CUSTOMER_* | Verkaufsleiter |
| SALES_STAFF | ORDER_READ/WRITE, CUSTOMER_READ | Verkaufsmitarbeiter |
AuthorizationPort (für andere BCs)
// Typsichere, fachliche Authorization - kein direkter Zugriff auf User/Roles!
public interface AuthorizationPort {
boolean can(Action action);
void assertCan(Action action);
boolean can(Action action, ResourceId resource);
void assertCan(Action action, ResourceId resource);
ActorId currentActor();
Optional<BranchId> currentBranch();
}
// Beispiel: Production BC
public class CreateRecipe {
private final AuthorizationPort authPort;
public Result<ApplicationError, RecipeDTO> execute(CreateRecipeCommand cmd) {
authPort.assertCan(ProductionAction.RECIPE_WRITE);
// Business logic...
}
}
Testing
# Unit Tests
mvn test
# Integration Tests
mvn verify
# Test Coverage
mvn clean verify jacoco:report
License
Proprietary - Effigenix GmbH
Contact
- Project Lead: sebi@effigenix.com
- Architecture: DDD + Clean Architecture
- Documentation: /docs/mvp/