Buckets:
| import { z } from "zod" | |
| import { fn } from "./util/fn" | |
| import { Actor } from "./actor" | |
| import { Database } from "./drizzle" | |
| import { Identifier } from "./identifier" | |
| import { UserTable } from "./schema/user.sql" | |
| import { BillingTable } from "./schema/billing.sql" | |
| import { WorkspaceTable } from "./schema/workspace.sql" | |
| import { Key } from "./key" | |
| import { eq, sql } from "drizzle-orm" | |
| export namespace Workspace { | |
| export const create = fn( | |
| z.object({ | |
| name: z.string().min(1), | |
| }), | |
| async ({ name }) => { | |
| const account = Actor.assert("account") | |
| const workspaceID = Identifier.create("workspace") | |
| const userID = Identifier.create("user") | |
| await Database.transaction(async (tx) => { | |
| await tx.insert(WorkspaceTable).values({ | |
| id: workspaceID, | |
| name, | |
| }) | |
| await tx.insert(UserTable).values({ | |
| workspaceID, | |
| id: userID, | |
| accountID: account.properties.accountID, | |
| name: "", | |
| role: "admin", | |
| }) | |
| await tx.insert(BillingTable).values({ | |
| workspaceID, | |
| id: Identifier.create("billing"), | |
| balance: 0, | |
| }) | |
| }) | |
| await Actor.provide( | |
| "system", | |
| { | |
| workspaceID, | |
| }, | |
| () => Key.create({ userID, name: "Default API Key" }), | |
| ) | |
| return workspaceID | |
| }, | |
| ) | |
| export const update = fn( | |
| z.object({ | |
| name: z.string().min(1).max(255), | |
| }), | |
| async ({ name }) => { | |
| Actor.assertAdmin() | |
| const workspaceID = Actor.workspace() | |
| return await Database.use((tx) => | |
| tx | |
| .update(WorkspaceTable) | |
| .set({ | |
| name, | |
| }) | |
| .where(eq(WorkspaceTable.id, workspaceID)), | |
| ) | |
| }, | |
| ) | |
| export const remove = fn(z.void(), async () => { | |
| await Database.use((tx) => | |
| tx | |
| .update(WorkspaceTable) | |
| .set({ timeDeleted: sql`now()` }) | |
| .where(eq(WorkspaceTable.id, Actor.workspace())), | |
| ) | |
| }) | |
| } | |
Xet Storage Details
- Size:
- 2.01 kB
- Xet hash:
- 38d870f433f22d63683edfb994a3c81f2ba8cd67ddc4fa27efc9c23a2e39b528
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.