Spaces:
Paused
Paused
| import { | |
| type AnyPgColumn, | |
| index, | |
| jsonb, | |
| pgTable, | |
| text, | |
| timestamp, | |
| uuid, | |
| } from "drizzle-orm/pg-core"; | |
| import { companies } from "./companies.js"; | |
| import { issues } from "./issues.js"; | |
| import { projectWorkspaces } from "./project_workspaces.js"; | |
| import { projects } from "./projects.js"; | |
| export const executionWorkspaces = pgTable( | |
| "execution_workspaces", | |
| { | |
| id: uuid("id").primaryKey().defaultRandom(), | |
| companyId: uuid("company_id").notNull().references(() => companies.id), | |
| projectId: uuid("project_id").notNull().references(() => projects.id, { onDelete: "cascade" }), | |
| projectWorkspaceId: uuid("project_workspace_id").references(() => projectWorkspaces.id, { onDelete: "set null" }), | |
| sourceIssueId: uuid("source_issue_id").references((): AnyPgColumn => issues.id, { onDelete: "set null" }), | |
| mode: text("mode").notNull(), | |
| strategyType: text("strategy_type").notNull(), | |
| name: text("name").notNull(), | |
| status: text("status").notNull().default("active"), | |
| cwd: text("cwd"), | |
| repoUrl: text("repo_url"), | |
| baseRef: text("base_ref"), | |
| branchName: text("branch_name"), | |
| providerType: text("provider_type").notNull().default("local_fs"), | |
| providerRef: text("provider_ref"), | |
| derivedFromExecutionWorkspaceId: uuid("derived_from_execution_workspace_id") | |
| .references((): AnyPgColumn => executionWorkspaces.id, { onDelete: "set null" }), | |
| lastUsedAt: timestamp("last_used_at", { withTimezone: true }).notNull().defaultNow(), | |
| openedAt: timestamp("opened_at", { withTimezone: true }).notNull().defaultNow(), | |
| closedAt: timestamp("closed_at", { withTimezone: true }), | |
| cleanupEligibleAt: timestamp("cleanup_eligible_at", { withTimezone: true }), | |
| cleanupReason: text("cleanup_reason"), | |
| metadata: jsonb("metadata").$type<Record<string, unknown>>(), | |
| createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(), | |
| updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(), | |
| }, | |
| (table) => ({ | |
| companyProjectStatusIdx: index("execution_workspaces_company_project_status_idx").on( | |
| table.companyId, | |
| table.projectId, | |
| table.status, | |
| ), | |
| companyProjectWorkspaceStatusIdx: index("execution_workspaces_company_project_workspace_status_idx").on( | |
| table.companyId, | |
| table.projectWorkspaceId, | |
| table.status, | |
| ), | |
| companySourceIssueIdx: index("execution_workspaces_company_source_issue_idx").on( | |
| table.companyId, | |
| table.sourceIssueId, | |
| ), | |
| companyLastUsedIdx: index("execution_workspaces_company_last_used_idx").on( | |
| table.companyId, | |
| table.lastUsedAt, | |
| ), | |
| companyBranchIdx: index("execution_workspaces_company_branch_idx").on( | |
| table.companyId, | |
| table.branchName, | |
| ), | |
| }), | |
| ); | |