Datenmodell
Die Tabellen hinter Portline und wer jede davon lesen und schreiben darf.
Alle Tabellen liegen im Schema public mit dem Präfix pl_, und jede Zeile trägt eine workspace_id. Row-Level Security läuft über zwei Hilfsfunktionen: pl.role_in(workspace) gibt Ihre Rolle zurück, und pl.can(workspace, area, level) beantwortet die Frage „Darf dieser Nutzer das hier tun?“, indem sie Mitgliedschaft, Tariffunktionen und Abonnementstatus prüft.
„Ansehen“, „Bearbeiten“ und „Freigeben“ bezeichnen im Folgenden die Stufe im Bereich der jeweiligen Tabelle. „+ fleet“ bedeutet, dass der Tarif zusätzlich diese Funktion enthalten muss.
Workspace und Personen
| Tabelle | Enthält | Lesen | Schreiben |
|---|---|---|---|
pl_workspaces | Name, Slug, Zeitzone | Mitglieder | Inhaber (nur Name und Zeitzone) |
pl_subscriptions | Tarif, Status, Nutzerplätze, Periodenende | Mitglieder | Nur Service-Rolle |
pl_members | Rolle, Anzeigename, Titel, E-Mail | Mitglieder | Inhaber und Admin, abgesichert durch einen Trigger |
pl_notifications | Titel, Text, Link, Lesezeitpunkt | Nur eigene | Nur read_at |
pl_audit | Wer was wann getan hat | Freigeben | Nur Insert als Sie selbst; nie aktualisiert |
Sendungen und Container
| Tabelle | Enthält | Lesen | Schreiben |
|---|---|---|---|
pl_customers | Kundenname und Land | Ansehen | Bearbeiten |
pl_ports | UN/LOCODE, Name, Land, Position | Alle angemeldeten Nutzer | Service-Rolle |
pl_shipments | Code, Kunde, Route, Verkehrsträger, Status, Ladung, Gewicht, Container, Fahrer, Incoterm, ETD/ETA | Ansehen | Bearbeiten |
pl_shipment_stops | Routen-Checkpoints in Reihenfolge, geplante und tatsächliche Zeiten | Ansehen | Bearbeiten |
pl_shipment_events | Die Zeitleiste „Neueste Updates“ | Ansehen | Bearbeiten |
pl_documents | Konnossement, Zollanmeldung, Rechnungen, mit Prüfstatus | Ansehen | Bearbeiten zum Hochladen; Freigeben zum Prüfen |
pl_containers | ISO-6346-Nummer, Typ, Kühl-Sollwert, Status, Position | Ansehen | Bearbeiten |
pl_telemetry | Temperaturmesswerte von Kühlcontainern | Ansehen + telemetry | Service-Rolle (Sensor-Feed) |
Flotte, Lager und Rampen
| Tabelle | Enthält | Lesen | Schreiben |
|---|---|---|---|
pl_assets | Lkw, Schiffe, Drohnen mit Status und Position | Ansehen + fleet | Bearbeiten |
pl_drivers | Name, Telefon, Frachtführer, Lkw, Auflieger, Kennzeichen | Ansehen + fleet | Bearbeiten |
pl_warehouses | Standort, Stadt, Kapazität und belegte m² | Ansehen + warehouses | Bearbeiten |
pl_zones | Zonen pro Standort mit Auslastung | Ansehen + warehouses | Bearbeiten |
pl_stock | SKU, Produkt, Lagerplatz, Bestand, Meldebestand, ETA | Ansehen + warehouses | Bearbeiten |
pl_dock_doors | Tore pro Lager und ihr Typ | Ansehen + docks | Freigeben |
pl_dock_appointments | Lkw, Frachtführer, Richtung, Zeiten, Status, Check-in und Check-out | Ansehen + docks | Bearbeiten; Check-out erfordert Check-in |
Nachrichten
| Tabelle | Enthält | Lesen | Schreiben |
|---|---|---|---|
pl_threads | Betreff, verknüpfte Sendung oder verknüpfter Fahrer | Ansehen | Bearbeiten |
pl_messages | Autor, Text, Zeit | Ansehen | Bearbeiten, verfasst als Sie selbst |
pl_thread_reads | Wo jedes Mitglied einen Thread zuletzt gelesen hat | Nur eigene | Nur eigene |
Tariffunktionen
pl.plan_features spiegelt den Tarifkatalog in @portline/pricing, sodass Datenbank und App übereinstimmen, welcher Tarif welche Funktion enthält.
Demo-IDs
Der Demo-Generator erzeugt IDs im UUID-Format aus stabilen Schlüsseln. Der lokale Seed verwendet denselben Generator, sodass eine Sendung im Demo-Modus und im lokalen Modus dieselbe ID und denselben Code hat.