mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 10:29:35 +01:00
Einheitliches Paginierungs-Pattern mit page, size und Multi-Field sort
für alle 14 List-Endpoints. Response-Format ändert sich von [...] zu
{ content: [...], page: { number, size, totalElements, totalPages } }.
Backend:
- Shared Kernel: Page<T>, PageRequest, SortField, SortDirection
- PaginationHelper (SQL ORDER BY mit Whitelist), PageResponse DTO
- Paginated Methoden in allen 14 Domain-Repos + JDBC-Implementierungen
- Safety-Limit (500) für findAllBelowMinimumLevel/ExpiryRelevantBatches
- Alle List-Use-Cases akzeptieren PageRequest, liefern Page<T>
- Alle Controller mit page/size/sort Query-Params + PageResponse
Frontend:
- PagedResponse<T> Type auf nested page-Format aktualisiert
- Alle 14 API-Client-Resourcen liefern PagedResponse mit PaginationParams
- Alle Hooks mit Pagination-State (currentPage, totalPages, pageSize)
- Alle List-Screens mit Seiten-Navigation (Pfeiltasten) und Footer
Loadtest:
- Podman-Support im justfile (DOCKER_HOST auto-detect)
- Verschärfte Performance-Schwellwerte basierend auf Ist-Werten
|
||
|---|---|---|
| .. | ||
| src | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
| vitest.config.ts | ||
Effigenix ERP – Terminal UI
Interaktive TUI für das Effigenix ERP-Backend. Gebaut mit Ink (React für Terminal).
Voraussetzungen
- Node.js 20+, pnpm 9+
- Backend läuft auf
http://localhost:8080
Starten
# Im frontend/-Verzeichnis
pnpm install
pnpm --filter @effigenix/cli dev
Bedienung
Navigation: ↑↓ bewegen, Enter auswählen/bestätigen, Escape/Backspace zurück.
Login
Benutzername und Passwort eingeben, Tab zum Feldwechsel, Enter auf dem letzten Feld.
Die Session wird in ~/.effigenix/config.json gespeichert und beim nächsten Start wiederhergestellt.
Hauptmenü
| Eintrag | Funktion |
|---|---|
| Benutzerverwaltung | Liste, Anlage, Details, Passwort |
| Rollenverwaltung | Liste, Details |
| Logout | Session beenden |
Benutzerverwaltung
- Liste:
↑↓navigieren,Enter→ Detailansicht - Anlegen: Formular mit Tab-Navigation; Felder werden per Zod validiert (Inline-Fehler)
- Detailansicht → Aktionen:
Sperren/Entsperren– Bestätigungsdialog (J/N)Rolle zuweisen/entfernen– interaktive Auswahlliste der verfügbaren RollenPasswort ändern– eigener Screen mit Passwort-Bestätigung
- Erfolgreiche Aktionen zeigen eine grüne Box (auto-dismiss nach 3 s)
Rollenverwaltung
Liste aller Rollen mit Berechtigungen; Readonly-Ansicht.
Entwicklung
pnpm --filter @effigenix/cli typecheck # TypeScript-Check
pnpm --filter @effigenix/cli test # vitest (15 Tests)
pnpm --filter @effigenix/cli build # tsup → dist/
Struktur
src/
├── components/
│ ├── auth/ # LoginScreen
│ ├── layout/ # MainLayout, Header, StatusBar
│ ├── roles/ # RoleListScreen, RoleDetailScreen, RoleSelectList
│ ├── shared/ # ErrorDisplay, SuccessDisplay, ConfirmDialog, FormInput, LoadingSpinner
│ └── users/ # UserListScreen, UserDetailScreen, UserCreateScreen, ChangePasswordScreen
├── hooks/ # useUsers, useRoles, useTerminalSize
├── state/ # auth-context, navigation-context
└── utils/ # api-client, token-storage
Token-Speicherung
~/.effigenix/config.json (chmod 600). Enthält Access-Token, Refresh-Token und Ablaufzeit.
Token-Refresh erfolgt proaktiv (< 5 min bis Ablauf) und reaktiv (bei 401).