mirror of
https://github.com/aljazceru/opencode.git
synced 2026-02-09 10:04:32 +01:00
wip: zen
This commit is contained in:
@@ -8,6 +8,7 @@ export namespace Identifier {
|
||||
key: "key",
|
||||
model: "mod",
|
||||
payment: "pay",
|
||||
provider: "prv",
|
||||
usage: "usg",
|
||||
user: "usr",
|
||||
workspace: "wrk",
|
||||
|
||||
49
packages/console/core/src/provider.ts
Normal file
49
packages/console/core/src/provider.ts
Normal 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()))),
|
||||
),
|
||||
)
|
||||
}
|
||||
14
packages/console/core/src/schema/provider.sql.ts
Normal file
14
packages/console/core/src/schema/provider.sql.ts
Normal 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)],
|
||||
)
|
||||
Reference in New Issue
Block a user