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
| import {
pgTable,
text,
timestamp,
uuid,
boolean,
integer,
uniqueIndex,
} from "drizzle-orm/pg-core";
export const users = pgTable("users", {
id: uuid("id").primaryKey().defaultRandom(),
username: text("username").notNull().unique(),
email: text("email").notNull().unique(),
displayName: text("display_name"),
passwordHash: text("password_hash").notNull(),
avatarUrl: text("avatar_url"),
bio: text("bio"),
createdAt: timestamp("created_at").defaultNow().notNull(),
updatedAt: timestamp("updated_at").defaultNow().notNull(),
});
export const repositories = pgTable(
"repositories",
{
id: uuid("id").primaryKey().defaultRandom(),
name: text("name").notNull(),
ownerId: uuid("owner_id")
.notNull()
.references(() => users.id),
description: text("description"),
isPrivate: boolean("is_private").default(false).notNull(),
defaultBranch: text("default_branch").default("main").notNull(),
diskPath: text("disk_path").notNull(),
createdAt: timestamp("created_at").defaultNow().notNull(),
updatedAt: timestamp("updated_at").defaultNow().notNull(),
pushedAt: timestamp("pushed_at"),
starCount: integer("star_count").default(0).notNull(),
forkCount: integer("fork_count").default(0).notNull(),
},
(table) => [uniqueIndex("repos_owner_name").on(table.ownerId, table.name)]
);
export const sshKeys = pgTable("ssh_keys", {
id: uuid("id").primaryKey().defaultRandom(),
userId: uuid("user_id")
.notNull()
.references(() => users.id),
title: text("title").notNull(),
fingerprint: text("fingerprint").notNull(),
publicKey: text("public_key").notNull(),
lastUsedAt: timestamp("last_used_at"),
createdAt: timestamp("created_at").defaultNow().notNull(),
});
export type User = typeof users.$inferSelect;
export type NewUser = typeof users.$inferInsert;
export type Repository = typeof repositories.$inferSelect;
export type NewRepository = typeof repositories.$inferInsert;
|