Files
HiveGrid-Wireframes/hivegrid-cloud/docs/boilerplate-inventory/data-layer.md
T

25 KiB

Boilerplate-Inventur: Daten-Layer (Prisma)

FAKTISCHE Inventur des Datenbank-Bereichs der Boilerplate. Boilerplate-Wurzel: /Users/raffaelsheikh/Documents/GitHub/boilerplate Nur gelesen — nichts verändert. Diese Datei ist das einzige Schreib-Artefakt.

Übersicht

Aspekt Fakt
Paket @toolctrl/db (packages/db/package.json, private, type: module)
ORM Prisma 7.8.0 + @prisma/client 7.8.0 + @prisma/adapter-pg 7.8.0 (Decision: bei Prisma 7 bleiben — packages/db/ORM-DECISION.md)
Datenbank PostgreSQL
Schema-Ort prisma/schema/*.prisma (27 .prisma-Dateien inkl. schema.prisma + app.prisma-Platzhalter)
Migrationen prisma/migrations/ (150 Migrations-Ordner; migration_lock.toml → provider postgresql)
Generierter Client packages/db/generated/prisma/client (Output via generator client in schema.prisma)
Modelle gesamt 190 Prisma-Modelle (Brief nannte ~184) + 6 Enums
Verbindungs-URLs NICHT im Schema (Prisma 7) — liegen in packages/db/prisma.config.ts: Migrate nutzt DIRECT_URL (Port 5432), Runtime DATABASE_URL (Port 6432 / PgBouncer); optional DATABASE_READ_URL für Read-Replica

Modelle pro Schema-Datei (faktische Zählung)

Datei Modelle Datei Modelle
accounts.prisma 13 knowledgeBase.prisma 9
ai.prisma 8 marketingLeads.prisma 4
analytics.prisma 4 notifications.prisma 3
app.prisma 0 (Platzhalter // custom database models) onboarding.prisma 7
appsEngine.prisma 5 outbox.prisma 1
collabDocs.prisma 1 permissions.prisma 6
core.prisma 16 plugins.prisma 5
email.prisma 10 portals.prisma 12
emailSequences.prisma 3 promptFlows.prisma 12
entityBuilder.prisma 36 queue.prisma 2
featureFlags.prisma 3 sites.prisma 1
formWidget.prisma 2 subscriptions.prisma 14
helpDesk.prisma 2 workflows.prisma 10
imports.prisma 1 schema.prisma 0 (generator + datasource)

Querschnitt-Konventionen (über alle Schemas)

Konvention Fakt Beispiele
Primärschlüssel id String @id @default(cuid()) durchgängig. Ausnahmen: FileChunk.id Int @default(autoincrement()), PluginInvocation.id String @id (extern gesetzt), Join-Tabellen mit @@id([...]) (z.B. PromptFlowGroupEntity). —
Audit-Timestamps createdAt DateTime @default(now()) fast überall; updatedAt DateTime @updatedAt auf mutierbaren Entitäten. nahezu alle Modelle
Tenant-Scoping tenantId String (pflicht) oder tenantId String? (nullable für system-/global-scoped). tenant Tenant @relation(... onDelete: Cascade). Nullable = system-/operator-weit. App.tenantId (pflicht), Workflow.tenantId? (nullable), Lead (KEIN tenantId — operator-scoped bis Conversion)
Soft-Delete NUR Row.deletedAt DateTime? (entityBuilder.prisma) mit @@index([deletedAt]). ExportJob hat deletedAt + hardDeletedAt (Retention). Sonst Hard-Delete via onDelete: Cascade. Row, ExportJob
FK-Delete-Strategie onDelete: Cascade (Default), onDelete: SetNull (Audit-/Tombstone-Spalten), onDelete: NoAction. ImpersonationAudit (SetNull), Chat.user (NoAction)
Tamper-Evidenz Hash-Ketten: AuditEvent (previousHash/eventHash), PluginCapabilityUse (prevHash/rowHash), FeatureFlagAudit (append-only). core.prisma, plugins.prisma, featureFlags.prisma
DSGVO/PII IPs als SHA-256-Hash (ipHash, lastIpHash); Pseudonymisierungs-Flags auf User (pseudonymized, scheduledDeletionAt, deletionRequestId); zentrale FK-Karte packages/db/src/dsgvo/user-fk-map.ts. FormSubmission.ipHash, Lead.lastIpHash, User
Idempotenz dispatchKey/requestId/triggerEventId @unique; IdempotencyKey-Modell für HTTP-Response-Caching. OutboxEvent.dispatchKey, AICostEvent.requestId
MFA/Secrets Verschlüsselte Spalten mit …Encrypted-Suffix; JSON-Configs mit verschlüsselten Secrets (configJson). User.totpSecretEncrypted, MarketingIntegration.configJson

Paket @toolctrl/db

Zweck: Eigentümer-Paket für die server-seitige Prisma-Client-Grenze, den generierten Client und die Repository-Datenbank-Befehlsfläche. Schema + Migrationen bleiben (Stand jetzt) unter prisma/.

Zentrale Dateien (mit absolutem Pfad)

Datei Inhalt / API
/Users/raffaelsheikh/Documents/GitHub/boilerplate/packages/db/src/index.ts Root-Barrel: re-exportiert auth-boundary, conversations/history, audit-events, export-jobs, idempotency-keys, import-jobs, notifications, outbox(+claim/retention/receiver), permissions-seed, seed, settings, transactions, workspace-invites; databaseBoundary / getDatabaseBoundary() Metadaten-Objekt
/Users/raffaelsheikh/Documents/GitHub/boilerplate/packages/db/src/client.server.ts getDbClient() (Dev-Singleton), getWriteDbClient() (Primary), getReadDbClient() (Replica via DATABASE_READ_URL, Fallback Primary), getExtendedDbClient() ($extends mit .read/.write), Typen DbClient/ExtendedDbClient. Nutzt PrismaPg-Adapter + @toolctrl/logger
/Users/raffaelsheikh/Documents/GitHub/boilerplate/packages/db/src/transactions.server.ts runDbTransaction(callback, client?), runDbTransactionBatch(operations, client?), Typen DbTransactionClient/DbTransactionRunner
/Users/raffaelsheikh/Documents/GitHub/boilerplate/packages/db/src/prisma.ts Konstanten der Ownership-Metadaten: PRISMA_SCHEMA_PATH="prisma/schema", PRISMA_MIGRATIONS_PATH="prisma/migrations", PRISMA_GENERATED_CLIENT_PATH, PRISMA_SEED_COMMAND="tsx prisma/seed.ts"
/Users/raffaelsheikh/Documents/GitHub/boilerplate/packages/db/src/audit-hash.ts Tamper-evidente Hash-Kette für AuditEvent: computeAuditHash(), verifyAuditChain(), canonicalizeAuditPayload(); HMAC-SHA-256 via AUDIT_CHAIN_SECRET (Fallback SHA-256)
/Users/raffaelsheikh/Documents/GitHub/boilerplate/packages/db/src/dsgvo/user-fk-map.ts USER_FK_MAP — enumeriert ALLE Modelle mit FK auf User.id + Cascade-Strategie (hard-delete / pseudonymize / retain-tombstone) + includeInExport. Test erzwingt Vollständigkeit gegen Schema (user-fk-map.test.ts)
/Users/raffaelsheikh/Documents/GitHub/boilerplate/packages/db/src/dsgvo/pseudonymize.ts DSGVO-Pseudonymisierungs-Helfer
/Users/raffaelsheikh/Documents/GitHub/boilerplate/packages/db/src/outbox.ts Transaktionaler Outbox-Publisher: publishOutboxEvent(tx, args), OUTBOX_EVENT_TYPE_PATTERN (<domain>.<entity>.<verb>), OUTBOX_DISPATCH_KEY_PATTERN, OUTBOX_MAX_PAYLOAD_BYTES=64 KiB
/Users/raffaelsheikh/Documents/GitHub/boilerplate/packages/db/prisma.config.ts Prisma-7-Config: Schema-/Migrations-Pfad, Seed-Befehl, datasource.url = env("DATABASE_URL")

Server-Module (Repository-Befehlsfläche, je *.server.ts mit *.test.ts)

Alle unter packages/db/src/ (Auswahl der Domänen-Repositories): accounts, analytics, api-keys, audit-events, auth-boundary, auth-providers, conversations/history, device-tokens, email-sequences, entities, entitlements-seed, events, event-webhook-attempts, export-jobs, import-jobs, idempotency-keys, impersonation-audit, kpi, logs, notifications, permissions-seed, queue-failed-jobs, relationships, rows, seed, settings, subscriptions, support-tickets, telemetry, transactions, usage, users, widgets, workspace-invites. Subpath-Exporte sind in package.json deklariert (z.B. @toolctrl/db/rows.server, @toolctrl/db/audit-events.server, @toolctrl/db/outbox).

Scripts & CI / verify

Script Zweck
prisma:generate prisma generate (Root-Config)
prisma:migrate:check scripts/db/check-direct-url.sh --skip-ping (erzwingt DIRECT_URL)
prisma:migrate:deploy check + prisma migrate deploy
prisma:migrate:status Migrations-Status
seed / permissions:sync tsx prisma/seed.ts bzw. permissions-seed
build esbuild-Bundles: permissions-seed, production-seed, e2e-readiness-seed
Root verify:db-migrate-status scripts/verify-db-migrate-status.mjs (CI-Gate, benötigt DATABASE_URL)
Root verify:db-migrate-status:staging scripts/verify-db-migrate-status-staging.sh

HiveGrid-Relevanz: Fundament für JEDES HiveGrid-Modul. Die Client-/Transaktions-/Outbox-/Audit-Helfer und das Tenant-Scoping-Muster sind direkt wiederverwendbar. getReadDbClient()/getExtendedDbClient() deckt Read-Heavy HiveGrid-Dashboards ab. user-fk-map.ts ist Pflicht-Referenz für jedes neue Modul mit User-Bezug (DSGVO).


Schema-Domänen (Modelle + Kernfelder + HiveGrid-Relevanz)

accounts.prisma (13) — prisma/schema/accounts.prisma

Modelle: User, MagicLinkToken, AdminUser, Tenant, TenantChatbotAccess, WorkspaceAuthProvider, ImpersonationAudit, TenantUser, TenantUserInvitation, Registration, Blacklist, TenantIpAddress, TenantType.

  • User: email-unique, passwordHash?, OAuth (githubId/googleId), MFA (totpSecretEncrypted, mfaRecoveryCodeHashes), DSGVO-Flags (pendingDeletion, scheduledDeletionAt, pseudonymized, deletionRequestId), defaultTenantId. Index user_pending_deletion_due_idx.
  • Tenant: slug @unique, name, active, subscriptionId?, Chatbot-Felder, AI-Cost-Override-Felder, Theme. Zentraler Tenant-Scope-Anker.
  • TenantUser (Membership: type/joined/status als Int), TenantUserInvitation (tokenHash/tokenPrefix/expiresAt/status), WorkspaceAuthProvider (SSO/SAML/OIDC pro Tenant), AdminUser (Admin-Panel + Authentik-OIDC ssoProvider/ssoSubjectId), ImpersonationAudit.

HiveGrid-Relevanz: Identity / Auth / Mandanten-Kern für ALLE HiveGrid-Module (Multi-Tenant-Fundament, SSO, Invitations, Impersonation-Audit). MFA + DSGVO-Selfservice direkt nutzbar.

core.prisma (16) — prisma/schema/core.prisma

Modelle: AppConfiguration, Log, AuditEvent, IdempotencyKey, ApiKey, ApiKeyLog, Event, EventWebhookAttempt, MetricLog, FileUploadProgress, FileChunk, FileObject, IpAddress, IpAddressLog, Widget, Credential.

  • AuditEvent: tamper-evidente Hash-Kette (previousHash/eventHash), actorType/actorId/actorEmail, dataSensitivity, regulatoryScope[], outcome. Reichlich Indizes auf (tenantId, createdAt) etc.
  • ApiKey: keyHash/keyPrefix/keyLastFour/keyVersion (gehashte Keys), @@unique([tenantId, alias]). ApiKeyLog für Request-Logging.
  • IdempotencyKey (@@unique([scope, key])), FileObject/FileUploadProgress/FileChunk (Storage-Metadaten), Credential (globaler Secret-Store, value Json).

HiveGrid-Relevanz: Querschnitt — Audit-Trail (Compliance), API-Keys, File-Storage, Idempotenz, Telemetrie. Für HiveGrid-Logging/Audit und externe API-Integrationen unmittelbar verwendbar.

permissions.prisma (6) — prisma/schema/permissions.prisma

Modelle: Role, Permission, RolePermission, UserRole, Group, GroupUser.

  • Role (tenant-scoped optional, type, isDefault, assignToNewUsers), Permission (global name @unique, optional entityId), Join RolePermission. UserRole mit nullable tenantId (partielle Eindeutigkeit via Migration-SQL). Group/GroupUser für Gruppen-basierte Berechtigung.

HiveGrid-Relevanz: RBAC-Fundament. Jedes HiveGrid-Modul mit Rollen/Rechten baut hierauf auf. Entity-gebundene Permissions koppeln an den Entity-Builder.

app.prisma (0) — prisma/schema/app.prisma

Reiner Platzhalter (// custom database models) für projekt-/HiveGrid-spezifische Modelle. HiveGrid-Relevanz: Vorgesehener Ort für HiveGrid-eigene Modelle ohne die Boilerplate-Domänen zu verändern.

appsEngine.prisma (5) — prisma/schema/appsEngine.prisma

Modelle: App, DataConnection, AppSyncRun, AppSyncRunLog, AppSyncItem.

  • App (type, config JSON-String, @@unique([tenantId, type])), DataConnection (verschlüsselte Credentials), AppSyncRun (Status/Mode/Metriken itemsProcessed…), AppSyncItem (Source→Destination-Mapping + Rollback).

HiveGrid-Relevanz: Integrations-/Sync-Engine — relevant für HiveGrid-Module, die externe Datenquellen (REST/OAuth/Webhook) synchronisieren, inkl. Rollback-fähiger Sync-Runs.

subscriptions.prisma (14) — prisma/schema/subscriptions.prisma

Modelle: SubscriptionProduct, SubscriptionPrice, SubscriptionUsageBasedPrice, SubscriptionUsageBasedTier, SubscriptionFeature, TenantSubscription, TenantSubscriptionProduct, TenantSubscriptionProductPrice, TenantSubscriptionUsageRecord, TenantProductConfiguration, TenantFeatureOverride, CheckoutSessionStatus, Credit.

  • Stripe-gekoppelt (stripeId, stripeCustomerId, stripeSubscriptionId), Usage-Based-Billing (Tiers, UsageRecords), TenantFeatureOverride (@@unique([tenantId, featureKey])), TenantProductConfiguration.blueprintId (Default crm-saas), Credit (Guthaben pro Tenant/User).

HiveGrid-Relevanz: Billing / Entitlements / Feature-Gating-Fundament für HiveGrid-Pläne. Gekoppelt mit @toolctrl/entitlements (Workspace-Dependency).

notifications.prisma (3) — prisma/schema/notifications.prisma

Enums: NotificationDeliveryStatus, NotificationPreferenceChannel. Modelle: NotificationDelivery, UserNotificationPreference, DeviceToken.

  • NotificationDelivery (Channel IN_APP/EMAIL, status, attemptsMade, providerMessageId, @@unique([tenantId, userId, channel, sourceKey])), UserNotificationPreference (pro Channel+Category), DeviceToken (APNs/FCM/WebPush, token @unique, revokedAt).

HiveGrid-Relevanz: Benachrichtigungs-Querschnitt (In-App + E-Mail + Push) für alle HiveGrid-Module mit User-Notifications. Mobile-Push (Capacitor) bereits modelliert.

email.prisma (10) — prisma/schema/email.prisma

Modelle: TenantInboundAddress, Email, EmailRead, EmailCc, EmailAttachment, EmailSender, Campaign, OutboundEmail, OutboundEmailOpen, OutboundEmailClick.

  • Inbound (Email inbound/outbound, messageId @unique) + Outbound-Kampagnen (Campaign, OutboundEmail mit sentAt/bouncedAt/unsubscribedAt, Open/Click-Tracking).

HiveGrid-Relevanz: E-Mail-Infrastruktur (transaktional + Kampagnen) für HiveGrid-Kommunikationsmodule und CRM-Outreach.

emailSequences.prisma (3) — prisma/schema/emailSequences.prisma

Modelle: EmailSequence, EmailSequenceRun, EmailSequenceStepDelivery.

  • Drip-Kampagnen via Outbox-Events (triggerEvent), stepsJson (linear), Run-State, Step-Delivery mit Open/Click/Bounce. @@unique([sequenceId, triggerEventId]) (Idempotenz).

HiveGrid-Relevanz: Marketing-/Lifecycle-Automation. Relevant für HiveGrid-Onboarding-/Nurture-Flows; eng an Outbox + marketingLeads gekoppelt.

marketingLeads.prisma (4) — prisma/schema/marketingLeads.prisma

Enum: LeadStatus. Modelle: Lead, LeadEvent, TenantAcquisition, MarketingIntegration.

  • Lead (NICHT tenant-scoped — operator-/sales-scoped, email @unique, First-Touch-UTM-Attribution, score, convertedToTenantId, lastIpHash), LeadEvent (Timeline-Append-Log), TenantAcquisition (Attributions-Snapshot bei Conversion, tenantId @unique), MarketingIntegration (verschlüsselte configJson, triggerEvents[]).

HiveGrid-Relevanz: Lead-/Funnel-/Attribution-Modul. Relevant für HiveGrid-Akquise/Marketing; zeigt das Muster „operator-scoped statt tenant-scoped".

entityBuilder.prisma (36) — prisma/schema/entityBuilder.prisma

Größte Domäne (No-Code-/Dynamic-Entity-Engine). Kernmodelle:

  • Entity (name/slug/prefix unique, type app/admin/all, Feature-Flags hasTags/hasComments/hasTasks/hasViews, defaultVisibility), Property (typisierte Spalten, type Int/subtype, formulaId?, @@unique([entityId, name, tenantId])), EntityView (Layout table/board/calendar…, Grid-Konfig, Filter/Sort/GroupBy), EntityViewProperty/EntityViewFilter/EntityViewSort, PropertyAttribute/PropertyOption, EntityTag, EntityRelationship/RowRelationship (Parent/Child), EntityWebhook/EntityWebhookLog.
  • Row-Daten: Row (folio, deletedAt? Soft-Delete, order, FK auf Entity/Tenant/User), RowValue (polymorphe Werte: text/number/date/boolean), RowValueMultiple, RowValueRange, RowMedia, RowPermission (row-level: role/group/user/public), RowTag, RowComment/RowCommentReaction, RowTask.
  • Formula/FormulaComponent/FormulaLog/FormulaComponentLog, EntityGroup/EntityGroupEntity/EntityGroupConfiguration(Row), EntityTemplate, ApiKeyEntity (per-Entity-CRUD-Rechte), TenantSettingsRow, SampleCustomEntity.

HiveGrid-Relevanz: Kern-Datenmodell-Engine. Wenn HiveGrid dynamische/benutzerdefinierte Entitäten, Tabellen-Views, Row-Level-Permissions, Tags/Tasks/Comments oder Formeln braucht, ist dies das Fundament. Größter Wiederverwendungs-Hebel und größte Komplexität.

portals.prisma (12) — prisma/schema/portals.prisma

Modelle: Portal, PortalUser, PortalPage, PortalUserRegistration, PortalSubscriptionProduct, PortalSubscriptionPrice, PortalSubscriptionFeature, PortalUserSubscription, PortalUserSubscriptionProduct, PortalUserSubscriptionProductPrice, PortalCheckoutSessionStatus.

  • Portal (subdomain @unique, optional domain, SEO/Branding/Auth-Flags, eigene Stripe-Account), PortalUser (separate End-User-Identität pro Portal, @@unique([portalId, email])), eigenes Subscription-Subsystem (gespiegelt vom Haupt-Subscriptions-Modell).

HiveGrid-Relevanz: Customer-Portal / White-Label-Public-Sites mit eigener User-Basis und eigenem Billing. Relevant falls HiveGrid kundenseitige Portale (B2B2C) anbietet.

promptFlows.prisma (12) — prisma/schema/promptFlows.prisma

Modelle: PromptFlowGroup, PromptFlowGroupTemplate, PromptFlowGroupEntity, PromptFlow, PromptFlowInputVariable, PromptTemplate, PromptFlowOutput, PromptFlowOutputMapping, PromptFlowExecution, PromptTemplateResult.

  • LLM-Prompt-Pipelines, an Entity/Property gekoppelt (Output-Mapping in Row-Properties), executionType sequential/parallel, Streaming-Flag, Execution + Result-Log.

HiveGrid-Relevanz: AI-Prompt-Orchestrierung an Entity-Daten. Relevant für HiveGrid-Module, die strukturierte LLM-Outputs in Datensätze schreiben.

ai.prisma (8) — prisma/schema/ai.prisma

Modelle: Chat, ChatMessage, ChatMessagePart, GeneratedObject, AICostEvent, TenantAICostSummary.

  • Chat (Typ tenant/admin/marketing, Scope, anonym via sessionId), ChatMessage/ChatMessagePart (Multi-Part), GeneratedObject (LLM-Generierungen + Token/Cost-Felder), AICostEvent (append-only Cost-Log, requestId @unique, KEINE Prompt-Bodies, Stripe-Overage-Felder), TenantAICostSummary (vor-aggregiert pro Periode).

HiveGrid-Relevanz: AI-Chatbot + AI-Kostentracking/Billing. Für HiveGrid-Assistenten und AI-Cost-Dashboards direkt nutzbar.

workflows.prisma (10) — prisma/schema/workflows.prisma

Modelle: Workflow, WorkflowBlock, WorkflowBlockConditionGroup, WorkflowBlockCondition, WorkflowBlockToBlock, WorkflowExecution, WorkflowInputExample, WorkflowBlockExecution, WorkflowVariable, WorkflowCredential.

  • Visueller Workflow-Builder: Blocks + Conditions + Block-zu-Block-Edges, Execution-Tracking pro Block, tenant-scoped + appliesToAllTenants. WorkflowVariable/WorkflowCredential (@@unique([tenantId, name])).

HiveGrid-Relevanz: Automatisierungs-/Workflow-Engine (node-basiert). Relevant für HiveGrid-Prozessautomatisierung, gekoppelt an Outbox-Events.

knowledgeBase.prisma (9) — prisma/schema/knowledgeBase.prisma

Modelle: KnowledgeBase, KnowledgeBaseCategory, KnowledgeBaseCategorySection, KnowledgeBaseArticle, KnowledgeBaseRelatedArticle, KnowledgeBaseViews, KnowledgeBaseArticleViews, KnowledgeBaseArticleUpvotes, KnowledgeBaseArticleDownvotes.

  • Mehrsprachige Wissensdatenbank, tenant-scoped optional (ownerKey default "global"), Artikel mit Draft/Published-Content, Voting + View-Tracking.

HiveGrid-Relevanz: Help-Center / Docs-Modul. Relevant für HiveGrid-Self-Service-Wissensbasis.

onboarding.prisma (7) — prisma/schema/onboarding.prisma

Modelle: Onboarding, OnboardingFilter, OnboardingStep, OnboardingSession, OnboardingSessionAction, OnboardingSessionFilterMatch, OnboardingSessionStep.

  • Onboarding-Flows (modal/page), Filter-Targeting, Session-Tracking pro User/Tenant (@@unique([onboardingId, userId, tenantId])).

HiveGrid-Relevanz: User-Onboarding / Produkt-Touren für HiveGrid-Adoption.

analytics.prisma (4) — prisma/schema/analytics.prisma

Modelle: AnalyticsSettings, AnalyticsUniqueVisitor, AnalyticsPageView, AnalyticsEvent.

  • First-Party-Web-Analytics (Cookie-basiert, UTM, Device/Browser), an Portal/User/PortalUser/FeatureFlag gekoppelt.

HiveGrid-Relevanz: Eingebettetes Web-Analytics für HiveGrid-Portale/Sites; FeatureFlag-Event-Korrelation.

featureFlags.prisma (3) — prisma/schema/featureFlags.prisma

Modelle: FeatureFlag, FeatureFlagFilter, FeatureFlagAudit.

  • FeatureFlag (scope global/tenant/user, v2-Targeting rules/variants JSON, enabledFrom/Until, Flag-Dependencies via self-relation), FeatureFlagFilter (Prozent/Sprache/Page…), FeatureFlagAudit (append-only).

HiveGrid-Relevanz: Feature-Toggles / Gradual-Rollout / A-B für alle HiveGrid-Module.

plugins.prisma (5) — prisma/schema/plugins.prisma

Modelle: Plugin, TenantPluginCapabilityGrant, PluginUserConfig, PluginInvocation, PluginCapabilityUse.

  • WASM-Plugin-Runtime: Plugin (wasmSha256, signaturePublicKey Ed25519, manifest JSON, @@unique([tenantId, pluginId])), explizite Capability-Grants pro Tenant, per-User-Config, Invocation-Audit + per-Capability-Use mit Hash-Kette (prevHash/rowHash).

HiveGrid-Relevanz: Erweiterbarkeit via signierte sandboxed Plugins. Relevant falls HiveGrid Third-Party-/Custom-Erweiterungen unterstützt.

imports.prisma (1) — prisma/schema/imports.prisma

Enum: ImportJobStatus. Modell: ImportJob (tenant-scoped, importType/format, Source-Bucket/Key, acceptedRows/rejectedRows, Error-Report-Bucket, requestId). HiveGrid-Relevanz: Daten-Import-Jobs (CSV/etc.) für HiveGrid-Bulk-Onboarding.

queue.prisma (2) — prisma/schema/queue.prisma

Enum: ExportJobStatus. Modelle: QueueFailedJob (BullMQ-DLQ, @@unique([queueName, jobName, jobId])), ExportJob (Daten-Export mit Retention expiresAt/deletedAt/hardDeletedAt). HiveGrid-Relevanz: Background-Job-Fehler-Observability + DSGVO-konformer Datenexport.

outbox.prisma (1) — prisma/schema/outbox.prisma

Enum: OutboxStatus. Modell: OutboxEvent (eventType, payload JSON, status, retries, scheduledAt, dispatchKey @unique für Idempotenz, priority, lockedUntil). Reiche Indizes für Dispatcher-Polling. HiveGrid-Relevanz: Transaktionales Outbox-Muster — atomare Side-Effects mit DB-Writes. Querschnitt für ALLE HiveGrid-Module mit zuverlässiger Event-Auslieferung (Publisher: packages/db/src/outbox.ts).

sites.prisma (1) — prisma/schema/sites.prisma

Modell: Site (tenant-scoped, type community/booking, siteId @@unique([type, siteId]), Branding/Copy JSON, Server-Resolution domain/path/subdomain). HiveGrid-Relevanz: Multi-Site / Public-Sites (z.B. Booking/Community). Relevant für HiveGrid-Endkunden-Frontends.

collabDocs.prisma (1) — prisma/schema/collabDocs.prisma

Modell: CollabDoc (Y.js/Hocuspocus Realtime-Docs, ydocState Bytes, version, @@unique([tenantId, resourceType, resourceId])). HiveGrid-Relevanz: Realtime-Kollaboration (Live-Editing) für HiveGrid-Dokumente/Notizen.

helpDesk.prisma (2) — prisma/schema/helpDesk.prisma

Modelle: Feedback (tenant/user-scoped, message, fromUrl), SupportTicket (source/status/priority, inboundMessageId @unique). HiveGrid-Relevanz: Support-/Feedback-Modul für HiveGrid-Kundenservice.

formWidget.prisma (2) — prisma/schema/formWidget.prisma

Modelle: Form (tenant-scoped, embeddable, key @unique, definition JSON, fieldMapping, allowedOrigins[], Anti-Spam-config), FormSubmission (payload JSON, ipHash, status received/processed/failed/spam). HiveGrid-Relevanz: Eingebettete Formulare (Lead-Capture, Kontakt) für HiveGrid-Public-Surfaces; koppelt an CRM/Entity-Rows.


Hinweise für Modul-Abgleich-Agenten

  • Tenant-Scope-Regel: tenantId nullable ⇒ system-/operator-weit; tenantId pflicht ⇒ strikt mandanten-isoliert. Lead ist bewusst NICHT tenant-scoped.
  • Soft-Delete ist die Ausnahme: nur Row.deletedAt + ExportJob. Default ist Hard-Delete via onDelete: Cascade.
  • Vor jedem neuen User-FK: Eintrag in packages/db/src/dsgvo/user-fk-map.ts ergänzen — der Test bricht CI sonst.
  • Side-Effects: über Outbox (publishOutboxEvent in $transaction), nicht direkt.
  • Verbindungen: Migrate = DIRECT_URL, Runtime = DATABASE_URL (PgBouncer), Reads optional DATABASE_READ_URL.
  • HiveGrid-eigene Modelle: prisma/schema/app.prisma ist der vorgesehene leere Platzhalter.