summaryrefslogtreecommitdiffhomepage
path: root/packages/cloud/core/src/schema/billing.sql.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cloud/core/src/schema/billing.sql.ts')
-rw-r--r--packages/cloud/core/src/schema/billing.sql.ts53
1 files changed, 53 insertions, 0 deletions
diff --git a/packages/cloud/core/src/schema/billing.sql.ts b/packages/cloud/core/src/schema/billing.sql.ts
new file mode 100644
index 000000000..5bec4e900
--- /dev/null
+++ b/packages/cloud/core/src/schema/billing.sql.ts
@@ -0,0 +1,53 @@
+import { bigint, boolean, int, mysqlTable, uniqueIndex, varchar } from "drizzle-orm/mysql-core"
+import { timestamps, utc, workspaceColumns } from "../drizzle/types"
+import { workspaceIndexes } from "./workspace.sql"
+
+export const BillingTable = mysqlTable(
+ "billing",
+ {
+ ...workspaceColumns,
+ ...timestamps,
+ customerID: varchar("customer_id", { length: 255 }),
+ paymentMethodID: varchar("payment_method_id", { length: 255 }),
+ paymentMethodLast4: varchar("payment_method_last4", { length: 4 }),
+ balance: bigint("balance", { mode: "number" }).notNull(),
+ monthlyLimit: int("monthly_limit"),
+ monthlyUsage: bigint("monthly_usage", { mode: "number" }),
+ timeMonthlyUsageUpdated: utc("time_monthly_usage_updated"),
+ reload: boolean("reload"),
+ reloadError: varchar("reload_error", { length: 255 }),
+ timeReloadError: utc("time_reload_error"),
+ timeReloadLockedTill: utc("time_reload_locked_till"),
+ },
+ (table) => [...workspaceIndexes(table), uniqueIndex("global_customer_id").on(table.customerID)],
+)
+
+export const PaymentTable = mysqlTable(
+ "payment",
+ {
+ ...workspaceColumns,
+ ...timestamps,
+ customerID: varchar("customer_id", { length: 255 }),
+ paymentID: varchar("payment_id", { length: 255 }),
+ amount: bigint("amount", { mode: "number" }).notNull(),
+ },
+ (table) => [...workspaceIndexes(table)],
+)
+
+export const UsageTable = mysqlTable(
+ "usage",
+ {
+ ...workspaceColumns,
+ ...timestamps,
+ model: varchar("model", { length: 255 }).notNull(),
+ provider: varchar("provider", { length: 255 }).notNull(),
+ inputTokens: int("input_tokens").notNull(),
+ outputTokens: int("output_tokens").notNull(),
+ reasoningTokens: int("reasoning_tokens"),
+ cacheReadTokens: int("cache_read_tokens"),
+ cacheWrite5mTokens: int("cache_write_5m_tokens"),
+ cacheWrite1hTokens: int("cache_write_1h_tokens"),
+ cost: bigint("cost", { mode: "number" }).notNull(),
+ },
+ (table) => [...workspaceIndexes(table)],
+)