Files
cfw-autumn/shared/models/cusProductModels/cusProductTable.ts
2025-06-04 07:24:05 +01:00

79 lines
2.4 KiB
TypeScript

import {
pgTable,
text,
numeric,
jsonb,
boolean,
foreignKey,
} from "drizzle-orm/pg-core";
import { freeTrials } from "../productModels/freeTrialModels/freeTrialTable.js";
import { customers } from "../cusModels/cusTable.js";
import { products } from "../productModels/productTable.js";
import { collatePgColumn } from "../../db/utils.js";
import { entities } from "../cusModels/entityModels/entityTable.js";
export type CustomerProductProcessor = {
type: "stripe";
id: string;
};
export const customerProducts = pgTable(
"customer_products",
{
id: text().primaryKey().notNull(),
internal_customer_id: text("internal_customer_id").notNull(),
internal_product_id: text("internal_product_id").notNull(),
internal_entity_id: text("internal_entity_id"),
created_at: numeric({ mode: "number" }),
status: text(),
processor: jsonb().$type<CustomerProductProcessor>(),
canceled_at: numeric({ mode: "number" }),
ended_at: numeric({ mode: "number" }),
starts_at: numeric({ mode: "number" }),
options: jsonb().array(),
product_id: text("product_id"),
free_trial_id: text("free_trial_id"),
trial_ends_at: numeric({ mode: "number" }),
collection_method: text("collection_method").default(
"charge_automatically",
),
subscription_ids: text("subscription_ids").array(),
scheduled_ids: text("scheduled_ids").array(),
quantity: numeric({ mode: "number" }).default(1),
is_custom: boolean("is_custom").default(false).notNull(),
// Optional...
customer_id: text("customer_id"),
entity_id: text("entity_id"),
api_version: numeric({ mode: "number" }),
},
(table) => [
foreignKey({
columns: [table.free_trial_id],
foreignColumns: [freeTrials.id],
name: "customer_products_free_trial_id_fkey",
}),
foreignKey({
columns: [table.internal_customer_id],
foreignColumns: [customers.internal_id],
name: "customer_products_internal_customer_id_fkey",
})
.onUpdate("cascade")
.onDelete("cascade"),
foreignKey({
columns: [table.internal_product_id],
foreignColumns: [products.internal_id],
name: "customer_products_internal_product_id_fkey",
}),
foreignKey({
columns: [table.internal_entity_id],
foreignColumns: [entities.internal_id],
name: "customer_products_internal_entity_id_fkey",
}).onDelete("set null"),
],
);
collatePgColumn(customerProducts.id, "C");