From 3cccab1f4dc53322719d9fcb3a1bc189826ce139 Mon Sep 17 00:00:00 2001 From: Sebastian Frick Date: Wed, 18 Feb 2026 21:38:35 +0100 Subject: [PATCH] fix(frontend): pnpm dev und pnpm build ohne manuelle Vorbereitung MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pnpm dev: - Internal-Packages-Pattern: packages/ zeigen auf ./src/index.ts - tsx lädt TypeScript direkt, kein Build-Schritt vor pnpm dev nötig - publishConfig sichert dist/ für pnpm build und Releases pnpm build: - @effigenix/types build ruft nicht mehr generate:types auf (openapi.json ist eingecheckt, kein laufendes Backend nötig) - Veraltete Typreferenzen entfernt/korrigiert: SessionToken (nicht im Schema), RoleName/Permission (aus RoleDTO abgeleitet), ErrorResponse (als eigene Interface definiert) docs: READMEs aktualisiert – Schnellstart prominent, Stub-Modus dokumentiert, Korrekturen (Flyway→Liquibase, com.→de.effigenix) --- README.md | 277 ++++++++++----------------------------------- backend/README.md | 211 +++++++++++----------------------- frontend/README.md | 179 ++++++++++------------------- 3 files changed, 187 insertions(+), 480 deletions(-) diff --git a/README.md b/README.md index a047228..b04198c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,37 @@ ERP-System für Fleischereien mit HACCP-Compliance, GoBD-konform, Mehrfilialen-Support. +## Schnellstart + +### Backend + +```bash +# 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 + +# Backend bauen & starten +cd backend +mvn spring-boot:run +``` + +> **Kein Docker?** Das Backend startet auch ohne Datenbank im Stub-Modus (Warnlog erscheint). +> Die OpenAPI-Spec ist dann unter http://localhost:8080/api-docs abrufbar. + +### Frontend (Terminal UI) + +```bash +cd frontend +pnpm install +pnpm dev # startet direkt, kein Build-Schritt nötig +``` + +--- + ## Repository Structure ``` @@ -9,11 +40,11 @@ effigenix/ ├── backend/ # Java Spring Boot Backend │ ├── src/ # Java source code (DDD + Clean Architecture) │ ├── docs/ # Backend documentation -│ └── pom.xml # Maven configuration +│ └── pom.xml │ -└── frontend/ # TypeScript Frontend (TUI & WebUI) - ├── apps/ # Applications (CLI TUI, WebUI) - └── packages/ # Shared packages (api-client, types, validation) +└── frontend/ # TypeScript Frontend (pnpm Monorepo) + ├── apps/cli/ # Terminal UI (Ink/React) + └── packages/ # Shared: api-client, types, validation, config ``` ## Architektur @@ -45,224 +76,40 @@ effigenix/ ## 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 +### Core Domains +- **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 +### Supporting Domains +- **Labeling** – Etikettendruck mit HACCP-Daten +- **Filiales** – Mehrfilialen-Verwaltung -### Generic Subdomains (3) -- **User Management** - Authentifizierung, Autorisierung, Rollen -- **Reporting** - Standard-Reports -- **Notifications** - E-Mail/SMS-Benachrichtigungen +### Generic Subdomains +- **User Management** – Authentifizierung, Autorisierung, Rollen *(implementiert)* +- **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) +| Schicht | Technologie | +|---------|-------------| +| Backend | Java 21, Spring Boot 3.2, Spring Security 6 | +| Datenbank | PostgreSQL 15+, Liquibase | +| Auth | JWT (JJWT), Stateless | +| Build | Maven | +| Frontend | TypeScript, React, Ink (TUI) | +| Packages | pnpm Workspaces, tsup, Zod, Axios | -## Getting Started +## Weiterführend -### Backend (Java Spring Boot) - -**Prerequisites:** -- Java 21+ -- Maven 3.9+ -- PostgreSQL 15+ -- Docker (optional, für PostgreSQL) - -**Database Setup:** - -```bash -# 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:** - -```bash -cd backend - -# 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 - -### Frontend (TypeScript TUI) - -**Prerequisites:** -- Node.js 20+ -- pnpm 9+ - -**Setup & Run:** - -```bash -cd frontend - -# Install dependencies -pnpm install - -# Run TUI in dev mode -pnpm run dev - -# Build for production -pnpm run build -``` - -Detailed frontend documentation: [frontend/README.md](frontend/README.md) - -## Project Structure - -**Backend (Java):** - -``` -backend/src/main/java/de/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 - -backend/src/main/resources/ -└── db/migration/ # Liquibase Migrations -``` - -**Frontend (TypeScript):** - -``` -frontend/ -├── apps/ -│ └── cli/ # Terminal UI (Ink) -│ ├── src/ -│ │ ├── components/ # UI components -│ │ ├── hooks/ # React hooks -│ │ └── state/ # State management -│ └── package.json -│ -└── packages/ # Shared packages (reusable for WebUI) - ├── api-client/ # HTTP client für Backend API - ├── types/ # TypeScript types (generated from OpenAPI) - ├── validation/ # Zod schemas - └── config/ # Shared configuration -``` - -## 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) - -```java -// 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 currentBranch(); -} - -// Beispiel: Production BC -public class CreateRecipe { - private final AuthorizationPort authPort; - - public Result execute(CreateRecipeCommand cmd) { - authPort.assertCan(ProductionAction.RECIPE_WRITE); - // Business logic... - } -} -``` - -## Testing - -**Backend:** - -```bash -cd backend - -# Unit Tests -mvn test - -# Integration Tests -mvn verify - -# Test Coverage -mvn clean verify jacoco:report -``` - -**Frontend:** - -```bash -cd frontend - -# Unit Tests -pnpm test - -# Test Coverage -pnpm run test:coverage - -# Type Check -pnpm run typecheck -``` +- [Backend README](backend/README.md) +- [Frontend README](frontend/README.md) +- [Quick Start (Detail)](backend/docs/QUICK_START.md) +- [User Management](backend/docs/USER_MANAGEMENT.md) ## License -Proprietary - Effigenix GmbH - -## Contact - -- Project Lead: sebi@effigenix.com -- Architecture: DDD + Clean Architecture -- Documentation: /docs/mvp/ +Proprietary – Effigenix GmbH diff --git a/backend/README.md b/backend/README.md index 3cb4519..d01adb9 100644 --- a/backend/README.md +++ b/backend/README.md @@ -1,188 +1,103 @@ -# Effigenix Fleischerei ERP +# Effigenix Backend -ERP-System für Fleischereien mit HACCP-Compliance, GoBD-konform, Mehrfilialen-Support. +Java Spring Boot Backend für das Effigenix ERP-System. -## 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 +## Schnellstart ```bash -# PostgreSQL mit Docker +# 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 ``` -### Build & Run +**Ohne Datenbank** (Stub-Modus – nur API-Docs): +```bash +mvn spring-boot:run +# Warnung im Log: "⚠️ Keine Datenbankverbindung – Stub-Modus aktiv" +# OpenAPI-Spec: http://localhost:8080/api-docs +``` + +**API-Dokumentation** (mit laufender DB): +- Swagger UI: http://localhost:8080/swagger-ui.html +- OpenAPI JSON: http://localhost:8080/api-docs + +## Build ```bash -# Build +# Kompilieren + Tests mvn clean install -# Run +# Nur starten (ohne Tests) mvn spring-boot:run -# Run with specific profile +# Mit Profil mvn spring-boot:run -Dspring-boot.run.profiles=dev ``` -### API Documentation +## Architektur -Nach dem Start verfügbar unter: -- Swagger UI: http://localhost:8080/swagger-ui.html -- OpenAPI Spec: http://localhost:8080/api-docs - -## Project Structure +DDD + Clean Architecture. Einweg-Abhängigkeit: `domain → application → infrastructure`. ``` -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/ +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/ -│ ├── web/ -│ └── audit/ -└── shared/ # Shared Kernel - ├── security/ # AuthorizationPort, Action - └── common/ # Result, ApplicationError - -src/main/resources/ -└── db/migration/ # Flyway Migrations +│ ├── audit/ +│ ├── stub/ # Stub-Beans für no-db-Profil +│ ├── usermanagement/ +│ └── masterdata/ +└── shared/ # Shared Kernel (Result, AuthorizationPort, Action) ``` -## User Management (Generic Subdomain) +**Liquibase-Migrationen:** `src/main/resources/db/changelog/` + +## User Management ### 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 | +| 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 (für andere BCs) +### AuthorizationPort ```java -// 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 currentBranch(); -} - -// Beispiel: Production BC -public class CreateRecipe { - private final AuthorizationPort authPort; - - public Result execute(CreateRecipeCommand cmd) { - authPort.assertCan(ProductionAction.RECIPE_WRITE); - // Business logic... - } -} +// Typsichere, fachliche Authorization – kein direkter Zugriff auf User/Roles +authPort.assertCan(ProductionAction.RECIPE_WRITE); +authPort.assertCan(SalesAction.ORDER_READ, orderId); ``` -## Testing +## Tests ```bash -# Unit Tests -mvn test - -# Integration Tests -mvn verify - -# Test Coverage -mvn clean verify jacoco:report +mvn test # Unit Tests +mvn verify # + Integration Tests +mvn clean verify jacoco:report # Test Coverage ``` -## License +## Dokumentation -Proprietary - Effigenix GmbH - -## Contact - -- Project Lead: sebi@effigenix.com -- Architecture: DDD + Clean Architecture -- Documentation: /docs/mvp/ +- [Quick Start](docs/QUICK_START.md) – Docker, Seed-Daten, lokale Entwicklung +- [User Management](docs/USER_MANAGEMENT.md) – Referenz-BC, JWT, Audit diff --git a/frontend/README.md b/frontend/README.md index 829a2ea..c27b911 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,143 +1,88 @@ # Effigenix Frontend -TypeScript monorepo containing Terminal User Interface (TUI) and shared packages for the Effigenix ERP system. +TypeScript-Monorepo mit Terminal UI (TUI) und geteilten Packages für das Effigenix ERP. -## Structure +## Schnellstart + +```bash +pnpm install +pnpm dev # startet direkt, kein separater Build-Schritt nötig +``` + +Das Backend muss unter http://localhost:8080 erreichbar sein. + +## Build + +```bash +pnpm build # baut alle Packages nach dist/ +``` + +## Weitere Scripts + +```bash +pnpm test # Tests aller Packages +pnpm run typecheck # TypeScript-Check aller Packages +pnpm run lint # ESLint +pnpm run format # Prettier +``` + +--- + +## Struktur ``` frontend/ ├── apps/ -│ └── cli/ # Terminal UI (Ink) +│ └── cli/ # Terminal UI (Ink/React) │ -└── packages/ # Shared packages (reusable for WebUI) - ├── api-client/ # HTTP client for Backend API - ├── types/ # TypeScript types (generated from OpenAPI) - ├── validation/ # Zod schemas - └── config/ # Shared configuration +└── packages/ + ├── api-client/ # HTTP-Client für die Backend-API + ├── types/ # TypeScript-Typen (aus openapi.json generiert) + ├── validation/ # Zod-Schemas + └── config/ # Shared Configuration ``` -## Prerequisites +## Packages: Internal-Packages-Pattern -- Node.js 20+ -- pnpm 9+ -- Backend running at http://localhost:8080 +Die `packages/`-Libraries zeigen in `main`/`exports` auf ihre TypeScript-Quellen (`./src/index.ts`). +`tsx` lädt sie daher direkt – kein Build-Schritt vor `pnpm dev` nötig. -## Getting Started +`pnpm build` erzeugt wie gewohnt `dist/` via tsup; für ein `npm publish` greift `publishConfig`. -### Install Dependencies +## OpenAPI-Typen aktualisieren + +Die `openapi.json` ist eingecheckt und wird beim Build direkt verwendet. +Wenn sich die Backend-API ändert: ```bash -pnpm install +# Backend lokal starten, dann: +cd packages/types +pnpm run generate:spec # holt openapi.json vom laufenden Backend +pnpm run generate:types # generiert src/generated/api.ts daraus +# Ergebnis committen ``` -### Development +## Monorepo-Befehle ```bash -# Run TUI in dev mode -pnpm run dev +# Dependency in einem Package installieren +pnpm add axios --filter @effigenix/api-client -# Run tests -pnpm test - -# Type check -pnpm run typecheck - -# Lint code -pnpm run lint - -# Format code -pnpm run format -``` - -### Build - -```bash -# Build all packages -pnpm run build -``` - -## Package Development - -### Adding a New Package - -```bash -cd packages -mkdir my-package -cd my-package -pnpm init -``` - -Then update `package.json`: -- Set name to `@effigenix/my-package` -- Add `"main": "./dist/index.js"` -- Add `"types": "./dist/index.d.ts"` -- Add build script: `"build": "tsup src/index.ts"` - -### Using Packages - -```json -{ - "dependencies": { - "@effigenix/types": "workspace:*", - "@effigenix/api-client": "workspace:*" - } -} -``` - -## Type Generation - -Types are automatically generated from the backend OpenAPI spec: - -```bash -# Start backend first -cd ../backend -mvn spring-boot:run - -# Generate types -cd ../frontend/packages/types -pnpm run generate:types -``` - -## Technology Stack - -- **TypeScript** - Type-safe JavaScript -- **React** - UI library (Ink for terminal) -- **pnpm** - Fast, efficient package manager -- **Zod** - Runtime validation + type inference -- **Axios** - HTTP client with interceptors -- **tsup** - Zero-config TypeScript bundler -- **vitest** - Fast unit testing - -## Monorepo Commands - -```bash -# Install dependencies in root -pnpm install - -# Run command in specific package +# Script in einem Package ausführen pnpm run --filter @effigenix/cli dev -# Run command in all packages +# Script in allen Packages ausführen pnpm run --recursive build - -# Add dependency to specific package -pnpm add axios --filter @effigenix/api-client ``` -## Scripts +## Tech Stack -- `pnpm run build` - Build all packages -- `pnpm run dev` - Run CLI TUI in dev mode -- `pnpm test` - Run all tests -- `pnpm run typecheck` - Type check all packages -- `pnpm run lint` - Lint all code -- `pnpm run format` - Format all code - -## Documentation - -See individual package READMEs for detailed documentation: -- [API Client](packages/api-client/README.md) -- [Types](packages/types/README.md) -- [Validation](packages/validation/README.md) -- [Config](packages/config/README.md) -- [CLI TUI](apps/cli/README.md) +| Tool | Zweck | +|------|-------| +| TypeScript | Typsichere Entwicklung | +| React + Ink | Terminal UI | +| pnpm Workspaces | Monorepo-Verwaltung | +| tsup | Zero-config TS-Bundler | +| Zod | Runtime-Validierung | +| Axios | HTTP-Client | +| vitest | Unit Tests |