This commit is contained in:
Frank
2025-10-07 09:17:05 -04:00
parent cd3780b7f5
commit 6c99b833e4
8 changed files with 865 additions and 21 deletions

View File

@@ -1,5 +1,5 @@
import { Stripe } from "stripe"
import { and, Database, eq, sql } from "./drizzle"
import { Database, eq, sql } from "./drizzle"
import { BillingTable, PaymentTable, UsageTable } from "./schema/billing.sql"
import { Actor } from "./actor"
import { fn } from "./util/fn"

View File

@@ -1,4 +1,4 @@
import { mysqlTable, uniqueIndex, varchar, int, mysqlEnum, index } from "drizzle-orm/mysql-core"
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"
@@ -15,6 +15,9 @@ export const UserTable = mysqlTable(
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"),
},
(table) => [
...workspaceIndexes(table),

View File

@@ -174,18 +174,19 @@ export namespace User {
)
})
export const updateRole = fn(
export const update = fn(
z.object({
id: z.string(),
role: z.enum(UserRole),
monthlyLimit: z.number().nullable(),
}),
async ({ id, role }) => {
async ({ id, role, monthlyLimit }) => {
await assertAdmin()
if (role === "member") assertNotSelf(id)
return await Database.use((tx) =>
tx
.update(UserTable)
.set({ role })
.set({ role, monthlyLimit })
.where(and(eq(UserTable.id, id), eq(UserTable.workspaceID, Actor.workspace()))),
)
},