Architekturübersicht
anyPIM ist als moderne Webanwendung mit klar getrenntem Backend und Frontend konzipiert. Das Backend stellt eine vollständige REST-API bereit, das Frontend konsumiert diese als Single-Page-Application. Diese Architektur ermöglicht sowohl die Nutzung über die Weboberfläche als auch die direkte API-Integration durch Drittsysteme.
Systemarchitektur
| Schicht | Technologie | Version | Zweck |
|---|---|---|---|
| Frontend | Vue 3 | 3.x | Reaktives SPA-Framework mit Composition API |
| Build | Vite | 5.x | Schnelles HMR und optimierte Builds |
| Styling | Tailwind CSS + DaisyUI | 3.x / 4.x | Utility-first CSS mit Komponentenbibliothek |
| State | Pinia | 2.x | Zentrales State-Management |
| Backend | Laravel | 11.x | PHP-Framework für die REST-API |
| Authentifizierung | Laravel Sanctum | — | Token-basierte API-Authentifizierung |
| Autorisierung | Spatie Permission | — | Rollen- und Berechtigungsverwaltung |
| Datenbank | MySQL | 8.0+ | Relationale Datenhaltung mit JSON- und FULLTEXT-Support |
| Cache | Redis | 7.x | Anwendungscache und Session-Speicher |
| Queue | Redis + Horizon | — | Asynchrone Jobverarbeitung und Monitoring |
Backend-Architektur
Schichtenmodell
Das Backend folgt einem strikten Schichtenmodell, das die Verantwortlichkeiten klar trennt:
1. Routing und Middleware
Alle API-Routen sind unter /api/v1/ registriert und durchlaufen die Sanctum-Authentifizierungs-Middleware. Zusätzliche Middleware prüft Berechtigungen auf Rollen- und Hierarchieebene.
2. Controller-Schicht Controller validieren eingehende Requests über Form Requests, delegieren die Geschäftslogik an Services und transformieren die Ergebnisse über API Resources in JSON-Antworten. Controller enthalten keine Geschäftslogik.
3. Service-Schicht Services kapseln die gesamte Geschäftslogik. Sie orchestrieren Datenbankoperationen, lösen Events aus und koordinieren agentenübergreifende Operationen.
4. Model-Schicht Eloquent-Models bilden die 35 Datenbanktabellen ab. Sie definieren Relationen, Scopes, Accessors und Mutators. Alle Models verwenden UUID-Primärschlüssel.
Agentenbasiertes Moduldesign
Die Backend-Codebasis ist in funktionale Agenten unterteilt, die jeweils einen fachlichen Bereich abdecken:
- Attribut-Agent: Verwaltung von Attributen, Attributgruppen, Attributtypen und deren Validierungsregeln
- Produkt-Agent: Produktlebenszyklus, Variantenverwaltung, Wertzuweisungen
- Hierarchie-Agent: Baumstrukturen, Knotenoperationen, Produkt-Knoten-Zuordnung
- Import-Agent: Excel-Parsing, Validierung, Fuzzy-Matching, transaktionaler Import
- Export-Agent: Template-Verwaltung, Mapping-Ausführung, Publixx-Anbindung
- Medien-Agent: Datei-Upload, Bildverarbeitung, Medienzuordnung zu Produkten
- Auth-Agent: Benutzer, Rollen, Berechtigungen, Attribut-Views
Jeder Agent besitzt eigene Controller, Services, Models und Form Requests. Agentenübergreifende Kommunikation erfolgt über Service-Injection und Events.
Frontend-Architektur
Das Frontend ist eine Vue 3 Single-Page-Application mit folgender Struktur:
Kern-Technologien
- Composition API durchgängig für reaktive Logik und Code-Wiederverwendung
- Pinia Stores für globalen Zustand (aktueller Benutzer, Sprachauswahl, aktive Hierarchie)
- Vue Router mit verschachtelten Routen und navigationsbasierten Guards für Berechtigungen
- Axios als HTTP-Client mit automatischer Token-Erneuerung und Fehlerbehandlung
Build-Pipeline
Vite übernimmt sowohl die Entwicklungsumgebung (HMR mit unter 100 ms Aktualisierung) als auch den Produktions-Build mit Tree-Shaking, Code-Splitting und Asset-Hashing. Die gebaute SPA wird als statische Dateien über Apache oder Nginxausgeliefert.
Caching-Strategie
Redis als Anwendungscache
anyPIM nutzt Redis für zwei Zwecke: als Anwendungscache und als Queue-Broker.
Tagged Cache Invalidation: Caches werden mit Tags versehen, die eine gezielte Invalidierung ermöglichen. Ändert sich ein Produkt, werden alle Caches mit dem Tag product:{id} invalidiert — unabhängig davon, ob sie Listendarstellungen, Detailansichten oder Suchindex-Einträge betreffen.
Cache-Ebenen:
| Ebene | TTL | Beschreibung |
|---|---|---|
| Attribut-Definitionen | 24 Stunden | Ändern sich selten, werden bei Schema-Änderungen invalidiert |
| Hierarchie-Bäume | 1 Stunde | Werden bei Strukturänderungen sofort invalidiert |
| Produktdaten | 30 Minuten | Werden bei jeder Änderung gezielt invalidiert |
| Suchindex | Permanent | Wird über Datenbank-Triggers und Events aktualisiert |
Queue-System und Horizon
Langlebige Operationen werden nicht synchron in der HTTP-Request-Verarbeitung ausgeführt, sondern in Background Jobs ausgelagert:
- Excel-Import: Parsing und Verarbeitung großer Dateien
- Export-Generierung: Zusammenstellung und Formatierung der Exportdaten
- Suchindex-Aktualisierung: Neuberechnung betroffener Einträge nach Datenänderungen
- Cache-Aufwärmung: Proaktives Füllen invalidierter Cache-Einträge
- Medienverarbeitung: Thumbnail-Generierung und Bildoptimierung
Laravel Horizon überwacht die Queue-Verarbeitung, bietet Echtzeitmetriken und erlaubt die Konfiguration von Parallelität und Wiederholungsstrategien.