@fayz-ai/plugin-marketing 0.2.1 → 0.8.1

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.
Files changed (58) hide show
  1. package/README.md +2 -0
  2. package/dist/MarketingContext.d.ts +2 -0
  3. package/dist/MarketingContext.d.ts.map +1 -1
  4. package/dist/MarketingPage.d.ts.map +1 -1
  5. package/dist/data/blogEntities.d.ts +28 -0
  6. package/dist/data/blogEntities.d.ts.map +1 -0
  7. package/dist/data/contentSupabase.d.ts.map +1 -1
  8. package/dist/data/tables.d.ts +6 -0
  9. package/dist/data/tables.d.ts.map +1 -0
  10. package/dist/index.cjs +630 -127
  11. package/dist/index.cjs.map +1 -1
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +636 -133
  14. package/dist/index.js.map +1 -1
  15. package/dist/integrations/ranklayer/connectorDef.d.ts +3 -0
  16. package/dist/integrations/ranklayer/connectorDef.d.ts.map +1 -0
  17. package/dist/integrations/ranklayer/data/supabase.d.ts +16 -0
  18. package/dist/integrations/ranklayer/data/supabase.d.ts.map +1 -0
  19. package/dist/integrations/ranklayer/types.d.ts +16 -0
  20. package/dist/integrations/ranklayer/types.d.ts.map +1 -0
  21. package/dist/migrations/index.d.ts +9 -3
  22. package/dist/migrations/index.d.ts.map +1 -1
  23. package/dist/presets.d.ts +2 -0
  24. package/dist/presets.d.ts.map +1 -1
  25. package/dist/schema/index.d.ts +44 -44
  26. package/dist/schema/index.d.ts.map +1 -1
  27. package/dist/schema.cjs +9 -9
  28. package/dist/schema.cjs.map +1 -1
  29. package/dist/schema.js +9 -9
  30. package/dist/schema.js.map +1 -1
  31. package/dist/views/blog/BlogAdminView.d.ts +5 -0
  32. package/dist/views/blog/BlogAdminView.d.ts.map +1 -0
  33. package/dist/views/blog/BlogEntityForm.d.ts +11 -0
  34. package/dist/views/blog/BlogEntityForm.d.ts.map +1 -0
  35. package/dist/views/blog/useEntityCrud.d.ts +29 -0
  36. package/dist/views/blog/useEntityCrud.d.ts.map +1 -0
  37. package/package.json +8 -5
  38. package/src/MarketingContext.tsx +2 -0
  39. package/src/MarketingPage.tsx +22 -1
  40. package/src/data/blogEntities.tsx +91 -0
  41. package/src/data/contentSupabase.ts +18 -17
  42. package/src/data/tables.ts +7 -0
  43. package/src/index.ts +27 -3
  44. package/src/integrations/ranklayer/RANKLAYER.md +40 -0
  45. package/src/integrations/ranklayer/connectorDef.tsx +98 -0
  46. package/src/integrations/ranklayer/data/supabase.ts +106 -0
  47. package/src/integrations/ranklayer/types.ts +16 -0
  48. package/src/migrations/000_plg_rename.sql +15 -0
  49. package/src/migrations/001_content_planner.sql +48 -48
  50. package/src/migrations/002_multi_platform.sql +5 -5
  51. package/src/migrations/003_recording_ops.sql +10 -10
  52. package/src/migrations/004_ranklayer.sql +50 -0
  53. package/src/migrations/index.ts +152 -74
  54. package/src/presets.ts +5 -3
  55. package/src/schema/index.ts +9 -9
  56. package/src/views/blog/BlogAdminView.tsx +99 -0
  57. package/src/views/blog/BlogEntityForm.tsx +92 -0
  58. package/src/views/blog/useEntityCrud.ts +50 -0
