25 KiB
Boilerplate-Inventur: Daten-Layer (Prisma)
FAKTISCHE Inventur des Datenbank-Bereichs der Boilerplate. Boilerplate-Wurzel:
/Users/raffaelsheikh/Documents/GitHub/boilerplateNur 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. Indexuser_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/statusals Int),TenantUserInvitation(tokenHash/tokenPrefix/expiresAt/status),WorkspaceAuthProvider(SSO/SAML/OIDC pro Tenant),AdminUser(Admin-Panel + Authentik-OIDCssoProvider/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]).ApiKeyLogfü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(globalname @unique, optionalentityId), JoinRolePermission.UserRolemit nullabletenantId(partielle Eindeutigkeit via Migration-SQL).Group/GroupUserfü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,configJSON-String,@@unique([tenantId, type])),DataConnection(verschlüsselte Credentials),AppSyncRun(Status/Mode/MetrikenitemsProcessed…),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(Defaultcrm-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 (
Emailinbound/outbound,messageId @unique) + Outbound-Kampagnen (Campaign,OutboundEmailmitsentAt/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üsselteconfigJson,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/prefixunique,typeapp/admin/all, Feature-FlagshasTags/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, optionaldomain, 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/Propertygekoppelt (Output-Mapping in Row-Properties),executionTypesequential/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 viasessionId),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 (
ownerKeydefault "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/FeatureFlaggekoppelt.
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-Targetingrules/variantsJSON,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,signaturePublicKeyEd25519,manifestJSON,@@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:
tenantIdnullable ⇒ system-/operator-weit;tenantIdpflicht ⇒ strikt mandanten-isoliert.Leadist bewusst NICHT tenant-scoped. - Soft-Delete ist die Ausnahme: nur
Row.deletedAt+ExportJob. Default ist Hard-Delete viaonDelete: Cascade. - Vor jedem neuen User-FK: Eintrag in
packages/db/src/dsgvo/user-fk-map.tsergänzen — der Test bricht CI sonst. - Side-Effects: über Outbox (
publishOutboxEventin$transaction), nicht direkt. - Verbindungen: Migrate =
DIRECT_URL, Runtime =DATABASE_URL(PgBouncer), Reads optionalDATABASE_READ_URL. - HiveGrid-eigene Modelle:
prisma/schema/app.prismaist der vorgesehene leere Platzhalter.