| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- 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())),
- )
- })
- }
|