Files
cfw-autumn/shared/models/cusProductModels/cusEntModels/rolloverModels/rolloverTable.ts
2026-03-30 17:00:49 +01:00

62 lines
1.6 KiB
TypeScript

import {
foreignKey,
index,
jsonb,
numeric,
pgTable,
text,
} from "drizzle-orm/pg-core";
import { z } from "zod/v4";
import { customerEntitlements } from "../cusEntTable.js";
export const EntityRolloverBalanceSchema = z.object({
id: z.string(),
balance: z.number(),
usage: z.number(),
});
export const RolloverSchema = z.object({
id: z.string(),
cus_ent_id: z.string(),
balance: z.number(),
usage: z.number().default(0),
expires_at: z.number().nullable(),
entities: z.record(z.string(), EntityRolloverBalanceSchema),
});
export const rollovers = pgTable(
"rollovers",
{
id: text("id").primaryKey().notNull(),
cus_ent_id: text("cus_ent_id").notNull(),
balance: numeric({ mode: "number" }).notNull(),
expires_at: numeric({ mode: "number" }),
usage: numeric({ mode: "number" }).default(0).notNull(),
entities: jsonb("entities")
.$type<Record<string, EntityRolloverBalance>>()
.notNull()
.default({}),
},
(table) => [
foreignKey({
columns: [table.cus_ent_id],
foreignColumns: [customerEntitlements.id],
name: "rollover_cus_ent_id_fkey",
})
.onUpdate("cascade")
.onDelete("cascade"),
index("idx_rollovers_cus_ent_id").on(table.cus_ent_id),
index("idx_rollovers_cus_ent_expires").on(
table.cus_ent_id,
table.expires_at,
),
],
).enableRLS();
export type Rollover = z.infer<typeof RolloverSchema>;
export type InsertRollover = typeof rollovers.$inferInsert;
export type EntityRolloverBalance = z.infer<typeof EntityRolloverBalanceSchema>;
export type DbRollover = typeof rollovers.$inferSelect;
export type InsertDbRollover = typeof rollovers.$inferInsert;