Skip to content

Architekturuebersicht

anyPIM ist als moderne Webanwendung mit klar getrenntem Backend und Frontend konzipiert. Das Backend stellt eine vollstaendige REST-API bereit, das Frontend konsumiert diese als Single-Page-Application. Diese Architektur ermoeglicht sowohl die Nutzung ueber die Weboberflaeche als auch die direkte API-Integration durch Drittsysteme.

Systemarchitektur

CLIENTWEBSERVERBACKEND (Laravel 11)Vue 3 SPAVite + Tailwind CSS + DaisyUI + PiniaNginx Reverse ProxySanctum AuthToken + RBACREST Controllers90+ EndpointsForm RequestsValidierungResourcesJSON-TransformationService LayerExportService | ImportService | InheritanceService | PqlService | VersioningServiceEloquent Models35 Tabellen, UUID PKsMySQL 8JSON + FULLTEXTRedisCache + QueueHorizonAsync Jobs

Technologie-Stack

SchichtTechnologieVersionZweck
FrontendVue 33.xReaktives SPA-Framework mit Composition API
BuildVite5.xSchnelles HMR und optimierte Builds
StylingTailwind CSS + DaisyUI3.x / 4.xUtility-first CSS mit Komponentenbibliothek
StatePinia2.xZentrales State-Management
BackendLaravel11.xPHP-Framework fuer die REST-API
AuthentifizierungLaravel Sanctum-Token-basierte API-Authentifizierung
AutorisierungSpatie Permission-Rollen- und Berechtigungsverwaltung
DatenbankMySQL8.0+Relationale Datenhaltung mit JSON- und FULLTEXT-Support
CacheRedis7.xAnwendungscache und Session-Speicher
QueueRedis + 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. Zusaetzliche Middleware prueft Berechtigungen auf Rollen- und Hierarchieebene.

2. Controller-Schicht Controller validieren eingehende Requests ueber Form Requests, delegieren die Geschaeftslogik an Services und transformieren die Ergebnisse ueber API Resources in JSON-Antworten. Controller enthalten keine Geschaeftslogik.

3. Service-Schicht Services kapseln die gesamte Geschaeftslogik. Sie orchestrieren Datenbankoperationen, loesen Events aus und koordinieren agentenuebergreifende Operationen. Detaillierte Beschreibungen finden sich unter Services und Events.

4. Model-Schicht Eloquent-Models bilden die 35 Datenbanktabellen ab. Sie definieren Relationen, Scopes, Accessors und Mutators. Alle Models verwenden UUID-Primaerschluessel.

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-Ausfuehrung, 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. Agentenuebergreifende Kommunikation erfolgt ueber Service-Injection und Events.

Frontend-Architektur

Das Frontend ist eine Vue 3 Single-Page-Application mit folgender Struktur:

Kern-Technologien

  • Composition API durchgaengig fuer reaktive Logik und Code-Wiederverwendung
  • Pinia Stores fuer globalen Zustand (aktueller Benutzer, Sprachauswahl, aktive Hierarchie)
  • Vue Router mit verschachtelten Routen und navigationsbasierten Guards fuer Berechtigungen
  • Axios als HTTP-Client mit automatischer Token-Erneuerung und Fehlerbehandlung

Build-Pipeline

Vite uebernimmt sowohl die Entwicklungsumgebung (HMR mit unter 100ms Aktualisierung) als auch den Produktions-Build mit Tree-Shaking, Code-Splitting und Asset-Hashing. Die gebaute SPA wird als statische Dateien ueber Nginx ausgeliefert.

Caching-Strategie

Redis als Anwendungscache

anyPIM nutzt Redis fuer zwei Zwecke: als Anwendungscache und als Queue-Broker.

Tagged Cache Invalidation: Caches werden mit Tags versehen, die eine gezielte Invalidierung ermoeglichen. Aendert sich ein Produkt, werden alle Caches mit dem Tag product:{id} invalidiert -- unabhaengig davon, ob sie Listendarstellungen, Detailansichten oder Suchindex-Eintraege betreffen.

php
// Beispiel: Cache mit Tags setzen
Cache::tags(['products', "product:{$id}"])->put($key, $data, 3600);

// Beispiel: Gezieltes Invalidieren
Cache::tags(["product:{$id}"])->flush();

Cache-Ebenen:

EbeneTTLBeschreibung
Attribut-Definitionen24 StundenAendern sich selten, werden bei Schema-Aenderungen invalidiert
Hierarchie-Baeume1 StundeWerden bei Strukturaenderungen sofort invalidiert
Produktdaten30 MinutenWerden bei jeder Aenderung gezielt invalidiert
SuchindexPermanentWird ueber Datenbank-Triggers und Events aktualisiert

Queue-System und Horizon

Langlebige Operationen werden nicht synchron in der HTTP-Request-Verarbeitung ausgefuehrt, sondern in Background Jobs ausgelagert:

  • Excel-Import: Parsing und Verarbeitung grosser Dateien
  • Export-Generierung: Zusammenstellung und Formatierung der Exportdaten
  • Suchindex-Aktualisierung: Neuberechnung betroffener Eintraege nach Datenaenderungen
  • Cache-Aufwaermung: Proaktives Fuellen invalidierter Cache-Eintraege
  • Medienverarbeitung: Thumbnail-Generierung und Bildoptimierung

Laravel Horizon ueberwacht die Queue-Verarbeitung, bietet Echtzeitmetriken und erlaubt die Konfiguration von Parallelitaet und Wiederholungsstrategien.

Unterseiten dieser Sektion

SeiteInhalt
DatenmodellDetaillierte Beschreibung aller 35 Tabellen, des EAV-Musters und des Suchindex
Services und EventsService-Schicht, Event-System, Queue-Jobs und Cache-Invalidierung
VererbungHierarchie- und Varianten-Vererbung mit Aufloesungsregeln und Sortierung

anyPIM Dokumentation