Files
opencode/packages/console/core/src/schema/user.sql.ts
2026-01-06 23:34:12 -05:00

36 lines
1.4 KiB
TypeScript

import { mysqlTable, uniqueIndex, varchar, int, mysqlEnum, index, bigint } from "drizzle-orm/mysql-core"
import { timestamps, ulid, utc, workspaceColumns } from "../drizzle/types"
import { workspaceIndexes } from "./workspace.sql"
export const UserRole = ["admin", "member"] as const
export const UserTable = mysqlTable(
"user",
{
...workspaceColumns,
...timestamps,
accountID: ulid("account_id"),
email: varchar("email", { length: 255 }),
name: varchar("name", { length: 255 }).notNull(),
timeSeen: utc("time_seen"),
color: int("color"),
role: mysqlEnum("role", UserRole).notNull(),
monthlyLimit: int("monthly_limit"),
monthlyUsage: bigint("monthly_usage", { mode: "number" }),
timeMonthlyUsageUpdated: utc("time_monthly_usage_updated"),
// subscription
timeSubscribed: utc("time_subscribed"),
subRecentUsage: bigint("sub_recent_usage", { mode: "number" }),
subMonthlyUsage: bigint("sub_monthly_usage", { mode: "number" }),
timeSubRecentUsageUpdated: utc("sub_time_recent_usage_updated"),
timeSubMonthlyUsageUpdated: utc("sub_time_monthly_usage_updated"),
},
(table) => [
...workspaceIndexes(table),
uniqueIndex("user_account_id").on(table.workspaceID, table.accountID),
uniqueIndex("user_email").on(table.workspaceID, table.email),
index("global_account_id").on(table.accountID),
index("global_email").on(table.email),
],
)