-
Notifications
You must be signed in to change notification settings - Fork 14
Expand file tree
/
Copy pathschema.ts
More file actions
88 lines (80 loc) · 2.32 KB
/
schema.ts
File metadata and controls
88 lines (80 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import { sql } from "drizzle-orm";
import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
const id = () =>
text()
.primaryKey()
.$defaultFn(() => crypto.randomUUID());
const createdAt = () => text().notNull().default(sql`(CURRENT_TIMESTAMP)`);
const updatedAt = () => text().notNull().default(sql`(CURRENT_TIMESTAMP)`);
export const repositories = sqliteTable("repositories", {
id: id(),
path: text().notNull().unique(),
remoteUrl: text(),
lastAccessedAt: text(),
createdAt: createdAt(),
updatedAt: updatedAt(),
});
export const workspaces = sqliteTable(
"workspaces",
{
id: id(),
taskId: text().notNull().unique(),
repositoryId: text().references(() => repositories.id, {
onDelete: "set null",
}),
mode: text({ enum: ["cloud", "local", "worktree"] }).notNull(),
pinnedAt: text(),
lastViewedAt: text(),
lastActivityAt: text(),
createdAt: createdAt(),
updatedAt: updatedAt(),
},
(t) => [index("workspaces_repository_id_idx").on(t.repositoryId)],
);
export const worktrees = sqliteTable("worktrees", {
id: id(),
workspaceId: text()
.notNull()
.unique()
.references(() => workspaces.id, { onDelete: "cascade" }),
name: text().notNull(),
path: text().notNull(),
createdAt: createdAt(),
updatedAt: updatedAt(),
});
export const archives = sqliteTable("archives", {
id: id(),
workspaceId: text()
.notNull()
.unique()
.references(() => workspaces.id, { onDelete: "cascade" }),
branchName: text(),
checkpointId: text(),
archivedAt: text().notNull(),
createdAt: createdAt(),
updatedAt: updatedAt(),
});
export const suspensions = sqliteTable("suspensions", {
id: id(),
workspaceId: text()
.notNull()
.unique()
.references(() => workspaces.id, { onDelete: "cascade" }),
branchName: text(),
checkpointId: text(),
suspendedAt: text().notNull(),
reason: text({
enum: ["max_worktrees", "inactivity", "manual"],
}).notNull(),
createdAt: createdAt(),
updatedAt: updatedAt(),
});
export const authSessions = sqliteTable("auth_sessions", {
id: integer().primaryKey(),
refreshTokenEncrypted: text().notNull(),
cloudRegion: text({ enum: ["us", "eu", "dev"] }).notNull(),
selectedProjectId: integer(),
scopeVersion: integer().notNull(),
createdAt: createdAt(),
updatedAt: updatedAt(),
});