Database Schema
Prisma database schema for Infinibay - models, relationships, and data architecture
Database Schema
Prisma 6 ORM with PostgreSQL 12+. Type-safe queries, migrations, model lifecycle hooks.
Core Models
User
model User {
id String @id @default(uuid())
email String @unique
password String // bcrypt hashed
firstName String
lastName String
role UserRole @default(USER)
deleted Boolean @default(false)
}
Machine (VM)
model Machine {
id String @id @default(uuid())
name String
status MachineStatus
departmentId String
userId String // Owner
osType String
cpus Int
memoryMB Int
diskGB Int
}
Department
model Department {
id String @id @default(uuid())
name String @unique
description String?
machines Machine[]
}
Node
Libvirt node running VMs. Contains host info, capacity.
ISO
ISO images for OS installation. Stored at /var/lib/libvirt/images/.
VM Configuration Models
MachineConfiguration
Hardware config: CPU, RAM, disk, GPU passthrough, network interfaces.
MachineTemplate
VM templates for quick deployment. OS-specific with preconfigured resources.
MachineTemplateCategory
Template organization (Windows, Linux, Development, Production).
Application Models
Application
Application catalog with name, version, installer info.
MachineApplication
Links Machine ↔ Application. Tracks installation status.
ApplicationUsage
Tracks application usage: launch count, total duration, last used.
Monitoring & Health Models
SystemMetrics
CPU, memory, disk, network usage collected via VirtIO socket. 7-day retention.
ProcessSnapshot
Running processes on guest VMs. Updated via guest agent.
PortUsage
Network ports in use on VMs.
BlockedConnection
Firewall-blocked connections. Suggests rules for commonly blocked traffic.
WindowsService
Windows services status on guest VMs.
VMHealthSnapshot
Health check results: disk space, updates, defender status, resource usage.
VMHealthAlert
Alerts generated from health checks (LOW/MEDIUM/HIGH/CRITICAL severity).
Maintenance Models
MaintenanceTask
Scheduled maintenance: disk cleanup, defrag, Windows updates, Defender scans.
MaintenanceHistory
Execution history for maintenance tasks.
Firewall Models
FirewallRuleSet
Container for firewall rules (per-VM or per-department).
FirewallRule
Individual firewall rule: action (ACCEPT/DROP), direction, protocol, ports, IP ranges.
Recommendation Model
Recommendation
Automated recommendations based on health data, usage patterns, performance metrics.
System Models
ErrorLog
Server-side error logging with stack traces, severity.
BackgroundTaskLog
Background task execution logs (health checks, maintenance).
AppSettings
System-wide configuration (maintenance schedule, alert thresholds).
PendingCommand
Commands queued for VM execution (restart, config changes).
Notification
User notifications for alerts, task completion, system events.
Relationships
- User → Machine (1:N, owner)
- Department → Machine (1:N)
- Machine → FirewallRuleSet (1:1)
- Machine → SystemMetrics (1:N)
- Machine → MaintenanceTask (1:N)
- Machine → VMHealthSnapshot (1:N)
- Machine → Snapshot (1:N)
- Application → MachineApplication (1:N)
- FirewallRuleSet → FirewallRule (1:N)
Cascade deletes configured for dependent resources.
Indexing
Indexes on: id (primary keys), email (User), name (Machine, Department), status (Machine), timestamp (metrics, logs), foreign keys.
Enums
UserRole: USER, ADMIN, SUPER_ADMIN MachineStatus: RUNNING, STOPPED, PAUSED, SUSPENDED, ERROR MaintenanceType: DISK_CLEANUP, DEFRAG, WINDOWS_UPDATE, DEFENDER_SCAN AlertSeverity: LOW, MEDIUM, HIGH, CRITICAL FirewallAction: ACCEPT, DROP FirewallDirection: INBOUND, OUTBOUND FirewallProtocol: TCP, UDP, ICMP, ALL
Migrations
Run migrations: npm run db:migrate (backend directory)
Generate Prisma client: npm run db:generate
Seed database: npm run db:seed
Schema location: backend/prisma/schema.prisma
For API usage, see graphql-api.md. For architecture details, see architecture.md.