DB Schema
Database Schema (Prisma)
Datasource & Generator
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
Models
GitProjectTemplate
Represents a reusable GitLab project template.
model GitProjectTemplate {
gitlab_project_id Int @id @unique
name String
repo_link String
projects GitProject[] @relation("TemplateToProjects")
}
GitGroup
Defines a Git group with a composite unique constraint.
model GitGroup {
id Int @id @default(autoincrement())
ref_type String
ref_id Int
projects GitProject[]
@@unique([ref_type, ref_id], name: "ref_type_ref_id")
}
GitProject
Maps a GitLab project to both a group and a template.
model GitProject {
id Int @id @default(autoincrement())
gitgroup_id Int
gitlab_project_id Int
name String
gitprojecttemplate_id Int
gitGroup GitGroup @relation(fields: [gitgroup_id], references: [id])
template GitProjectTemplate @relation("TemplateToProjects", fields: [gitprojecttemplate_id], references: [gitlab_project_id])
@@index([gitgroup_id], map: "GitProject_gitgroup_id_fkey")
@@index([gitprojecttemplate_id], map: "GitProject_gitprojecttemplate_id_fkey")
}
VM_Hosts
Stores metadata about VM host machines.
model VM_Hosts {
id Int @id @default(autoincrement())
ip_address String
status String
created_at DateTime @default(now())
workspaces VM_Workspace[]
}
VM_Workspace
Represents virtual machine workspaces assigned to users/projects.
model VM_Workspace {
id Int @id @default(autoincrement())
host_id Int
ip_address String
status String
user_email String
ref_type String
ref_id Int
created_at DateTime @default(now())
vm_id String?
dev_sshkey String? @db.Text
master_sshkey String @db.Text
vm_jobs VM_Jobs[]
host VM_Hosts @relation(fields: [host_id], references: [id])
@@index([host_id], map: "VM_Workspace_host_id_fkey")
}
VM_Jobs
Tracks provisioning or operational jobs against VMs.
model VM_Jobs {
id Int @id @default(autoincrement())
vm_id Int
status String
vm VM_Workspace @relation(fields: [vm_id], references: [id])
@@index([vm_id], map: "VM_Jobs_vm_id_fkey")
}
AgentTasks
Represents task queue items handled by provisioning agents.
model AgentTasks {
id Int @id @default(autoincrement())
type String
project_id Int
ref_type String
ref_id Int
status String
trace_id String
retry_count Int @default(0)
created_at DateTime @default(now())
loggerServiceName String
tracerServiceName String
@@index([ref_type, ref_id])
@@index([trace_id])
@@index([ref_id], map: "Tasks_ref_id_fkey")
@@index([project_id])
}
ArchivedAgentTasks
Archive table mirroring AgentTasks structure.
model ArchivedAgentTasks {
id Int @id @default(autoincrement())
type String
project_id Int
ref_type String
ref_id Int
status String
trace_id String
retry_count Int @default(0)
created_at DateTime @default(now())
loggerServiceName String
tracerServiceName String
@@index([ref_type, ref_id])
@@index([trace_id])
@@index([project_id])
@@index([ref_id], map: "ArchivedTasks_ref_id_fkey")
}
Shared_Hosts
Hosts available for sharing across users/workspaces.
model Shared_Hosts {
id Int @id @default(autoincrement())
ip_address String
status String
created_at DateTime @default(now())
}
AgentTaskOutput
Captures logs or outputs from agent tasks.
model AgentTaskOutput {
id Int @id @default(autoincrement())
refType String
refId Int
output String @db.Text
updatedAt DateTime @updatedAt
createdAt DateTime @default(now())
}