diff --git a/server/db/schema.ts b/server/db/schema.ts index 1d90b290..4880ba77 100644 --- a/server/db/schema.ts +++ b/server/db/schema.ts @@ -1,12 +1,61 @@ -import { InferSelectModel } from "drizzle-orm"; import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core"; +import { InferSelectModel } from "drizzle-orm"; -export const proxyTargets = sqliteTable("proxyTargets", { - id: text("id").unique().notNull().primaryKey(), - target: text("target").notNull(), - rule: text("rule").notNull(), - entryPoint: text("entryPoint").notNull(), - enabled: integer("enabled", { mode: "boolean" }).notNull().default(true), +// Org table +export const org = sqliteTable("org", { + orgId: integer("orgId").primaryKey({ autoIncrement: true }), + name: text("name").notNull(), }); -export type SelectProxyTargets = InferSelectModel; +// Users table +export const users = sqliteTable("users", { + uid: integer("uid").primaryKey({ autoIncrement: true }), + orgId: integer("orgId").references(() => org.orgId), + name: text("name"), + email: text("email"), + groups: text("groups"), +}); + +// Sites table +export const sites = sqliteTable("sites", { + siteId: integer("siteId").primaryKey({ autoIncrement: true }), + orgId: integer("orgId").references(() => org.orgId), + name: text("name"), + autoSubdomain: text("autoSubdomain"), + pubKey: integer("pubKey"), + subnet: text("subnet"), + exitNode: integer("exitNode").references(() => exitNodes.exitNodeId), +}); + +// Resources table +export const resources = sqliteTable("resources", { + resourceId: integer("resourceId").primaryKey({ autoIncrement: true }), + siteId: integer("siteId").references(() => sites.siteId), + name: text("name"), + targetIp: text("targetIp"), + method: text("method"), + port: integer("port"), + proto: text("proto"), +}); + +// Exit Nodes table +export const exitNodes = sqliteTable("exitNodes", { + exitNodeId: integer("exitNodeId").primaryKey({ autoIncrement: true }), + name: text("name"), + address: integer("address"), +}); + +// Routes table +export const routes = sqliteTable("routes", { + routeId: integer("routeId").primaryKey({ autoIncrement: true }), + subnet: integer("subnet"), + exitNodeId: integer("exitNodeId").references(() => exitNodes.exitNodeId), +}); + +// Define the model types for type inference +export type Org = InferSelectModel; +export type User = InferSelectModel; +export type Site = InferSelectModel; +export type Resource = InferSelectModel; +export type ExitNode = InferSelectModel; +export type Route = InferSelectModel;