@chatman-media/storage 1.14.0 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -35,10 +35,15 @@ __export(exports_schema, {
35
35
  skillOutcomes: () => skillOutcomes,
36
36
  shadowEvaluations: () => shadowEvaluations,
37
37
  sessions: () => sessions,
38
+ serviceCatalogItems: () => serviceCatalogItems,
38
39
  selfPlayMatches: () => selfPlayMatches,
39
40
  referralCodes: () => referralCodes,
40
41
  questionnaireTokens: () => questionnaireTokens,
41
42
  passwordResets: () => passwordResets,
43
+ partners: () => partners,
44
+ partnerSettlements: () => partnerSettlements,
45
+ partnerServices: () => partnerServices,
46
+ partnerDeals: () => partnerDeals,
42
47
  pairwiseMatches: () => pairwiseMatches,
43
48
  outreachCampaigns: () => outreachCampaigns,
44
49
  outreachCampaignLeads: () => outreachCampaignLeads,
@@ -3458,6 +3463,112 @@ var exchangeOrders = pgTable("exchange_orders", {
3458
3463
  index("idx_exchange_orders_tenant_created").on(t.tenantId, t.createdAt),
3459
3464
  index("idx_exchange_orders_awaiting_ttl").on(t.status, t.rateExpiresAt).where(sql`status = 'awaiting_payment'`)
3460
3465
  ]);
3466
+ var partners = pgTable("partners", {
3467
+ id: serial("id").primaryKey(),
3468
+ tenantId: integer("tenant_id").notNull().references(() => tenants.id, { onDelete: "cascade" }),
3469
+ name: text("name").notNull(),
3470
+ status: text("status").notNull().default("active"),
3471
+ contactName: text("contact_name"),
3472
+ contactChannel: text("contact_channel"),
3473
+ contactValue: text("contact_value"),
3474
+ defaultCommissionPct: doublePrecision("default_commission_pct").notNull().default(0),
3475
+ settlementCurrency: text("settlement_currency").notNull().default("THB"),
3476
+ notes: text("notes"),
3477
+ createdAt: integer("created_at").notNull().default(epochNow()),
3478
+ updatedAt: integer("updated_at").notNull().default(epochNow())
3479
+ }, (t) => [
3480
+ check("partners_status_check", sql`${t.status} IN ('active','archived')`),
3481
+ index("idx_partners_tenant_status").on(t.tenantId, t.status)
3482
+ ]);
3483
+ var partnerServices = pgTable("partner_services", {
3484
+ id: serial("id").primaryKey(),
3485
+ tenantId: integer("tenant_id").notNull().references(() => tenants.id, { onDelete: "cascade" }),
3486
+ partnerId: integer("partner_id").notNull().references(() => partners.id, { onDelete: "cascade" }),
3487
+ name: text("name").notNull(),
3488
+ category: text("category"),
3489
+ funnelId: integer("funnel_id").references(() => funnels.id, { onDelete: "set null" }),
3490
+ stageDefinitionId: integer("stage_definition_id").references(() => stageDefinitions.id, { onDelete: "set null" }),
3491
+ commissionPct: doublePrecision("commission_pct").notNull().default(0),
3492
+ isActive: boolean("is_active").notNull().default(true),
3493
+ notes: text("notes"),
3494
+ createdAt: integer("created_at").notNull().default(epochNow()),
3495
+ updatedAt: integer("updated_at").notNull().default(epochNow())
3496
+ }, (t) => [
3497
+ uniqueIndex("uniq_partner_services_name").on(t.tenantId, t.partnerId, t.name),
3498
+ index("idx_partner_services_tenant_active").on(t.tenantId, t.isActive),
3499
+ index("idx_partner_services_stage").on(t.tenantId, t.stageDefinitionId)
3500
+ ]);
3501
+ var serviceCatalogItems = pgTable("service_catalog_items", {
3502
+ id: serial("id").primaryKey(),
3503
+ tenantId: integer("tenant_id").notNull().references(() => tenants.id, { onDelete: "cascade" }),
3504
+ slug: text("slug").notNull(),
3505
+ name: text("name").notNull(),
3506
+ category: text("category"),
3507
+ description: text("description"),
3508
+ routeType: text("route_type").notNull().default("manual"),
3509
+ funnelId: integer("funnel_id").references(() => funnels.id, { onDelete: "set null" }),
3510
+ partnerServiceId: integer("partner_service_id").references(() => partnerServices.id, { onDelete: "set null" }),
3511
+ webhookUrl: text("webhook_url"),
3512
+ isActive: boolean("is_active").notNull().default(true),
3513
+ sortOrder: integer("sort_order").notNull().default(0),
3514
+ metadataJson: text("metadata_json").notNull().default("{}"),
3515
+ createdAt: integer("created_at").notNull().default(epochNow()),
3516
+ updatedAt: integer("updated_at").notNull().default(epochNow())
3517
+ }, (t) => [
3518
+ check("service_catalog_route_type_check", sql`${t.routeType} IN ('manual','funnel','partner_service','webhook')`),
3519
+ uniqueIndex("uniq_service_catalog_slug").on(t.tenantId, t.slug),
3520
+ index("idx_service_catalog_tenant_active").on(t.tenantId, t.isActive, t.sortOrder),
3521
+ index("idx_service_catalog_funnel").on(t.tenantId, t.funnelId),
3522
+ index("idx_service_catalog_partner_service").on(t.tenantId, t.partnerServiceId)
3523
+ ]);
3524
+ var partnerDeals = pgTable("partner_deals", {
3525
+ id: serial("id").primaryKey(),
3526
+ tenantId: integer("tenant_id").notNull().references(() => tenants.id, { onDelete: "cascade" }),
3527
+ partnerId: integer("partner_id").references(() => partners.id, { onDelete: "set null" }),
3528
+ serviceId: integer("service_id").references(() => partnerServices.id, { onDelete: "set null" }),
3529
+ leadId: integer("lead_id").references(() => leads.id, { onDelete: "set null" }),
3530
+ stageDefinitionId: integer("stage_definition_id").references(() => stageDefinitions.id, { onDelete: "set null" }),
3531
+ status: text("status").notNull().default("sent"),
3532
+ handoffUrl: text("handoff_url"),
3533
+ handoffMode: text("handoff_mode").notNull().default("fire_and_forget"),
3534
+ grossAmount: doublePrecision("gross_amount"),
3535
+ currency: text("currency").notNull().default("THB"),
3536
+ commissionPct: doublePrecision("commission_pct").notNull().default(0),
3537
+ commissionAmount: doublePrecision("commission_amount"),
3538
+ proofJson: text("proof_json"),
3539
+ notes: text("notes"),
3540
+ sentAt: integer("sent_at"),
3541
+ acceptedAt: integer("accepted_at"),
3542
+ completedAt: integer("completed_at"),
3543
+ cancelledAt: integer("cancelled_at"),
3544
+ settledAt: integer("settled_at"),
3545
+ createdAt: integer("created_at").notNull().default(epochNow()),
3546
+ updatedAt: integer("updated_at").notNull().default(epochNow())
3547
+ }, (t) => [
3548
+ check("partner_deals_status_check", sql`${t.status} IN ('sent','accepted','rejected','completed','cancelled','disputed','settled')`),
3549
+ check("partner_deals_mode_check", sql`${t.handoffMode} IN ('fire_and_forget','await_callback')`),
3550
+ index("idx_partner_deals_tenant_status").on(t.tenantId, t.status),
3551
+ index("idx_partner_deals_partner").on(t.tenantId, t.partnerId),
3552
+ index("idx_partner_deals_lead").on(t.tenantId, t.leadId)
3553
+ ]);
3554
+ var partnerSettlements = pgTable("partner_settlements", {
3555
+ id: serial("id").primaryKey(),
3556
+ tenantId: integer("tenant_id").notNull().references(() => tenants.id, { onDelete: "cascade" }),
3557
+ partnerId: integer("partner_id").notNull().references(() => partners.id, { onDelete: "cascade" }),
3558
+ periodStart: integer("period_start").notNull(),
3559
+ periodEnd: integer("period_end").notNull(),
3560
+ status: text("status").notNull().default("draft"),
3561
+ totalGross: doublePrecision("total_gross").notNull().default(0),
3562
+ totalCommission: doublePrecision("total_commission").notNull().default(0),
3563
+ currency: text("currency").notNull().default("THB"),
3564
+ paidAt: integer("paid_at"),
3565
+ notes: text("notes"),
3566
+ createdAt: integer("created_at").notNull().default(epochNow()),
3567
+ updatedAt: integer("updated_at").notNull().default(epochNow())
3568
+ }, (t) => [
3569
+ check("partner_settlements_status_check", sql`${t.status} IN ('draft','issued','paid','cancelled')`),
3570
+ index("idx_partner_settlements_partner").on(t.tenantId, t.partnerId, t.periodStart)
3571
+ ]);
3461
3572
  // src/integration-helpers.ts
3462
3573
  import { readdirSync, readFileSync } from "node:fs";
3463
3574
  import { join } from "node:path";
@@ -5496,11 +5607,16 @@ export {
5496
5607
  skillOutcomes,
5497
5608
  shadowEvaluations,
5498
5609
  sessions,
5610
+ serviceCatalogItems,
5499
5611
  selfPlayMatches,
5500
5612
  exports_schema as schema,
5501
5613
  referralCodes,
5502
5614
  questionnaireTokens,
5503
5615
  passwordResets,
5616
+ partners,
5617
+ partnerSettlements,
5618
+ partnerServices,
5619
+ partnerDeals,
5504
5620
  pairwiseMatches,
5505
5621
  outreachCampaigns,
5506
5622
  outreachCampaignLeads,