Skip to main content

Prisma Schema & Models

The system uses Prisma ORM with MongoDB. The schema is defined in server-nest/prisma/schema.prisma and contains 71 models.

Multi-Tenancy Filtering

Prisma middleware in PrismaService automatically injects userId into every query for tenant-scoped models. Admin users bypass this filter unless impersonating via x-customer-context.

Critical Rule

Never manually filter by userId in services for tenant models. The middleware handles this automatically.

Tenant-Scoped Models (50)

These models have a userId field and are automatically filtered per tenant.

Devices & Configuration

ModelDescription
DeviceRegistered devices
DeviceConfigurationPer-device configuration
DeviceMetricsPerformance metrics (CPU, RAM, uptime)
DeviceMonitoringMonitoring data & alerts
DeviceSettingsDisplay & operation settings

Synagogue & Content

ModelDescription
TfilaTimePrayer times
GeneralMessageMessages displayed to congregants
HanzchMemorial (yahrzeit) entries
ShiorTorah classes
OlieLatoraTorah reading assignments
ScreenTimerContent display scheduling
AliyaNotificationAliyah notifications
DailyContentPreferenceDaily content preferences
HolidayTimesHoliday times
SynagogueSynagogue profile
NotificationGeneral notifications
NotificationPreferencesNotification preferences

WhatsApp & Communication

ModelDescription
WhatsAppMessageWhatsApp messages
WhatsAppConfigWhatsApp connection settings
ScheduledMessageScheduled messages
IncomingMessageIncoming messages
AutoResponseRuleAuto-response rules
WhatsAppContactAliasContact aliases
EmailConfigEmail SMTP configuration
SmsConfigSMS configuration
NotificationLogNotification delivery log

Alerts & Monitoring

ModelDescription
AlertRuleAutomated alert rules
NotificationHistoryNotification history
NetworkMetricsNetwork metrics

Analytics & AI

ModelDescription
MLModelMachine learning model definitions
TrainedModelTrained ML models
AnomalyDetectionAnomaly detection records
BehavioralAnalyticsBehavioral analytics data
SecurityAnalysisSecurity analysis results
SmartMaintenanceSmart maintenance recommendations
AdvancedReportAdvanced reports

System & Operations

ModelDescription
SoftwareUpdateSoftware updates
UpdateStatusUpdate statuses
CommandHistoryCommand history
ConfigurationBackupConfiguration backups
WebhookEndpointWebhook endpoints
WebhookLogWebhook delivery log
BatchCommandBatch commands
BatchCommandResultBatch command results
EnhancedMqttSessionMQTT sessions
UploadAssetUploaded assets
SystemConfigurationSystem configuration
SystemBackupSystem backups

Security & Audit

ModelDescription
SecurityIncidentSecurity incidents
SecurityEventSecurity events
SuspiciousIpSuspicious IP addresses
SystemIssueSystem issues
SystemMetricSampleMetric samples
SystemServiceStatusService status records
AuditLogAudit trail

Global Models (21)

These models are not filtered by tenant. They either have no userId field or serve cross-tenant purposes.

ModelDescription
UserUser accounts & authentication
DeviceCertificateDevice SSL certificates
DeviceTokenPush notification tokens
LicenseLicense management
RemoteInstallationRemote installation records
MqttTopicMQTT topic definitions
MqttConnectionMQTT connection records
MqttTopicStateMQTT topic state
MlPredictionML prediction results
AnomalyDetected anomalies
AlertSystem alerts
DetectedPatternDetected patterns
DetectedAnomalyDetected anomaly records
MaintenancePredictionMaintenance predictions
MaintenanceModeMaintenance mode state
TelemetryDataTelemetry data points
HealthCheckHistoryHealth check history

Working with the Schema

Regenerate Client

After editing schema.prisma:

npx prisma generate

Push Schema Changes (Dev Only)

npx prisma db push

Visual Database Browser

npx prisma studio

Key Conventions

  • All tenant models include a userId: String field
  • Timestamps: createdAt / updatedAt with @default(now()) and @updatedAt
  • IDs: @id @default(auto()) @map("_id") @db.ObjectId
  • Relations use @db.ObjectId for MongoDB ObjectId fields