c8f4b50ef3
All literal "team" tier-value references renamed to "family" across API routes, admin UI, OpenAPI schemas, and lib/tiers.ts. The DB enum value itself is renamed in place via ALTER TYPE ... RENAME VALUE (migration 0044) rather than drizzle-kit's auto-generated drop-and-recreate-the-enum migration, which would have failed against any existing row still holding 'team' — RENAME VALUE preserves existing data with no cast/backfill needed. Also adds STRIPE_PLAN.md — a full Stripe billing integration plan (Checkout+Portal, tier→Price mapping, admin billing dashboard, and a multi-user Family-group design since Family is meant to cover several accounts under one subscription, not one payer). Planning only, no Stripe code yet. v0.47.0
43 lines
975 B
TypeScript
43 lines
975 B
TypeScript
import { db } from "./client";
|
|
import { tierDefinitions } from "./schema";
|
|
|
|
async function seed() {
|
|
console.log("Seeding tier definitions...");
|
|
await db
|
|
.insert(tierDefinitions)
|
|
.values([
|
|
{
|
|
tier: "free",
|
|
maxRecipes: 50,
|
|
aiCallsPerMonth: 10,
|
|
storageMb: 500,
|
|
maxPublicRecipes: 5,
|
|
},
|
|
{
|
|
tier: "pro",
|
|
maxRecipes: 99999,
|
|
aiCallsPerMonth: 500,
|
|
storageMb: 10000,
|
|
maxPublicRecipes: 99999,
|
|
},
|
|
{
|
|
tier: "family",
|
|
// -1 is the actual "no cap" sentinel (see lib/tiers.ts UNLIMITED) —
|
|
// pro uses large-but-finite numbers instead; family is genuinely unlimited.
|
|
maxRecipes: -1,
|
|
aiCallsPerMonth: 2000,
|
|
storageMb: 50000,
|
|
maxPublicRecipes: -1,
|
|
},
|
|
])
|
|
.onConflictDoNothing();
|
|
|
|
console.log("Seed complete.");
|
|
process.exit(0);
|
|
}
|
|
|
|
seed().catch((err) => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
});
|