@@ -0,0 +1,3 @@
1
+ import type { ConnectorDefinition } from '@fayz-ai/core';
2
+ export declare const ranklayerConnectorDef: ConnectorDefinition;
3
+ //# sourceMappingURL=connectorDef.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connectorDef.d.ts","sourceRoot":"","sources":["../../../src/integrations/ranklayer/connectorDef.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAmExD,eAAO,MAAM,qBAAqB,EAAE,mBAuBnC,CAAA"}
@@ -0,0 +1,16 @@
1
+ import type { TestConnectionResult } from '@fayz-ai/core';
2
+ import type { RankLayerIntegration, RankLayerSyncLogEntry } from '../types';
3
+ export declare function createRankLayerProvider(): {
4
+ getIntegration(): Promise<RankLayerIntegration | null>;
5
+ saveIntegration(values: {
6
+ apiKey: string;
7
+ siteDomain?: string;
8
+ }): Promise<RankLayerIntegration>;
9
+ disconnect(): Promise<void>;
10
+ testConnection(values: {
11
+ apiKey: string;
12
+ }): Promise<TestConnectionResult>;
13
+ getSyncLog(integrationId: string): Promise<RankLayerSyncLogEntry[]>;
14
+ };
15
+ export type RankLayerProvider = ReturnType<typeof createRankLayerProvider>;
16
+ //# sourceMappingURL=supabase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"supabase.d.ts","sourceRoot":"","sources":["../../../../src/integrations/ranklayer/data/supabase.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAqC3E,wBAAgB,uBAAuB;sBAEX,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;4BAW9B;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;kBAmBjF,OAAO,CAAC,IAAI,CAAC;2BAQJ;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC;8BAO/C,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;EAiB5E;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAA"}
@@ -0,0 +1,16 @@
1
+ export interface RankLayerIntegration {
2
+ id: string;
3
+ apiKey?: string;
4
+ siteDomain?: string;
5
+ active: boolean;
6
+ lastSyncAt?: string;
7
+ }
8
+ export interface RankLayerSyncLogEntry {
9
+ id: string;
10
+ createdAt: string;
11
+ status: 'success' | 'partial' | 'error';
12
+ message?: string;
13
+ fetched: number;
14
+ written: number;
15
+ }
16
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/integrations/ranklayer/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;IACvC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB"}
@@ -1,4 +1,10 @@
1
- export declare const MIGRATION_001_CONTENT_PLANNER = "-- Marketing Plugin: Content Planner\n-- Prefix: mkt_\n-- Social accounts + content plans + posts (Notion-style markdown pages).\n\nCREATE TABLE IF NOT EXISTS public.mkt_social_accounts (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES saas_core.tenants(id) ON DELETE CASCADE,\n name text NOT NULL,\n handle text,\n platform text NOT NULL DEFAULT 'instagram'\n CHECK (platform IN ('instagram', 'tiktok', 'youtube', 'facebook', 'linkedin')),\n is_active boolean NOT NULL DEFAULT true,\n created_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.mkt_social_accounts ENABLE ROW LEVEL SECURITY;\nCREATE INDEX IF NOT EXISTS idx_mkt_social_accounts_tenant ON public.mkt_social_accounts(tenant_id);\n\nCREATE TABLE IF NOT EXISTS public.mkt_content_plans (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES saas_core.tenants(id) ON DELETE CASCADE,\n account_id uuid NOT NULL REFERENCES public.mkt_social_accounts(id) ON DELETE CASCADE,\n name text NOT NULL,\n status text NOT NULL DEFAULT 'active'\n CHECK (status IN ('draft', 'active', 'archived')),\n weeks_count integer NOT NULL DEFAULT 8,\n start_date date,\n objective text,\n tone text,\n pillars jsonb NOT NULL DEFAULT '[]'::jsonb,\n formats jsonb NOT NULL DEFAULT '[]'::jsonb,\n weekly_frequency integer NOT NULL DEFAULT 3,\n brief_md text NOT NULL DEFAULT '',\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.mkt_content_plans ENABLE ROW LEVEL SECURITY;\nCREATE INDEX IF NOT EXISTS idx_mkt_content_plans_tenant ON public.mkt_content_plans(tenant_id);\nCREATE INDEX IF NOT EXISTS idx_mkt_content_plans_account ON public.mkt_content_plans(account_id);\n\nCREATE TABLE IF NOT EXISTS public.mkt_content_posts (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES saas_core.tenants(id) ON DELETE CASCADE,\n plan_id uuid NOT NULL REFERENCES public.mkt_content_plans(id) ON DELETE CASCADE,\n week_number integer NOT NULL DEFAULT 1,\n position integer NOT NULL DEFAULT 0,\n title text NOT NULL,\n format text NOT NULL DEFAULT 'reel'\n CHECK (format IN ('reel', 'static', 'carousel', 'story')),\n status text NOT NULL DEFAULT 'idea'\n CHECK (status IN ('idea', 'script', 'recording', 'editing', 'scheduled', 'published')),\n scheduled_date date,\n hook text,\n cta text,\n content_md text NOT NULL DEFAULT '',\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.mkt_content_posts ENABLE ROW LEVEL SECURITY;\nCREATE INDEX IF NOT EXISTS idx_mkt_content_posts_tenant ON public.mkt_content_posts(tenant_id);\nCREATE INDEX IF NOT EXISTS idx_mkt_content_posts_plan ON public.mkt_content_posts(plan_id, week_number, position);\nCREATE INDEX IF NOT EXISTS idx_mkt_content_posts_status ON public.mkt_content_posts(tenant_id, status);\n\n-- RLS policies for mkt_social_accounts\nDROP POLICY IF EXISTS mkt_social_accounts_select ON public.mkt_social_accounts;\nDROP POLICY IF EXISTS mkt_social_accounts_insert ON public.mkt_social_accounts;\nDROP POLICY IF EXISTS mkt_social_accounts_update ON public.mkt_social_accounts;\nDROP POLICY IF EXISTS mkt_social_accounts_delete ON public.mkt_social_accounts;\nCREATE POLICY mkt_social_accounts_select ON public.mkt_social_accounts FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY mkt_social_accounts_insert ON public.mkt_social_accounts FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY mkt_social_accounts_update ON public.mkt_social_accounts FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY mkt_social_accounts_delete ON public.mkt_social_accounts FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT, UPDATE, DELETE ON public.mkt_social_accounts TO authenticated;\n\n-- RLS policies for mkt_content_plans\nDROP POLICY IF EXISTS mkt_content_plans_select ON public.mkt_content_plans;\nDROP POLICY IF EXISTS mkt_content_plans_insert ON public.mkt_content_plans;\nDROP POLICY IF EXISTS mkt_content_plans_update ON public.mkt_content_plans;\nDROP POLICY IF EXISTS mkt_content_plans_delete ON public.mkt_content_plans;\nCREATE POLICY mkt_content_plans_select ON public.mkt_content_plans FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY mkt_content_plans_insert ON public.mkt_content_plans FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY mkt_content_plans_update ON public.mkt_content_plans FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY mkt_content_plans_delete ON public.mkt_content_plans FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT, UPDATE, DELETE ON public.mkt_content_plans TO authenticated;\n\n-- RLS policies for mkt_content_posts\nDROP POLICY IF EXISTS mkt_content_posts_select ON public.mkt_content_posts;\nDROP POLICY IF EXISTS mkt_content_posts_insert ON public.mkt_content_posts;\nDROP POLICY IF EXISTS mkt_content_posts_update ON public.mkt_content_posts;\nDROP POLICY IF EXISTS mkt_content_posts_delete ON public.mkt_content_posts;\nCREATE POLICY mkt_content_posts_select ON public.mkt_content_posts FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY mkt_content_posts_insert ON public.mkt_content_posts FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY mkt_content_posts_update ON public.mkt_content_posts FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY mkt_content_posts_delete ON public.mkt_content_posts FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT, UPDATE, DELETE ON public.mkt_content_posts TO authenticated;";
2
- export declare const MIGRATION_002_MULTI_PLATFORM = "-- Marketing Plugin: multi-platform accounts + per-post targets.\n-- An account is a brand/profile that publishes to MANY platforms (Instagram,\n-- YouTube, TikTok, ...). Posts optionally narrow the target platforms; an\n-- empty array means \"inherit the account's platforms\".\n\nALTER TABLE public.mkt_social_accounts\n ADD COLUMN IF NOT EXISTS platforms text[] NOT NULL DEFAULT '{instagram}';\n\n-- Backfill from the legacy single-platform column, then drop it (also drops\n-- its CHECK constraint \u2014 the platform list is UI-driven from here on).\nDO $$\nBEGIN\n IF EXISTS (\n SELECT 1 FROM information_schema.columns\n WHERE table_schema = 'public' AND table_name = 'mkt_social_accounts' AND column_name = 'platform'\n ) THEN\n UPDATE public.mkt_social_accounts\n SET platforms = ARRAY[platform]\n WHERE platform IS NOT NULL AND platforms = '{instagram}';\n ALTER TABLE public.mkt_social_accounts DROP COLUMN platform;\n END IF;\nEND $$;\n\nALTER TABLE public.mkt_content_posts\n ADD COLUMN IF NOT EXISTS platforms text[] NOT NULL DEFAULT '{}';";
3
- export declare const MIGRATION_003_RECORDING_OPS = "-- Marketing Plugin: recording-day ops on posts.\n-- checklist: shooting checklist items [{ id, text, done }] \u2014 the on-set\n-- companion for recording day. media_url: uploaded asset (static posts get a\n-- caption + final art instead of a script).\n\nALTER TABLE public.mkt_content_posts\n ADD COLUMN IF NOT EXISTS checklist jsonb NOT NULL DEFAULT '[]';\n\nALTER TABLE public.mkt_content_posts\n ADD COLUMN IF NOT EXISTS media_url text;\n\n-- Public media bucket for content assets (mirrors the avatars-bucket pattern:\n-- public read, authenticated write). Path convention: content/{tenantId}/{postId}-{ts}.{ext}\nINSERT INTO storage.buckets (id, name, public)\n VALUES ('mkt-media', 'mkt-media', true)\n ON CONFLICT (id) DO NOTHING;\n\nDROP POLICY IF EXISTS mkt_media_read ON storage.objects;\nDROP POLICY IF EXISTS mkt_media_insert ON storage.objects;\nDROP POLICY IF EXISTS mkt_media_update ON storage.objects;\nDROP POLICY IF EXISTS mkt_media_delete ON storage.objects;\nCREATE POLICY mkt_media_read ON storage.objects FOR SELECT TO public USING (bucket_id = 'mkt-media');\nCREATE POLICY mkt_media_insert ON storage.objects FOR INSERT TO authenticated WITH CHECK (bucket_id = 'mkt-media');\nCREATE POLICY mkt_media_update ON storage.objects FOR UPDATE TO authenticated USING (bucket_id = 'mkt-media');\nCREATE POLICY mkt_media_delete ON storage.objects FOR DELETE TO authenticated USING (bucket_id = 'mkt-media');";
1
+ export declare const MIGRATION_000_PLG_RENAME = "-- 000_plg_rename.sql \u2014 rename legacy marketing tables to plg_marketing_* for pools\n-- provisioned before the industry-pool rename. Guarded: fires only when legacy\n-- name exists and target does not, so fresh pools skip every branch.\nDO $$\nBEGIN\n IF to_regclass('public.mkt_social_accounts') IS NOT NULL AND to_regclass('public.plg_marketing_social_accounts') IS NULL THEN\n ALTER TABLE public.mkt_social_accounts RENAME TO plg_marketing_social_accounts;\n END IF;\n IF to_regclass('public.mkt_content_plans') IS NOT NULL AND to_regclass('public.plg_marketing_content_plans') IS NULL THEN\n ALTER TABLE public.mkt_content_plans RENAME TO plg_marketing_content_plans;\n END IF;\n IF to_regclass('public.mkt_content_posts') IS NOT NULL AND to_regclass('public.plg_marketing_content_posts') IS NULL THEN\n ALTER TABLE public.mkt_content_posts RENAME TO plg_marketing_content_posts;\n END IF;\nEND $$;\n";
2
+ export declare const MIGRATION_001_CONTENT_PLANNER = "-- Marketing Plugin: Content Planner\n-- Prefix: plg_marketing_\n-- Social accounts + content plans + posts (Notion-style markdown pages).\n\nCREATE TABLE IF NOT EXISTS public.plg_marketing_social_accounts (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,\n name text NOT NULL,\n handle text,\n platform text NOT NULL DEFAULT 'instagram'\n CHECK (platform IN ('instagram', 'tiktok', 'youtube', 'facebook', 'linkedin')),\n is_active boolean NOT NULL DEFAULT true,\n created_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.plg_marketing_social_accounts ENABLE ROW LEVEL SECURITY;\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_social_accounts_tenant ON public.plg_marketing_social_accounts(tenant_id);\n\nCREATE TABLE IF NOT EXISTS public.plg_marketing_content_plans (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,\n account_id uuid NOT NULL REFERENCES public.plg_marketing_social_accounts(id) ON DELETE CASCADE,\n name text NOT NULL,\n status text NOT NULL DEFAULT 'active'\n CHECK (status IN ('draft', 'active', 'archived')),\n weeks_count integer NOT NULL DEFAULT 8,\n start_date date,\n objective text,\n tone text,\n pillars jsonb NOT NULL DEFAULT '[]'::jsonb,\n formats jsonb NOT NULL DEFAULT '[]'::jsonb,\n weekly_frequency integer NOT NULL DEFAULT 3,\n brief_md text NOT NULL DEFAULT '',\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.plg_marketing_content_plans ENABLE ROW LEVEL SECURITY;\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_content_plans_tenant ON public.plg_marketing_content_plans(tenant_id);\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_content_plans_account ON public.plg_marketing_content_plans(account_id);\n\nCREATE TABLE IF NOT EXISTS public.plg_marketing_content_posts (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,\n plan_id uuid NOT NULL REFERENCES public.plg_marketing_content_plans(id) ON DELETE CASCADE,\n week_number integer NOT NULL DEFAULT 1,\n position integer NOT NULL DEFAULT 0,\n title text NOT NULL,\n format text NOT NULL DEFAULT 'reel'\n CHECK (format IN ('reel', 'static', 'carousel', 'story')),\n status text NOT NULL DEFAULT 'idea'\n CHECK (status IN ('idea', 'script', 'recording', 'editing', 'scheduled', 'published')),\n scheduled_date date,\n hook text,\n cta text,\n content_md text NOT NULL DEFAULT '',\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.plg_marketing_content_posts ENABLE ROW LEVEL SECURITY;\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_content_posts_tenant ON public.plg_marketing_content_posts(tenant_id);\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_content_posts_plan ON public.plg_marketing_content_posts(plan_id, week_number, position);\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_content_posts_status ON public.plg_marketing_content_posts(tenant_id, status);\n\n-- RLS policies for plg_marketing_social_accounts\nDROP POLICY IF EXISTS plg_marketing_social_accounts_select ON public.plg_marketing_social_accounts;\nDROP POLICY IF EXISTS plg_marketing_social_accounts_insert ON public.plg_marketing_social_accounts;\nDROP POLICY IF EXISTS plg_marketing_social_accounts_update ON public.plg_marketing_social_accounts;\nDROP POLICY IF EXISTS plg_marketing_social_accounts_delete ON public.plg_marketing_social_accounts;\nCREATE POLICY plg_marketing_social_accounts_select ON public.plg_marketing_social_accounts FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_social_accounts_insert ON public.plg_marketing_social_accounts FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_social_accounts_update ON public.plg_marketing_social_accounts FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_social_accounts_delete ON public.plg_marketing_social_accounts FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT, UPDATE, DELETE ON public.plg_marketing_social_accounts TO authenticated;\n\n-- RLS policies for plg_marketing_content_plans\nDROP POLICY IF EXISTS plg_marketing_content_plans_select ON public.plg_marketing_content_plans;\nDROP POLICY IF EXISTS plg_marketing_content_plans_insert ON public.plg_marketing_content_plans;\nDROP POLICY IF EXISTS plg_marketing_content_plans_update ON public.plg_marketing_content_plans;\nDROP POLICY IF EXISTS plg_marketing_content_plans_delete ON public.plg_marketing_content_plans;\nCREATE POLICY plg_marketing_content_plans_select ON public.plg_marketing_content_plans FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_content_plans_insert ON public.plg_marketing_content_plans FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_content_plans_update ON public.plg_marketing_content_plans FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_content_plans_delete ON public.plg_marketing_content_plans FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT, UPDATE, DELETE ON public.plg_marketing_content_plans TO authenticated;\n\n-- RLS policies for plg_marketing_content_posts\nDROP POLICY IF EXISTS plg_marketing_content_posts_select ON public.plg_marketing_content_posts;\nDROP POLICY IF EXISTS plg_marketing_content_posts_insert ON public.plg_marketing_content_posts;\nDROP POLICY IF EXISTS plg_marketing_content_posts_update ON public.plg_marketing_content_posts;\nDROP POLICY IF EXISTS plg_marketing_content_posts_delete ON public.plg_marketing_content_posts;\nCREATE POLICY plg_marketing_content_posts_select ON public.plg_marketing_content_posts FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_content_posts_insert ON public.plg_marketing_content_posts FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_content_posts_update ON public.plg_marketing_content_posts FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_content_posts_delete ON public.plg_marketing_content_posts FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT, UPDATE, DELETE ON public.plg_marketing_content_posts TO authenticated;\n";
3
+ export declare const MIGRATION_002_MULTI_PLATFORM = "-- Marketing Plugin: multi-platform accounts + per-post targets.\n-- An account is a brand/profile that publishes to MANY platforms (Instagram,\n-- YouTube, TikTok, ...). Posts optionally narrow the target platforms; an\n-- empty array means \"inherit the account's platforms\".\n\nALTER TABLE public.plg_marketing_social_accounts\n ADD COLUMN IF NOT EXISTS platforms text[] NOT NULL DEFAULT '{instagram}';\n\n-- Backfill from the legacy single-platform column, then drop it (also drops\n-- its CHECK constraint \u2014 the platform list is UI-driven from here on).\nDO $$\nBEGIN\n IF EXISTS (\n SELECT 1 FROM information_schema.columns\n WHERE table_schema = 'public' AND table_name = 'plg_marketing_social_accounts' AND column_name = 'platform'\n ) THEN\n UPDATE public.plg_marketing_social_accounts\n SET platforms = ARRAY[platform]\n WHERE platform IS NOT NULL AND platforms = '{instagram}';\n ALTER TABLE public.plg_marketing_social_accounts DROP COLUMN platform;\n END IF;\nEND $$;\n\nALTER TABLE public.plg_marketing_content_posts\n ADD COLUMN IF NOT EXISTS platforms text[] NOT NULL DEFAULT '{}';\n";
4
+ export declare const MIGRATION_003_RECORDING_OPS = "-- Marketing Plugin: recording-day ops on posts.\n-- checklist: shooting checklist items [{ id, text, done }] \u2014 the on-set\n-- companion for recording day. media_url: uploaded asset (static posts get a\n-- caption + final art instead of a script).\n\nALTER TABLE public.plg_marketing_content_posts\n ADD COLUMN IF NOT EXISTS checklist jsonb NOT NULL DEFAULT '[]';\n\nALTER TABLE public.plg_marketing_content_posts\n ADD COLUMN IF NOT EXISTS media_url text;\n\n-- Public media bucket for content assets (mirrors the avatars-bucket pattern:\n-- public read, authenticated write). Path convention: content/{tenantId}/{postId}-{ts}.{ext}\nINSERT INTO storage.buckets (id, name, public)\n VALUES ('mkt-media', 'mkt-media', true)\n ON CONFLICT (id) DO NOTHING;\n\nDROP POLICY IF EXISTS plg_marketing_media_read ON storage.objects;\nDROP POLICY IF EXISTS plg_marketing_media_insert ON storage.objects;\nDROP POLICY IF EXISTS plg_marketing_media_update ON storage.objects;\nDROP POLICY IF EXISTS plg_marketing_media_delete ON storage.objects;\nCREATE POLICY plg_marketing_media_read ON storage.objects FOR SELECT TO public USING (bucket_id = 'mkt-media');\nCREATE POLICY plg_marketing_media_insert ON storage.objects FOR INSERT TO authenticated WITH CHECK (bucket_id = 'mkt-media');\nCREATE POLICY plg_marketing_media_update ON storage.objects FOR UPDATE TO authenticated USING (bucket_id = 'mkt-media');\nCREATE POLICY plg_marketing_media_delete ON storage.objects FOR DELETE TO authenticated USING (bucket_id = 'mkt-media');\n";
5
+ export declare const MIGRATION_004_RANKLAYER = "-- Marketing Plugin: RankLayer integration (SEO content publishing).\n-- Control-plane state for the RankLayer connector rendered in Marketing \u2192\n-- Integra\u00E7\u00F5es. Prefix: plg_marketing_ranklayer_. Scaffold: the real sync\n-- (edge function + RankLayer API calls) lands via an external PR \u2014 see\n-- src/integrations/ranklayer/RANKLAYER.md.\n\nCREATE TABLE IF NOT EXISTS public.plg_marketing_ranklayer_integrations (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,\n api_key text,\n site_domain text,\n active boolean NOT NULL DEFAULT true,\n last_sync_at timestamptz,\n created_at timestamptz NOT NULL DEFAULT now(),\n updated_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.plg_marketing_ranklayer_integrations ENABLE ROW LEVEL SECURITY;\nCREATE UNIQUE INDEX IF NOT EXISTS uq_plg_marketing_ranklayer_integrations_tenant\n ON public.plg_marketing_ranklayer_integrations(tenant_id);\n\nCREATE TABLE IF NOT EXISTS public.plg_marketing_ranklayer_sync_log (\n id uuid PRIMARY KEY DEFAULT gen_random_uuid(),\n tenant_id uuid NOT NULL REFERENCES public.tenants(id) ON DELETE CASCADE,\n integration_id uuid REFERENCES public.plg_marketing_ranklayer_integrations(id) ON DELETE CASCADE,\n status text NOT NULL DEFAULT 'success' CHECK (status IN ('success', 'partial', 'error')),\n message text,\n fetched integer NOT NULL DEFAULT 0,\n written integer NOT NULL DEFAULT 0,\n created_at timestamptz NOT NULL DEFAULT now()\n);\nALTER TABLE public.plg_marketing_ranklayer_sync_log ENABLE ROW LEVEL SECURITY;\nCREATE INDEX IF NOT EXISTS idx_plg_marketing_ranklayer_sync_log_tenant\n ON public.plg_marketing_ranklayer_sync_log(tenant_id, created_at DESC);\n\n-- RLS: authenticated tenant CRUD\nDROP POLICY IF EXISTS plg_marketing_ranklayer_integrations_select ON public.plg_marketing_ranklayer_integrations;\nDROP POLICY IF EXISTS plg_marketing_ranklayer_integrations_insert ON public.plg_marketing_ranklayer_integrations;\nDROP POLICY IF EXISTS plg_marketing_ranklayer_integrations_update ON public.plg_marketing_ranklayer_integrations;\nDROP POLICY IF EXISTS plg_marketing_ranklayer_integrations_delete ON public.plg_marketing_ranklayer_integrations;\nCREATE POLICY plg_marketing_ranklayer_integrations_select ON public.plg_marketing_ranklayer_integrations FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_ranklayer_integrations_insert ON public.plg_marketing_ranklayer_integrations FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_ranklayer_integrations_update ON public.plg_marketing_ranklayer_integrations FOR UPDATE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_ranklayer_integrations_delete ON public.plg_marketing_ranklayer_integrations FOR DELETE TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT, UPDATE, DELETE ON public.plg_marketing_ranklayer_integrations TO authenticated;\n\nDROP POLICY IF EXISTS plg_marketing_ranklayer_sync_log_select ON public.plg_marketing_ranklayer_sync_log;\nDROP POLICY IF EXISTS plg_marketing_ranklayer_sync_log_insert ON public.plg_marketing_ranklayer_sync_log;\nCREATE POLICY plg_marketing_ranklayer_sync_log_select ON public.plg_marketing_ranklayer_sync_log FOR SELECT TO authenticated USING (tenant_id IN (SELECT public.user_tenant_ids()));\nCREATE POLICY plg_marketing_ranklayer_sync_log_insert ON public.plg_marketing_ranklayer_sync_log FOR INSERT TO authenticated WITH CHECK (tenant_id IN (SELECT public.user_tenant_ids()));\nGRANT SELECT, INSERT ON public.plg_marketing_ranklayer_sync_log TO authenticated;\n";
6
+ export declare const MIGRATIONS: Array<{
7
+ id: string;
8
+ sql: string;
9
+ }>;
4
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,6BAA6B,0gMA6FyC,CAAA;AAGnF,eAAO,MAAM,4BAA4B,6jCAwB0B,CAAA;AAInE,eAAO,MAAM,2BAA2B,w5CAwBuE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,wBAAwB,i6BAepC,CAAA;AAED,eAAO,MAAM,6BAA6B,ivNA8FzC,CAAA;AAED,eAAO,MAAM,4BAA4B,inCAyBxC,CAAA;AAED,eAAO,MAAM,2BAA2B,8/CAyBvC,CAAA;AAED,eAAO,MAAM,uBAAuB,6tHAkDnC,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAMzD,CAAA"}
package/dist/presets.d.ts CHANGED
@@ -7,6 +7,8 @@ export interface MarketingDomainModules {
7
7
  landingPages: boolean;
8
8
  /** Social content planner — accounts, week board, markdown post pages. */
9
9
  contentPlanner: boolean;
10
+ /** Blog backoffice — posts + categories CMS feeding @fayz-ai/plugin-blog. Off by default. */
11
+ blog: boolean;
10
12
  /** Outbound — reserved, off by default, implemented in a later milestone. */
11
13
  broadcasts: boolean;
12
14
  journeys: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AASlE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE3D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,OAAO,CAAA;IACrB,0EAA0E;IAC1E,cAAc,EAAE,OAAO,CAAA;IACvB,6EAA6E;IAC7E,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,eAAe,CAAA;IAC3B,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,OAAO,EAAE,sBAAsB,CAAA;CAChC;AA4DD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAI5E,CAAA;AAED,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAsBjE,CAAA"}
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../src/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AASlE,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE3D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,OAAO,CAAA;IACjB,SAAS,EAAE,OAAO,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,YAAY,EAAE,OAAO,CAAA;IACrB,0EAA0E;IAC1E,cAAc,EAAE,OAAO,CAAA;IACvB,6FAA6F;IAC7F,IAAI,EAAE,OAAO,CAAA;IACb,6EAA6E;IAC7E,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,eAAe,CAAA;IAC3B,QAAQ,EAAE,kBAAkB,EAAE,CAAA;IAC9B,OAAO,EAAE,sBAAsB,CAAA;CAChC;AA4DD,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAI5E,CAAA;AAED,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAsBjE,CAAA"}
@@ -1,10 +1,10 @@
1
1
  export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWithColumns<{
2
- name: "mkt_social_accounts";
2
+ name: "plg_marketing_social_accounts";
3
3
  schema: undefined;
4
4
  columns: {
5
5
  createdAt: import("drizzle-orm/pg-core").PgColumn<{
6
6
  name: "created_at";
7
- tableName: "mkt_social_accounts";
7
+ tableName: "plg_marketing_social_accounts";
8
8
  dataType: "date";
9
9
  columnType: "PgTimestamp";
10
10
  data: Date;
@@ -21,7 +21,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
21
21
  }, {}, {}>;
22
22
  id: import("drizzle-orm/pg-core").PgColumn<{
23
23
  name: "id";
24
- tableName: "mkt_social_accounts";
24
+ tableName: "plg_marketing_social_accounts";
25
25
  dataType: "string";
26
26
  columnType: "PgUUID";
27
27
  data: string;
@@ -38,7 +38,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
38
38
  }, {}, {}>;
39
39
  tenantId: import("drizzle-orm/pg-core").PgColumn<{
40
40
  name: "tenant_id";
41
- tableName: "mkt_social_accounts";
41
+ tableName: "plg_marketing_social_accounts";
42
42
  dataType: "string";
43
43
  columnType: "PgUUID";
44
44
  data: string;
@@ -55,7 +55,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
55
55
  }, {}, {}>;
56
56
  name: import("drizzle-orm/pg-core").PgColumn<{
57
57
  name: "name";
58
- tableName: "mkt_social_accounts";
58
+ tableName: "plg_marketing_social_accounts";
59
59
  dataType: "string";
60
60
  columnType: "PgText";
61
61
  data: string;
@@ -72,7 +72,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
72
72
  }, {}, {}>;
73
73
  handle: import("drizzle-orm/pg-core").PgColumn<{
74
74
  name: "handle";
75
- tableName: "mkt_social_accounts";
75
+ tableName: "plg_marketing_social_accounts";
76
76
  dataType: "string";
77
77
  columnType: "PgText";
78
78
  data: string;
@@ -89,7 +89,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
89
89
  }, {}, {}>;
90
90
  platforms: import("drizzle-orm/pg-core").PgColumn<{
91
91
  name: "platforms";
92
- tableName: "mkt_social_accounts";
92
+ tableName: "plg_marketing_social_accounts";
93
93
  dataType: "array";
94
94
  columnType: "PgArray";
95
95
  data: string[];
@@ -102,7 +102,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
102
102
  enumValues: [string, ...string[]];
103
103
  baseColumn: import("drizzle-orm").Column<{
104
104
  name: "platforms";
105
- tableName: "mkt_social_accounts";
105
+ tableName: "plg_marketing_social_accounts";
106
106
  dataType: "string";
107
107
  columnType: "PgText";
108
108
  data: string;
@@ -122,7 +122,7 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
122
122
  }, {}, {}>;
123
123
  isActive: import("drizzle-orm/pg-core").PgColumn<{
124
124
  name: "is_active";
125
- tableName: "mkt_social_accounts";
125
+ tableName: "plg_marketing_social_accounts";
126
126
  dataType: "boolean";
127
127
  columnType: "PgBoolean";
128
128
  data: boolean;
@@ -141,12 +141,12 @@ export declare const mktSocialAccounts: import("drizzle-orm/pg-core").PgTableWit
141
141
  dialect: "pg";
142
142
  }>;
143
143
  export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithColumns<{
144
- name: "mkt_content_plans";
144
+ name: "plg_marketing_content_plans";
145
145
  schema: undefined;
146
146
  columns: {
147
147
  createdAt: import("drizzle-orm/pg-core").PgColumn<{
148
148
  name: "created_at";
149
- tableName: "mkt_content_plans";
149
+ tableName: "plg_marketing_content_plans";
150
150
  dataType: "date";
151
151
  columnType: "PgTimestamp";
152
152
  data: Date;
@@ -163,7 +163,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
163
163
  }, {}, {}>;
164
164
  updatedAt: import("drizzle-orm/pg-core").PgColumn<{
165
165
  name: "updated_at";
166
- tableName: "mkt_content_plans";
166
+ tableName: "plg_marketing_content_plans";
167
167
  dataType: "date";
168
168
  columnType: "PgTimestamp";
169
169
  data: Date;
@@ -180,7 +180,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
180
180
  }, {}, {}>;
181
181
  id: import("drizzle-orm/pg-core").PgColumn<{
182
182
  name: "id";
183
- tableName: "mkt_content_plans";
183
+ tableName: "plg_marketing_content_plans";
184
184
  dataType: "string";
185
185
  columnType: "PgUUID";
186
186
  data: string;
@@ -197,7 +197,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
197
197
  }, {}, {}>;
198
198
  tenantId: import("drizzle-orm/pg-core").PgColumn<{
199
199
  name: "tenant_id";
200
- tableName: "mkt_content_plans";
200
+ tableName: "plg_marketing_content_plans";
201
201
  dataType: "string";
202
202
  columnType: "PgUUID";
203
203
  data: string;
@@ -214,7 +214,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
214
214
  }, {}, {}>;
215
215
  accountId: import("drizzle-orm/pg-core").PgColumn<{
216
216
  name: "account_id";
217
- tableName: "mkt_content_plans";
217
+ tableName: "plg_marketing_content_plans";
218
218
  dataType: "string";
219
219
  columnType: "PgUUID";
220
220
  data: string;
@@ -231,7 +231,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
231
231
  }, {}, {}>;
232
232
  name: import("drizzle-orm/pg-core").PgColumn<{
233
233
  name: "name";
234
- tableName: "mkt_content_plans";
234
+ tableName: "plg_marketing_content_plans";
235
235
  dataType: "string";
236
236
  columnType: "PgText";
237
237
  data: string;
@@ -248,7 +248,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
248
248
  }, {}, {}>;
249
249
  status: import("drizzle-orm/pg-core").PgColumn<{
250
250
  name: "status";
251
- tableName: "mkt_content_plans";
251
+ tableName: "plg_marketing_content_plans";
252
252
  dataType: "string";
253
253
  columnType: "PgText";
254
254
  data: string;
@@ -265,7 +265,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
265
265
  }, {}, {}>;
266
266
  weeksCount: import("drizzle-orm/pg-core").PgColumn<{
267
267
  name: "weeks_count";
268
- tableName: "mkt_content_plans";
268
+ tableName: "plg_marketing_content_plans";
269
269
  dataType: "number";
270
270
  columnType: "PgInteger";
271
271
  data: number;
@@ -282,7 +282,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
282
282
  }, {}, {}>;
283
283
  startDate: import("drizzle-orm/pg-core").PgColumn<{
284
284
  name: "start_date";
285
- tableName: "mkt_content_plans";
285
+ tableName: "plg_marketing_content_plans";
286
286
  dataType: "string";
287
287
  columnType: "PgDateString";
288
288
  data: string;
@@ -299,7 +299,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
299
299
  }, {}, {}>;
300
300
  objective: import("drizzle-orm/pg-core").PgColumn<{
301
301
  name: "objective";
302
- tableName: "mkt_content_plans";
302
+ tableName: "plg_marketing_content_plans";
303
303
  dataType: "string";
304
304
  columnType: "PgText";
305
305
  data: string;
@@ -316,7 +316,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
316
316
  }, {}, {}>;
317
317
  tone: import("drizzle-orm/pg-core").PgColumn<{
318
318
  name: "tone";
319
- tableName: "mkt_content_plans";
319
+ tableName: "plg_marketing_content_plans";
320
320
  dataType: "string";
321
321
  columnType: "PgText";
322
322
  data: string;
@@ -333,7 +333,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
333
333
  }, {}, {}>;
334
334
  pillars: import("drizzle-orm/pg-core").PgColumn<{
335
335
  name: "pillars";
336
- tableName: "mkt_content_plans";
336
+ tableName: "plg_marketing_content_plans";
337
337
  dataType: "json";
338
338
  columnType: "PgJsonb";
339
339
  data: unknown;
@@ -350,7 +350,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
350
350
  }, {}, {}>;
351
351
  formats: import("drizzle-orm/pg-core").PgColumn<{
352
352
  name: "formats";
353
- tableName: "mkt_content_plans";
353
+ tableName: "plg_marketing_content_plans";
354
354
  dataType: "json";
355
355
  columnType: "PgJsonb";
356
356
  data: unknown;
@@ -367,7 +367,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
367
367
  }, {}, {}>;
368
368
  weeklyFrequency: import("drizzle-orm/pg-core").PgColumn<{
369
369
  name: "weekly_frequency";
370
- tableName: "mkt_content_plans";
370
+ tableName: "plg_marketing_content_plans";
371
371
  dataType: "number";
372
372
  columnType: "PgInteger";
373
373
  data: number;
@@ -384,7 +384,7 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
384
384
  }, {}, {}>;
385
385
  briefMd: import("drizzle-orm/pg-core").PgColumn<{
386
386
  name: "brief_md";
387
- tableName: "mkt_content_plans";
387
+ tableName: "plg_marketing_content_plans";
388
388
  dataType: "string";
389
389
  columnType: "PgText";
390
390
  data: string;
@@ -403,12 +403,12 @@ export declare const mktContentPlans: import("drizzle-orm/pg-core").PgTableWithC
403
403
  dialect: "pg";
404
404
  }>;
405
405
  export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithColumns<{
406
- name: "mkt_content_posts";
406
+ name: "plg_marketing_content_posts";
407
407
  schema: undefined;
408
408
  columns: {
409
409
  createdAt: import("drizzle-orm/pg-core").PgColumn<{
410
410
  name: "created_at";
411
- tableName: "mkt_content_posts";
411
+ tableName: "plg_marketing_content_posts";
412
412
  dataType: "date";
413
413
  columnType: "PgTimestamp";
414
414
  data: Date;
@@ -425,7 +425,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
425
425
  }, {}, {}>;
426
426
  updatedAt: import("drizzle-orm/pg-core").PgColumn<{
427
427
  name: "updated_at";
428
- tableName: "mkt_content_posts";
428
+ tableName: "plg_marketing_content_posts";
429
429
  dataType: "date";
430
430
  columnType: "PgTimestamp";
431
431
  data: Date;
@@ -442,7 +442,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
442
442
  }, {}, {}>;
443
443
  id: import("drizzle-orm/pg-core").PgColumn<{
444
444
  name: "id";
445
- tableName: "mkt_content_posts";
445
+ tableName: "plg_marketing_content_posts";
446
446
  dataType: "string";
447
447
  columnType: "PgUUID";
448
448
  data: string;
@@ -459,7 +459,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
459
459
  }, {}, {}>;
460
460
  tenantId: import("drizzle-orm/pg-core").PgColumn<{
461
461
  name: "tenant_id";
462
- tableName: "mkt_content_posts";
462
+ tableName: "plg_marketing_content_posts";
463
463
  dataType: "string";
464
464
  columnType: "PgUUID";
465
465
  data: string;
@@ -476,7 +476,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
476
476
  }, {}, {}>;
477
477
  planId: import("drizzle-orm/pg-core").PgColumn<{
478
478
  name: "plan_id";
479
- tableName: "mkt_content_posts";
479
+ tableName: "plg_marketing_content_posts";
480
480
  dataType: "string";
481
481
  columnType: "PgUUID";
482
482
  data: string;
@@ -493,7 +493,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
493
493
  }, {}, {}>;
494
494
  weekNumber: import("drizzle-orm/pg-core").PgColumn<{
495
495
  name: "week_number";
496
- tableName: "mkt_content_posts";
496
+ tableName: "plg_marketing_content_posts";
497
497
  dataType: "number";
498
498
  columnType: "PgInteger";
499
499
  data: number;
@@ -510,7 +510,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
510
510
  }, {}, {}>;
511
511
  position: import("drizzle-orm/pg-core").PgColumn<{
512
512
  name: "position";
513
- tableName: "mkt_content_posts";
513
+ tableName: "plg_marketing_content_posts";
514
514
  dataType: "number";
515
515
  columnType: "PgInteger";
516
516
  data: number;
@@ -527,7 +527,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
527
527
  }, {}, {}>;
528
528
  title: import("drizzle-orm/pg-core").PgColumn<{
529
529
  name: "title";
530
- tableName: "mkt_content_posts";
530
+ tableName: "plg_marketing_content_posts";
531
531
  dataType: "string";
532
532
  columnType: "PgText";
533
533
  data: string;
@@ -544,7 +544,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
544
544
  }, {}, {}>;
545
545
  format: import("drizzle-orm/pg-core").PgColumn<{
546
546
  name: "format";
547
- tableName: "mkt_content_posts";
547
+ tableName: "plg_marketing_content_posts";
548
548
  dataType: "string";
549
549
  columnType: "PgText";
550
550
  data: string;
@@ -561,7 +561,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
561
561
  }, {}, {}>;
562
562
  status: import("drizzle-orm/pg-core").PgColumn<{
563
563
  name: "status";
564
- tableName: "mkt_content_posts";
564
+ tableName: "plg_marketing_content_posts";
565
565
  dataType: "string";
566
566
  columnType: "PgText";
567
567
  data: string;
@@ -578,7 +578,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
578
578
  }, {}, {}>;
579
579
  scheduledDate: import("drizzle-orm/pg-core").PgColumn<{
580
580
  name: "scheduled_date";
581
- tableName: "mkt_content_posts";
581
+ tableName: "plg_marketing_content_posts";
582
582
  dataType: "string";
583
583
  columnType: "PgDateString";
584
584
  data: string;
@@ -595,7 +595,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
595
595
  }, {}, {}>;
596
596
  platforms: import("drizzle-orm/pg-core").PgColumn<{
597
597
  name: "platforms";
598
- tableName: "mkt_content_posts";
598
+ tableName: "plg_marketing_content_posts";
599
599
  dataType: "array";
600
600
  columnType: "PgArray";
601
601
  data: string[];
@@ -608,7 +608,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
608
608
  enumValues: [string, ...string[]];
609
609
  baseColumn: import("drizzle-orm").Column<{
610
610
  name: "platforms";
611
- tableName: "mkt_content_posts";
611
+ tableName: "plg_marketing_content_posts";
612
612
  dataType: "string";
613
613
  columnType: "PgText";
614
614
  data: string;
@@ -628,7 +628,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
628
628
  }, {}, {}>;
629
629
  checklist: import("drizzle-orm/pg-core").PgColumn<{
630
630
  name: "checklist";
631
- tableName: "mkt_content_posts";
631
+ tableName: "plg_marketing_content_posts";
632
632
  dataType: "json";
633
633
  columnType: "PgJsonb";
634
634
  data: unknown;
@@ -645,7 +645,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
645
645
  }, {}, {}>;
646
646
  mediaUrl: import("drizzle-orm/pg-core").PgColumn<{
647
647
  name: "media_url";
648
- tableName: "mkt_content_posts";
648
+ tableName: "plg_marketing_content_posts";
649
649
  dataType: "string";
650
650
  columnType: "PgText";
651
651
  data: string;
@@ -662,7 +662,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
662
662
  }, {}, {}>;
663
663
  hook: import("drizzle-orm/pg-core").PgColumn<{
664
664
  name: "hook";
665
- tableName: "mkt_content_posts";
665
+ tableName: "plg_marketing_content_posts";
666
666
  dataType: "string";
667
667
  columnType: "PgText";
668
668
  data: string;
@@ -679,7 +679,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
679
679
  }, {}, {}>;
680
680
  cta: import("drizzle-orm/pg-core").PgColumn<{
681
681
  name: "cta";
682
- tableName: "mkt_content_posts";
682
+ tableName: "plg_marketing_content_posts";
683
683
  dataType: "string";
684
684
  columnType: "PgText";
685
685
  data: string;
@@ -696,7 +696,7 @@ export declare const mktContentPosts: import("drizzle-orm/pg-core").PgTableWithC
696
696
  }, {}, {}>;
697
697
  contentMd: import("drizzle-orm/pg-core").PgColumn<{
698
698
  name: "content_md";
699
- tableName: "mkt_content_posts";
699
+ tableName: "plg_marketing_content_posts";
700
700
  dataType: "string";
701
701
  columnType: "PgText";
702
702
  data: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EASqC,CAAA;AAEnE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB1B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwB1B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schema/index.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS+C,CAAA;AAE7E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkB1B,CAAA;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwB1B,CAAA"}
package/dist/schema.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  var db = require('@fayz-ai/db');
4
4
 
5
5
  // src/schema/index.ts
6
- var mktSocialAccounts = db.pgTable("mkt_social_accounts", {
6
+ var mktSocialAccounts = db.pgTable("plg_marketing_social_accounts", {
7
7
  id: db.uuid("id").primaryKey().defaultRandom(),
8
8
  tenantId: db.tenantId(),
9
9
  name: db.text("name").notNull(),
@@ -12,8 +12,8 @@ var mktSocialAccounts = db.pgTable("mkt_social_accounts", {
12
12
  platforms: db.text("platforms").array().notNull().default(["instagram"]),
13
13
  isActive: db.boolean("is_active").notNull().default(true),
14
14
  ...db.createdAt
15
- }, (t) => [db.index("idx_mkt_social_accounts_tenant").on(t.tenantId)]);
16
- var mktContentPlans = db.pgTable("mkt_content_plans", {
15
+ }, (t) => [db.index("idx_plg_marketing_social_accounts_tenant").on(t.tenantId)]);
16
+ var mktContentPlans = db.pgTable("plg_marketing_content_plans", {
17
17
  id: db.uuid("id").primaryKey().defaultRandom(),
18
18
  tenantId: db.tenantId(),
19
19
  accountId: db.uuid("account_id").notNull().references(() => mktSocialAccounts.id, { onDelete: "cascade" }),
@@ -29,10 +29,10 @@ var mktContentPlans = db.pgTable("mkt_content_plans", {
29
29
  briefMd: db.text("brief_md").notNull().default(""),
30
30
  ...db.timestamps
31
31
  }, (t) => [
32
- db.index("idx_mkt_content_plans_tenant").on(t.tenantId),
33
- db.index("idx_mkt_content_plans_account").on(t.accountId)
32
+ db.index("idx_plg_marketing_content_plans_tenant").on(t.tenantId),
33
+ db.index("idx_plg_marketing_content_plans_account").on(t.accountId)
34
34
  ]);
35
- var mktContentPosts = db.pgTable("mkt_content_posts", {
35
+ var mktContentPosts = db.pgTable("plg_marketing_content_posts", {
36
36
  id: db.uuid("id").primaryKey().defaultRandom(),
37
37
  tenantId: db.tenantId(),
38
38
  planId: db.uuid("plan_id").notNull().references(() => mktContentPlans.id, { onDelete: "cascade" }),
@@ -53,9 +53,9 @@ var mktContentPosts = db.pgTable("mkt_content_posts", {
53
53
  contentMd: db.text("content_md").notNull().default(""),
54
54
  ...db.timestamps
55
55
  }, (t) => [
56
- db.index("idx_mkt_content_posts_tenant").on(t.tenantId),
57
- db.index("idx_mkt_content_posts_plan").on(t.planId, t.weekNumber, t.position),
58
- db.index("idx_mkt_content_posts_status").on(t.tenantId, t.status)
56
+ db.index("idx_plg_marketing_content_posts_tenant").on(t.tenantId),
57
+ db.index("idx_plg_marketing_content_posts_plan").on(t.planId, t.weekNumber, t.position),
58
+ db.index("idx_plg_marketing_content_posts_status").on(t.tenantId, t.status)
59
59
  ]);
60
60
 
61
61
  exports.mktContentPlans = mktContentPlans;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema/index.ts"],"names":["pgTable","uuid","tenantId","text","boolean","createdAt","index","integer","date","jsonb","timestamps"],"mappings":"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","file":"schema.cjs","sourcesContent":["// Builders come from @fayz-ai/db (single drizzle-orm instance) — never import\n// pgTable/uuid directly from drizzle-orm/pg-core. See MIGRATION-ARCHITECTURE §6.\nimport {\n pgTable, uuid, text, boolean, integer, date, jsonb, index,\n tenantId, timestamps, createdAt,\n} from '@fayz-ai/db'\n\n// ---------------------------------------------------------------------------\n// Marketing plugin — Ring-1 schema (schema-as-code), content planner tables.\n// RLS policies + grants are companion SQL (Drizzle doesn't diff those) —\n// see src/migrations/001_content_planner.sql.\n// ---------------------------------------------------------------------------\n\nexport const mktSocialAccounts = pgTable('mkt_social_accounts', {\n id: uuid('id').primaryKey().defaultRandom(),\n tenantId: tenantId(),\n name: text('name').notNull(),\n handle: text('handle'),\n // One account, many platform connections (Instagram, YouTube, TikTok, ...)\n platforms: text('platforms').array().notNull().default(['instagram']),\n isActive: boolean('is_active').notNull().default(true),\n ...createdAt,\n}, (t) => [index('idx_mkt_social_accounts_tenant').on(t.tenantId)])\n\nexport const mktContentPlans = pgTable('mkt_content_plans', {\n id: uuid('id').primaryKey().defaultRandom(),\n tenantId: tenantId(),\n accountId: uuid('account_id').notNull().references(() => mktSocialAccounts.id, { onDelete: 'cascade' }),\n name: text('name').notNull(),\n status: text('status').notNull().default('active'),\n weeksCount: integer('weeks_count').notNull().default(8),\n startDate: date('start_date'),\n objective: text('objective'),\n tone: text('tone'),\n pillars: jsonb('pillars').notNull().default([]),\n formats: jsonb('formats').notNull().default([]),\n weeklyFrequency: integer('weekly_frequency').notNull().default(3),\n briefMd: text('brief_md').notNull().default(''),\n ...timestamps,\n}, (t) => [\n index('idx_mkt_content_plans_tenant').on(t.tenantId),\n index('idx_mkt_content_plans_account').on(t.accountId),\n])\n\nexport const mktContentPosts = pgTable('mkt_content_posts', {\n id: uuid('id').primaryKey().defaultRandom(),\n tenantId: tenantId(),\n planId: uuid('plan_id').notNull().references(() => mktContentPlans.id, { onDelete: 'cascade' }),\n weekNumber: integer('week_number').notNull().default(1),\n position: integer('position').notNull().default(0),\n title: text('title').notNull(),\n format: text('format').notNull().default('reel'),\n status: text('status').notNull().default('idea'),\n scheduledDate: date('scheduled_date'),\n // Target platforms for this post; empty = inherit the account's platforms\n platforms: text('platforms').array().notNull().default([]),\n // Recording-day checklist [{ id, text, done }]\n checklist: jsonb('checklist').notNull().default([]),\n // Uploaded asset (static posts: caption + final art instead of a script)\n mediaUrl: text('media_url'),\n hook: text('hook'),\n cta: text('cta'),\n contentMd: text('content_md').notNull().default(''),\n ...timestamps,\n}, (t) => [\n index('idx_mkt_content_posts_tenant').on(t.tenantId),\n index('idx_mkt_content_posts_plan').on(t.planId, t.weekNumber, t.position),\n index('idx_mkt_content_posts_status').on(t.tenantId, t.status),\n])\n"]}
1
+ {"version":3,"sources":["../src/schema/index.ts"],"names":["pgTable","uuid","tenantId","text","boolean","createdAt","index","integer","date","jsonb","timestamps"],"mappings":"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","file":"schema.cjs","sourcesContent":["// Builders come from @fayz-ai/db (single drizzle-orm instance) — never import\n// pgTable/uuid directly from drizzle-orm/pg-core. See MIGRATION-ARCHITECTURE §6.\nimport {\n pgTable, uuid, text, boolean, integer, date, jsonb, index,\n tenantId, timestamps, createdAt,\n} from '@fayz-ai/db'\n\n// ---------------------------------------------------------------------------\n// Marketing plugin — Ring-1 schema (schema-as-code), content planner tables.\n// RLS policies + grants are companion SQL (Drizzle doesn't diff those) —\n// see src/migrations/001_content_planner.sql.\n// ---------------------------------------------------------------------------\n\nexport const mktSocialAccounts = pgTable('plg_marketing_social_accounts', {\n id: uuid('id').primaryKey().defaultRandom(),\n tenantId: tenantId(),\n name: text('name').notNull(),\n handle: text('handle'),\n // One account, many platform connections (Instagram, YouTube, TikTok, ...)\n platforms: text('platforms').array().notNull().default(['instagram']),\n isActive: boolean('is_active').notNull().default(true),\n ...createdAt,\n}, (t) => [index('idx_plg_marketing_social_accounts_tenant').on(t.tenantId)])\n\nexport const mktContentPlans = pgTable('plg_marketing_content_plans', {\n id: uuid('id').primaryKey().defaultRandom(),\n tenantId: tenantId(),\n accountId: uuid('account_id').notNull().references(() => mktSocialAccounts.id, { onDelete: 'cascade' }),\n name: text('name').notNull(),\n status: text('status').notNull().default('active'),\n weeksCount: integer('weeks_count').notNull().default(8),\n startDate: date('start_date'),\n objective: text('objective'),\n tone: text('tone'),\n pillars: jsonb('pillars').notNull().default([]),\n formats: jsonb('formats').notNull().default([]),\n weeklyFrequency: integer('weekly_frequency').notNull().default(3),\n briefMd: text('brief_md').notNull().default(''),\n ...timestamps,\n}, (t) => [\n index('idx_plg_marketing_content_plans_tenant').on(t.tenantId),\n index('idx_plg_marketing_content_plans_account').on(t.accountId),\n])\n\nexport const mktContentPosts = pgTable('plg_marketing_content_posts', {\n id: uuid('id').primaryKey().defaultRandom(),\n tenantId: tenantId(),\n planId: uuid('plan_id').notNull().references(() => mktContentPlans.id, { onDelete: 'cascade' }),\n weekNumber: integer('week_number').notNull().default(1),\n position: integer('position').notNull().default(0),\n title: text('title').notNull(),\n format: text('format').notNull().default('reel'),\n status: text('status').notNull().default('idea'),\n scheduledDate: date('scheduled_date'),\n // Target platforms for this post; empty = inherit the account's platforms\n platforms: text('platforms').array().notNull().default([]),\n // Recording-day checklist [{ id, text, done }]\n checklist: jsonb('checklist').notNull().default([]),\n // Uploaded asset (static posts: caption + final art instead of a script)\n mediaUrl: text('media_url'),\n hook: text('hook'),\n cta: text('cta'),\n contentMd: text('content_md').notNull().default(''),\n ...timestamps,\n}, (t) => [\n index('idx_plg_marketing_content_posts_tenant').on(t.tenantId),\n index('idx_plg_marketing_content_posts_plan').on(t.planId, t.weekNumber, t.position),\n index('idx_plg_marketing_content_posts_status').on(t.tenantId, t.status),\n])\n"]}