Skip to main content

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())
}