Echtzeit-Arbeitsbereiche mit Zero entwickeln

So kombiniert Epicat Postgres, Drizzle und Rocicorp Zero für sichere Arbeitsbereichsdaten in Echtzeit.

Epicat verwendet PostgreSQL als maßgebliche Datenquelle, Drizzle für das Schema und Rocicorp Zero für reaktive Lesezugriffe im Client.

Vom Server autorisierte Abfragen

Zero leitet benannte Abfragen an die Epicat-API weiter. Die API prüft das signierte Better-Auth-Token und erstellt einen vertrauenswürdigen Abfragekontext mit der ID des aktuellen Nutzers. Jede Abfrage eines Arbeitsbereichs beginnt in diesem Kontext und durchläuft nur Organisationen, in denen der Nutzer Mitglied ist.

export const organizationProjects = defineQuery(({ args, ctx }) =>
  zql.member
    .where("userId", ctx?.userId ?? "")
    .where("organizationId", args.organizationId)
    .related("organization", (organization) => organization.related("projects"))
    .one(),
);

Der Browser kann die authentifizierte Identität nicht selbst bestimmen. Projektänderungen laufen über die typisierte API, die vor einer Änderung in PostgreSQL erneut die Mitgliedschaft in der Organisation prüft.

Eine durchgängige Schemakette

Das Drizzle-Schema erzeugt sowohl die Datenbankmigration als auch das Zero-Schema. Die Elysia-API erzeugt ein OpenAPI-Dokument, aus dem wiederum die Client-Typen für @epicat/sdk entstehen. Weil diese Artefakte generiert werden, wird eine Abweichung schon im Review statt erst zur Laufzeit sichtbar.

Warum diese Struktur?

  • PostgreSQL bleibt die dauerhafte und maßgebliche Datenquelle.
  • Zero überträgt bestätigte Änderungen ohne Polling an geöffnete Projektansichten.
  • Die Autorisierung bleibt sowohl beim Lesen als auch beim Schreiben auf dem Server.
  • Gemeinsam generierte Typen halten Web-App, SDK und API-Dokumentation synchron.
Einblicke

Ähnliche Beiträge

Weitere Beiträge über Entscheidungen, Arbeitsabläufe und Engineering-Ideen hinter Epicat.