This commit is contained in:
Frank
2025-10-08 13:31:12 -04:00
parent 1d621260ff
commit b168bfe40d
9 changed files with 1233 additions and 0 deletions

View File

@@ -8,6 +8,7 @@ export namespace Identifier {
key: "key",
model: "mod",
payment: "pay",
provider: "prv",
usage: "usg",
user: "usr",
workspace: "wrk",

View File

@@ -0,0 +1,49 @@
import { z } from "zod"
import { fn } from "./util/fn"
import { Actor } from "./actor"
import { and, Database, eq, isNull } from "./drizzle"
import { Identifier } from "./identifier"
import { ProviderTable } from "./schema/provider.sql"
export namespace Provider {
export const list = fn(z.void(), () =>
Database.use((tx) =>
tx
.select()
.from(ProviderTable)
.where(and(eq(ProviderTable.workspaceID, Actor.workspace()), isNull(ProviderTable.timeDeleted))),
),
)
export const create = fn(
z.object({
provider: z.string().min(1).max(64),
credentials: z.string(),
}),
({ provider, credentials }) =>
Database.use((tx) =>
tx
.insert(ProviderTable)
.values({
id: Identifier.create("provider"),
workspaceID: Actor.workspace(),
provider,
credentials,
})
.onDuplicateKeyUpdate({
set: {
credentials,
timeDeleted: null,
},
}),
),
)
export const remove = fn(z.object({ provider: z.string() }), ({ provider }) =>
Database.transaction((tx) =>
tx
.delete(ProviderTable)
.where(and(eq(ProviderTable.provider, provider), eq(ProviderTable.workspaceID, Actor.workspace()))),
),
)
}

View File

@@ -0,0 +1,14 @@
import { mysqlTable, text, uniqueIndex, varchar } from "drizzle-orm/mysql-core"
import { timestamps, workspaceColumns } from "../drizzle/types"
import { workspaceIndexes } from "./workspace.sql"
export const ProviderTable = mysqlTable(
"provider",
{
...workspaceColumns,
...timestamps,
provider: varchar("provider", { length: 64 }).notNull(),
credentials: text("credentials").notNull(),
},
(table) => [...workspaceIndexes(table), uniqueIndex("workspace_provider").on(table.workspaceID, table.provider)],
)