@plyaz/types 1.39.5 → 1.39.6

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.
@@ -81,19 +81,25 @@ var formCampaignSchema = /* @__PURE__ */ __name(({ maxFunding }) => zod.z.object
81
81
  youtubeHandle: zod.z.string().max(50, "components.CreateCampaign.Form.errors.youtubeMax" /* YoutubeMax */).regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, "components.CreateCampaign.Form.errors.youtubeInvalid" /* YoutubeInvalid */).optional()
82
82
  }), "formCampaignSchema");
83
83
  var CreateCampaignSchema = zod.z.object({
84
+ // REQUIRED
84
85
  creator_id: zod.z.string().uuid(),
85
86
  title: zod.z.string().min(3).max(60),
86
87
  subtitle: zod.z.string().min(1).max(200),
87
88
  story: zod.z.string().min(10).max(1e3),
88
89
  funding_target: zod.z.number().positive(),
89
- duration: zod.z.number().min(7).max(365).optional(),
90
+ duration: zod.z.number().min(7).max(365),
91
+ start_date: zod.z.string(),
92
+ // ISO date string
93
+ campaign_images: zod.z.array(zod.z.string().uuid()).min(1),
94
+ campaign_videos: zod.z.array(zod.z.string().uuid()).min(1),
95
+ // OPTIONAL
90
96
  location_region: zod.z.string().max(100).optional(),
91
97
  location_city: zod.z.string().max(100).optional(),
92
98
  sport: zod.z.string().max(50).optional(),
93
99
  category: zod.z.string().max(50).optional(),
94
100
  tags: zod.z.array(zod.z.string()).optional(),
95
- campaign_images: zod.z.array(zod.z.string().uuid()).optional(),
96
- campaign_videos: zod.z.array(zod.z.string().uuid()).optional()
101
+ // OPTIONAL (DB default ACTIVE)
102
+ status: zod.z.enum(["DRAFT", "ACTIVE"]).optional()
97
103
  });
98
104
  var UpdateCampaignSchema = CreateCampaignSchema.extend({
99
105
  id: zod.z.string().uuid()
@@ -131,15 +137,15 @@ var CampaignResponseSchema = zod.z.object({
131
137
  story: zod.z.string(),
132
138
  funding_target: zod.z.number(),
133
139
  status: zod.z.nativeEnum(CAMPAIGN_STATUS),
134
- campaign_images: zod.z.array(zod.z.string()).optional(),
135
- start_date: zod.z.string().datetime().optional(),
136
- duration: zod.z.number().optional(),
140
+ campaign_images: zod.z.array(zod.z.string()),
141
+ start_date: zod.z.string().datetime(),
142
+ duration: zod.z.number(),
137
143
  location_region: zod.z.string().optional(),
138
144
  location_city: zod.z.string().optional(),
139
145
  sport: zod.z.string().optional(),
140
146
  category: zod.z.string().optional(),
141
147
  tags: zod.z.array(zod.z.string()).optional(),
142
- campaign_videos: zod.z.array(zod.z.string()).optional(),
148
+ campaign_videos: zod.z.array(zod.z.string()),
143
149
  first_contribution_at: zod.z.string().datetime().optional(),
144
150
  created_at: zod.z.string().datetime(),
145
151
  updated_at: zod.z.string().datetime(),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/campaign/enums.ts","../../src/campaign/schemas.ts"],"names":["CAMPAIGN_STATUS","MILESTONE_TRIGGER_TYPE","MILESTONE_STATUS","z"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Enum containing error message keys for campaign creation form validation.\n * Contains localized error message keys that map to translation strings.\n */\nexport enum CREATE_CAMPAIGN_ERRORS {\n /** Error when campaign title is required but not provided */\n TitleRequired = 'components.CreateCampaign.Form.errors.titleRequired',\n /** Error when campaign title exceeds maximum length */\n TitleMax = 'components.CreateCampaign.Form.errors.titleMax',\n /** Error when campaign subtitle is required but not provided */\n SubtitleRequired = 'components.CreateCampaign.Form.errors.subtitleRequired',\n /** Error when campaign subtitle exceeds maximum length */\n SubtitleMax = 'components.CreateCampaign.Form.errors.subtitleMax',\n /** Error when campaign image is required but not provided */\n CampaignImageRequired = 'components.CreateCampaign.Form.errors.campaignImageRequired',\n /** Error when start date is required but not provided */\n StartDateRequired = 'components.CreateCampaign.Form.errors.startDateRequired',\n /** Error when start date format is invalid */\n StartDateInvalid = 'components.CreateCampaign.Form.errors.startDateInvalid',\n /** Error when start date is not in the future */\n StartDateFuture = 'components.CreateCampaign.Form.errors.startDateFuture',\n /** Error when campaign duration is required but not selected */\n DurationRequired = 'components.CreateCampaign.Form.errors.durationRequired',\n /** Error when campaign story is required but not provided */\n StoryRequired = 'components.CreateCampaign.Form.errors.storyRequired',\n /** Error when campaign story exceeds maximum length */\n StoryMax = 'components.CreateCampaign.Form.errors.storyMax',\n /** Error when video URL is from an unsupported provider */\n VideoInvalidProvider = 'components.CreateCampaign.Form.errors.videoInvalidProvider',\n /** Error when funding target is required but not provided */\n FundingRequired = 'components.CreateCampaign.Form.errors.fundingRequired',\n /** Error when funding target is outside allowed range */\n FundingRange = 'components.CreateCampaign.Form.errors.fundingRange',\n /** Error when Instagram handle exceeds maximum length */\n InstagramMax = 'components.CreateCampaign.Form.errors.instagramMax',\n /** Error when Instagram handle format is invalid */\n InstagramInvalid = 'components.CreateCampaign.Form.errors.instagramInvalid',\n /** Error when TikTok handle exceeds maximum length */\n TiktokMax = 'components.CreateCampaign.Form.errors.tiktokMax',\n /** Error when TikTok handle format is invalid */\n TiktokInvalid = 'components.CreateCampaign.Form.errors.tiktokInvalid',\n /** Error when YouTube handle exceeds maximum length */\n YoutubeMax = 'components.CreateCampaign.Form.errors.youtubeMax',\n /** Error when YouTube handle format is invalid */\n YoutubeInvalid = 'components.CreateCampaign.Form.errors.youtubeInvalid',\n}\n\n/**\n * Type representing all possible error keys for campaign creation form validation\n */\nexport type CreateCampaignErrorKey = keyof typeof CREATE_CAMPAIGN_ERRORS;\n/**\n * Campaign status enum matching database schema\n */\nexport enum CAMPAIGN_STATUS {\n Draft = 'DRAFT',\n Pending = 'PENDING',\n Active = 'ACTIVE',\n Completed = 'COMPLETED',\n Closed = 'CLOSED',\n Cancelled = 'CANCELLED',\n Rejected = 'REJECTED',\n}\n\n/**\n * Milestone trigger types\n */\nexport enum MILESTONE_TRIGGER_TYPE {\n FundingPercentage = 'FUNDING_PERCENTAGE',\n FundingAmount = 'FUNDING_AMOUNT',\n BackerCount = 'BACKER_COUNT',\n TimeBased = 'TIME_BASED',\n Manual = 'MANUAL',\n}\n\n/**\n * Milestone status\n */\nexport enum MILESTONE_STATUS {\n Pending = 'PENDING',\n Achieved = 'ACHIEVED',\n Verified = 'VERIFIED',\n PayoutReady = 'PAYOUT_READY',\n Completed = 'COMPLETED',\n}\n","/* eslint-disable no-magic-numbers */\nimport { z } from 'zod';\n\nimport { CREATE_CAMPAIGN_ERRORS as ERR, CAMPAIGN_STATUS } from './enums';\n\n/**\n * Zod schema for campaign creation form validation.\n * Validates all required fields for creating a new campaign including:\n * - Basic info (title, subtitle, image)\n * - Timeline (start date, duration)\n * - Content (story, video highlight)\n * - Funding target\n * - Social media handles\n *\n * @param config - Configuration object\n * @param config.maxFunding - Maximum funding amount allowed for campaigns\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types\nexport const formCampaignSchema = ({ maxFunding }: { maxFunding: number }) =>\n z.object({\n title: z.string().min(1, ERR.TitleRequired).max(60, ERR.TitleMax),\n subtitle: z.string().min(1, ERR.SubtitleRequired).max(200, ERR.SubtitleMax),\n campaignImage: z.any().refine(val => val instanceof File, {\n message: ERR.CampaignImageRequired,\n }),\n startDate: z\n .date({\n error: ERR.StartDateRequired,\n })\n .refine(date => date instanceof Date && !isNaN(date.getTime()), {\n message: ERR.StartDateInvalid,\n })\n .refine(date => date >= new Date(), {\n message: ERR.StartDateFuture,\n }),\n duration: z\n .union([z.literal(30), z.literal(60), z.literal(90)])\n .nullable()\n .refine(val => val !== null, {\n message: ERR.DurationRequired,\n }),\n story: z.string().min(1, ERR.StoryRequired).max(10000, ERR.StoryMax),\n videoHighlight: z\n .string()\n .refine(\n url => {\n if (!url || url.trim() === '') return true;\n try {\n const urlObj = new URL(url);\n const hostname = urlObj.hostname.toLowerCase();\n return (\n hostname.includes('youtube.com') ||\n hostname.includes('youtu.be') ||\n hostname.includes('tiktok.com') ||\n hostname.includes('vimeo.com')\n );\n } catch {\n return false;\n }\n },\n {\n message: ERR.VideoInvalidProvider,\n }\n )\n .optional(),\n fundingTarget: z\n .string()\n .min(1, ERR.FundingRequired)\n .refine(\n val => {\n const num = Number.parseFloat(val ?? '');\n return !isNaN(num) && num > 0 && num <= maxFunding;\n },\n {\n message: ERR.FundingRange,\n }\n ),\n instagramHandle: z\n .string()\n .max(30, ERR.InstagramMax)\n .regex(/^$|^@?(?!.*\\.\\.)(?!.*\\.$)[a-zA-Z0-9._]{1,30}$/, ERR.InstagramInvalid)\n .optional(),\n tiktokHandle: z\n .string()\n .max(24, ERR.TiktokMax)\n .regex(/^$|^@?[a-zA-Z0-9][a-zA-Z0-9._]{1,23}$/, ERR.TiktokInvalid)\n .optional(),\n youtubeHandle: z\n .string()\n .max(50, ERR.YoutubeMax)\n .regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, ERR.YoutubeInvalid)\n .optional(),\n });\n\n/**\n * Create campaign schema\n */\nexport const CreateCampaignSchema = z.object({\n creator_id: z.string().uuid(),\n title: z.string().min(3).max(60),\n subtitle: z.string().min(1).max(200),\n story: z.string().min(10).max(1000),\n funding_target: z.number().positive(),\n duration: z.number().min(7).max(365).optional(),\n location_region: z.string().max(100).optional(),\n location_city: z.string().max(100).optional(),\n sport: z.string().max(50).optional(),\n category: z.string().max(50).optional(),\n tags: z.array(z.string()).optional(),\n campaign_images: z.array(z.string().uuid()).optional(),\n campaign_videos: z.array(z.string().uuid()).optional(),\n});\n\n/**\n * Update campaign schema\n */\nexport const UpdateCampaignSchema = CreateCampaignSchema.extend({\n id: z.string().uuid(),\n});\n\n/**\n * Patch campaign schema\n */\nexport const PatchCampaignSchema = CreateCampaignSchema.partial().extend({\n id: z.string().uuid().optional(),\n});\n\n/**\n * Delete campaign schema\n */\nexport const DeleteCampaignSchema = z.object({\n // Soft delete flag\n soft: z.boolean().default(true),\n\n // Reason for audit\n reason: z.string().trim().optional(),\n});\n\n/**\n * Query campaign schema\n */\nexport const QueryCampaignSchema = z.object({\n // Pagination\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(20),\n\n // Sorting\n sort_by: z.enum(['title', 'funding_target', 'created_at', 'updated_at']).default('created_at'),\n sort_order: z.enum(['asc', 'desc']).default('desc'),\n\n // Filters\n status: z.nativeEnum(CAMPAIGN_STATUS).optional(),\n creator_id: z.string().uuid().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n location_region: z.string().optional(),\n\n // Search\n search: z.string().trim().optional(),\n});\n\n/**\n * Campaign response schema (API response shape - snake_case)\n */\nexport const CampaignResponseSchema = z.object({\n id: z.string().uuid(),\n creator_id: z.string().uuid(),\n title: z.string(),\n subtitle: z.string(),\n story: z.string(),\n funding_target: z.number(),\n status: z.nativeEnum(CAMPAIGN_STATUS),\n campaign_images: z.array(z.string()).optional(),\n start_date: z.string().datetime().optional(),\n duration: z.number().optional(),\n location_region: z.string().optional(),\n location_city: z.string().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n tags: z.array(z.string()).optional(),\n campaign_videos: z.array(z.string()).optional(),\n first_contribution_at: z.string().datetime().optional(),\n created_at: z.string().datetime(),\n updated_at: z.string().datetime(),\n deleted_at: z.string().datetime().optional(),\n});\n\n/**\n * Campaign list response schema with pagination\n */\nexport const CampaignListResponseSchema = z.object({\n data: z.array(CampaignResponseSchema),\n meta: z.object({\n page: z.number(),\n limit: z.number(),\n total: z.number(),\n total_pages: z.number(),\n }),\n});\n\n/**\n * Type inferred from the campaign form schema for form validation\n */\nexport type FormCampaignData = z.infer<ReturnType<typeof formCampaignSchema>>;\n"]}
1
+ {"version":3,"sources":["../../src/campaign/enums.ts","../../src/campaign/schemas.ts"],"names":["CAMPAIGN_STATUS","MILESTONE_TRIGGER_TYPE","MILESTONE_STATUS","z"],"mappings":";;;;;;;;;AAsDO,IAAK,eAAA,qBAAAA,gBAAAA,KAAL;AACL,EAAAA,iBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,iBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,iBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,iBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,iBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,iBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,iBAAA,UAAA,CAAA,GAAW,UAAA;AAPD,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AAaL,IAAK,sBAAA,qBAAAC,uBAAAA,KAAL;AACL,EAAAA,wBAAA,mBAAA,CAAA,GAAoB,oBAAA;AACpB,EAAAA,wBAAA,eAAA,CAAA,GAAgB,gBAAA;AAChB,EAAAA,wBAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,wBAAA,WAAA,CAAA,GAAY,YAAA;AACZ,EAAAA,wBAAA,QAAA,CAAA,GAAS,QAAA;AALC,EAAA,OAAAA,uBAAAA;AAAA,CAAA,EAAA,sBAAA,IAAA,EAAA;AAWL,IAAK,gBAAA,qBAAAC,iBAAAA,KAAL;AACL,EAAAA,kBAAA,SAAA,CAAA,GAAU,SAAA;AACV,EAAAA,kBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,kBAAA,UAAA,CAAA,GAAW,UAAA;AACX,EAAAA,kBAAA,aAAA,CAAA,GAAc,cAAA;AACd,EAAAA,kBAAA,WAAA,CAAA,GAAY,WAAA;AALF,EAAA,OAAAA,iBAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA;;;AC5DL,IAAM,qCAAqB,MAAA,CAAA,CAAC,EAAE,UAAA,EAAW,KAC9CC,MAAE,MAAA,CAAO;AAAA,EACP,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAA,EAAA,qDAAA,qBAAoB,CAAE,IAAI,EAAA,EAAA,gDAAA,gBAAgB;AAAA,EAChE,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAA,EAAA,wDAAA,wBAAuB,CAAE,IAAI,GAAA,EAAA,mDAAA,mBAAoB;AAAA,EAC1E,eAAeA,KAAA,CAAE,GAAA,GAAM,MAAA,CAAO,CAAA,GAAA,KAAO,eAAe,IAAA,EAAM;AAAA,IACxD,OAAA,EAAA,6DAAA;AAAA,GACD,CAAA;AAAA,EACD,SAAA,EAAWA,MACR,IAAA,CAAK;AAAA,IACJ,KAAA,EAAA,yDAAA;AAAA,GACD,CAAA,CACA,MAAA,CAAO,CAAA,IAAA,KAAQ,IAAA,YAAgB,IAAA,IAAQ,CAAC,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS,CAAA,EAAG;AAAA,IAC9D,OAAA,EAAA,wDAAA;AAAA,GACD,CAAA,CACA,MAAA,CAAO,UAAQ,IAAA,oBAAQ,IAAI,MAAK,EAAG;AAAA,IAClC,OAAA,EAAA,uDAAA;AAAA,GACD,CAAA;AAAA,EACH,QAAA,EAAUA,MACP,KAAA,CAAM,CAACA,MAAE,OAAA,CAAQ,EAAE,CAAA,EAAGA,KAAA,CAAE,OAAA,CAAQ,EAAE,GAAGA,KAAA,CAAE,OAAA,CAAQ,EAAE,CAAC,CAAC,CAAA,CACnD,UAAS,CACT,MAAA,CAAO,CAAA,GAAA,KAAO,GAAA,KAAQ,IAAA,EAAM;AAAA,IAC3B,OAAA,EAAA,wDAAA;AAAA,GACD,CAAA;AAAA,EACH,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAA,EAAA,qDAAA,qBAAoB,CAAE,IAAI,GAAA,EAAA,gDAAA,gBAAmB;AAAA,EACnE,cAAA,EAAgBA,KAAA,CACb,MAAA,EAAO,CACP,MAAA;AAAA,IACC,CAAA,GAAA,KAAO;AACL,MAAA,IAAI,CAAC,GAAA,IAAO,GAAA,CAAI,IAAA,EAAK,KAAM,IAAI,OAAO,IAAA;AACtC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAI,GAAA,CAAI,GAAG,CAAA;AAC1B,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,WAAA,EAAY;AAC7C,QAAA,OACE,QAAA,CAAS,QAAA,CAAS,aAAa,CAAA,IAC/B,SAAS,QAAA,CAAS,UAAU,CAAA,IAC5B,QAAA,CAAS,QAAA,CAAS,YAAY,CAAA,IAC9B,QAAA,CAAS,SAAS,WAAW,CAAA;AAAA,MAEjC,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF,CAAA;AAAA,IACA;AAAA,MACE,OAAA,EAAA,4DAAA;AAAA;AACF,IAED,QAAA,EAAS;AAAA,EACZ,eAAeA,KAAA,CACZ,MAAA,EAAO,CACP,GAAA,CAAI,iFAAsB,CAC1B,MAAA;AAAA,IACC,CAAA,GAAA,KAAO;AACL,MAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,GAAA,IAAO,EAAE,CAAA;AACvC,MAAA,OAAO,CAAC,KAAA,CAAM,GAAG,CAAA,IAAK,GAAA,GAAM,KAAK,GAAA,IAAO,UAAA;AAAA,IAC1C,CAAA;AAAA,IACA;AAAA,MACE,OAAA,EAAA,oDAAA;AAAA;AACF,GACF;AAAA,EACF,eAAA,EAAiBA,KAAA,CACd,MAAA,EAAO,CACP,GAAA,CAAI,4EAAoB,CACxB,KAAA,CAAM,+CAAA,EAAA,wDAAA,wBAAqE,CAC3E,QAAA,EAAS;AAAA,EACZ,YAAA,EAAcA,KAAA,CACX,MAAA,EAAO,CACP,GAAA,CAAI,sEAAiB,CACrB,KAAA,CAAM,uCAAA,EAAA,qDAAA,qBAA0D,CAChE,QAAA,EAAS;AAAA,EACZ,aAAA,EAAeA,KAAA,CACZ,MAAA,EAAO,CACP,GAAA,CAAI,wEAAkB,CACtB,KAAA,CAAM,kDAAA,EAAA,sDAAA,sBAAsE,CAC5E,QAAA;AACL,CAAC,CAAA,EA1E+B,oBAAA;AA+E3B,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA;AAAA,EAE3C,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EAC5B,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA,EAC/B,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA,EACnC,KAAA,EAAOA,MAAE,MAAA,EAAO,CAAE,IAAI,EAAE,CAAA,CAAE,IAAI,GAAI,CAAA;AAAA,EAClC,cAAA,EAAgBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACpC,QAAA,EAAUA,MAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,IAAI,GAAG,CAAA;AAAA,EACnC,UAAA,EAAYA,MAAE,MAAA,EAAO;AAAA;AAAA,EACrB,eAAA,EAAiBA,KAAA,CAAE,KAAA,CAAMA,KAAA,CAAE,MAAA,GAAS,IAAA,EAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA;AAAA,EACjD,eAAA,EAAiBA,KAAA,CAAE,KAAA,CAAMA,KAAA,CAAE,MAAA,GAAS,IAAA,EAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA;AAAA;AAAA,EAEjD,iBAAiBA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA,EAC9C,eAAeA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS;AAAA,EAC5C,OAAOA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,EAAE,EAAE,QAAA,EAAS;AAAA,EACnC,UAAUA,KAAA,CAAE,MAAA,GAAS,GAAA,CAAI,EAAE,EAAE,QAAA,EAAS;AAAA,EACtC,MAAMA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA;AAAA,EAEnC,MAAA,EAAQA,MAAE,IAAA,CAAK,CAAC,SAAS,QAAQ,CAAC,EAAE,QAAA;AACtC,CAAC;AAKM,IAAM,oBAAA,GAAuB,qBAAqB,MAAA,CAAO;AAAA,EAC9D,EAAA,EAAIA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA;AACjB,CAAC;AAKM,IAAM,mBAAA,GAAsB,oBAAA,CAAqB,OAAA,EAAQ,CAAE,MAAA,CAAO;AAAA,EACvE,IAAIA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA;AACxB,CAAC;AAKM,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA;AAAA,EAE3C,IAAA,EAAMA,KAAA,CAAE,OAAA,EAAQ,CAAE,QAAQ,IAAI,CAAA;AAAA;AAAA,EAG9B,QAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA;AAC5B,CAAC;AAKM,IAAM,mBAAA,GAAsBA,MAAE,MAAA,CAAO;AAAA;AAAA,EAE1C,IAAA,EAAMA,KAAA,CAAE,MAAA,CAAO,MAAA,EAAO,CAAE,KAAI,CAAE,QAAA,EAAS,CAAE,OAAA,CAAQ,CAAC,CAAA;AAAA,EAClD,KAAA,EAAOA,KAAA,CAAE,MAAA,CAAO,MAAA,GAAS,GAAA,EAAI,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA,CAAE,QAAQ,EAAE,CAAA;AAAA;AAAA,EAGzD,OAAA,EAASA,KAAA,CAAE,IAAA,CAAK,CAAC,OAAA,EAAS,gBAAA,EAAkB,YAAA,EAAc,YAAY,CAAC,CAAA,CAAE,OAAA,CAAQ,YAAY,CAAA;AAAA,EAC7F,UAAA,EAAYA,MAAE,IAAA,CAAK,CAAC,OAAO,MAAM,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA;AAAA;AAAA,EAGlD,MAAA,EAAQA,KAAA,CAAE,UAAA,CAAW,eAAe,EAAE,QAAA,EAAS;AAAA,EAC/C,YAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA,EAAS;AAAA,EACvC,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,eAAA,EAAiBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA;AAAA,EAGrC,QAAQA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,GAAO,QAAA;AAC5B,CAAC;AAKM,IAAM,sBAAA,GAAyBA,MAAE,MAAA,CAAO;AAAA,EAC7C,EAAA,EAAIA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EACpB,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAA,EAAK;AAAA,EAC5B,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA,EACnB,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,EAChB,cAAA,EAAgBA,MAAE,MAAA,EAAO;AAAA,EACzB,MAAA,EAAQA,KAAA,CAAE,UAAA,CAAW,eAAe,CAAA;AAAA,EACpC,eAAA,EAAiBA,KAAA,CAAE,KAAA,CAAMA,KAAA,CAAE,QAAQ,CAAA;AAAA,EACnC,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,QAAA,EAAUA,MAAE,MAAA,EAAO;AAAA,EACnB,eAAA,EAAiBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACrC,aAAA,EAAeA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EACnC,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC3B,QAAA,EAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAC9B,MAAMA,KAAA,CAAE,KAAA,CAAMA,MAAE,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,EACnC,eAAA,EAAiBA,KAAA,CAAE,KAAA,CAAMA,KAAA,CAAE,QAAQ,CAAA;AAAA,EACnC,uBAAuBA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA,EAAS;AAAA,EACtD,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,UAAA,EAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,EAAS;AAAA,EAChC,YAAYA,KAAA,CAAE,MAAA,EAAO,CAAE,QAAA,GAAW,QAAA;AACpC,CAAC;AAKM,IAAM,0BAAA,GAA6BA,MAAE,MAAA,CAAO;AAAA,EACjD,IAAA,EAAMA,KAAA,CAAE,KAAA,CAAM,sBAAsB,CAAA;AAAA,EACpC,IAAA,EAAMA,MAAE,MAAA,CAAO;AAAA,IACb,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,IACf,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,IAChB,KAAA,EAAOA,MAAE,MAAA,EAAO;AAAA,IAChB,WAAA,EAAaA,MAAE,MAAA;AAAO,GACvB;AACH,CAAC","file":"index.cjs","sourcesContent":["/**\n * Enum containing error message keys for campaign creation form validation.\n * Contains localized error message keys that map to translation strings.\n */\nexport enum CREATE_CAMPAIGN_ERRORS {\n /** Error when campaign title is required but not provided */\n TitleRequired = 'components.CreateCampaign.Form.errors.titleRequired',\n /** Error when campaign title exceeds maximum length */\n TitleMax = 'components.CreateCampaign.Form.errors.titleMax',\n /** Error when campaign subtitle is required but not provided */\n SubtitleRequired = 'components.CreateCampaign.Form.errors.subtitleRequired',\n /** Error when campaign subtitle exceeds maximum length */\n SubtitleMax = 'components.CreateCampaign.Form.errors.subtitleMax',\n /** Error when campaign image is required but not provided */\n CampaignImageRequired = 'components.CreateCampaign.Form.errors.campaignImageRequired',\n /** Error when start date is required but not provided */\n StartDateRequired = 'components.CreateCampaign.Form.errors.startDateRequired',\n /** Error when start date format is invalid */\n StartDateInvalid = 'components.CreateCampaign.Form.errors.startDateInvalid',\n /** Error when start date is not in the future */\n StartDateFuture = 'components.CreateCampaign.Form.errors.startDateFuture',\n /** Error when campaign duration is required but not selected */\n DurationRequired = 'components.CreateCampaign.Form.errors.durationRequired',\n /** Error when campaign story is required but not provided */\n StoryRequired = 'components.CreateCampaign.Form.errors.storyRequired',\n /** Error when campaign story exceeds maximum length */\n StoryMax = 'components.CreateCampaign.Form.errors.storyMax',\n /** Error when video URL is from an unsupported provider */\n VideoInvalidProvider = 'components.CreateCampaign.Form.errors.videoInvalidProvider',\n /** Error when funding target is required but not provided */\n FundingRequired = 'components.CreateCampaign.Form.errors.fundingRequired',\n /** Error when funding target is outside allowed range */\n FundingRange = 'components.CreateCampaign.Form.errors.fundingRange',\n /** Error when Instagram handle exceeds maximum length */\n InstagramMax = 'components.CreateCampaign.Form.errors.instagramMax',\n /** Error when Instagram handle format is invalid */\n InstagramInvalid = 'components.CreateCampaign.Form.errors.instagramInvalid',\n /** Error when TikTok handle exceeds maximum length */\n TiktokMax = 'components.CreateCampaign.Form.errors.tiktokMax',\n /** Error when TikTok handle format is invalid */\n TiktokInvalid = 'components.CreateCampaign.Form.errors.tiktokInvalid',\n /** Error when YouTube handle exceeds maximum length */\n YoutubeMax = 'components.CreateCampaign.Form.errors.youtubeMax',\n /** Error when YouTube handle format is invalid */\n YoutubeInvalid = 'components.CreateCampaign.Form.errors.youtubeInvalid',\n}\n\n/**\n * Type representing all possible error keys for campaign creation form validation\n */\nexport type CreateCampaignErrorKey = keyof typeof CREATE_CAMPAIGN_ERRORS;\n/**\n * Campaign status enum matching database schema\n */\nexport enum CAMPAIGN_STATUS {\n Draft = 'DRAFT',\n Pending = 'PENDING',\n Active = 'ACTIVE',\n Completed = 'COMPLETED',\n Closed = 'CLOSED',\n Cancelled = 'CANCELLED',\n Rejected = 'REJECTED',\n}\n\n/**\n * Milestone trigger types\n */\nexport enum MILESTONE_TRIGGER_TYPE {\n FundingPercentage = 'FUNDING_PERCENTAGE',\n FundingAmount = 'FUNDING_AMOUNT',\n BackerCount = 'BACKER_COUNT',\n TimeBased = 'TIME_BASED',\n Manual = 'MANUAL',\n}\n\n/**\n * Milestone status\n */\nexport enum MILESTONE_STATUS {\n Pending = 'PENDING',\n Achieved = 'ACHIEVED',\n Verified = 'VERIFIED',\n PayoutReady = 'PAYOUT_READY',\n Completed = 'COMPLETED',\n}\n","/* eslint-disable no-magic-numbers */\nimport { z } from 'zod';\n\nimport { CREATE_CAMPAIGN_ERRORS as ERR, CAMPAIGN_STATUS } from './enums';\n\n/**\n * Zod schema for campaign creation form validation.\n * Validates all required fields for creating a new campaign including:\n * - Basic info (title, subtitle, image)\n * - Timeline (start date, duration)\n * - Content (story, video highlight)\n * - Funding target\n * - Social media handles\n *\n * @param config - Configuration object\n * @param config.maxFunding - Maximum funding amount allowed for campaigns\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types\nexport const formCampaignSchema = ({ maxFunding }: { maxFunding: number }) =>\n z.object({\n title: z.string().min(1, ERR.TitleRequired).max(60, ERR.TitleMax),\n subtitle: z.string().min(1, ERR.SubtitleRequired).max(200, ERR.SubtitleMax),\n campaignImage: z.any().refine(val => val instanceof File, {\n message: ERR.CampaignImageRequired,\n }),\n startDate: z\n .date({\n error: ERR.StartDateRequired,\n })\n .refine(date => date instanceof Date && !isNaN(date.getTime()), {\n message: ERR.StartDateInvalid,\n })\n .refine(date => date >= new Date(), {\n message: ERR.StartDateFuture,\n }),\n duration: z\n .union([z.literal(30), z.literal(60), z.literal(90)])\n .nullable()\n .refine(val => val !== null, {\n message: ERR.DurationRequired,\n }),\n story: z.string().min(1, ERR.StoryRequired).max(10000, ERR.StoryMax),\n videoHighlight: z\n .string()\n .refine(\n url => {\n if (!url || url.trim() === '') return true;\n try {\n const urlObj = new URL(url);\n const hostname = urlObj.hostname.toLowerCase();\n return (\n hostname.includes('youtube.com') ||\n hostname.includes('youtu.be') ||\n hostname.includes('tiktok.com') ||\n hostname.includes('vimeo.com')\n );\n } catch {\n return false;\n }\n },\n {\n message: ERR.VideoInvalidProvider,\n }\n )\n .optional(),\n fundingTarget: z\n .string()\n .min(1, ERR.FundingRequired)\n .refine(\n val => {\n const num = Number.parseFloat(val ?? '');\n return !isNaN(num) && num > 0 && num <= maxFunding;\n },\n {\n message: ERR.FundingRange,\n }\n ),\n instagramHandle: z\n .string()\n .max(30, ERR.InstagramMax)\n .regex(/^$|^@?(?!.*\\.\\.)(?!.*\\.$)[a-zA-Z0-9._]{1,30}$/, ERR.InstagramInvalid)\n .optional(),\n tiktokHandle: z\n .string()\n .max(24, ERR.TiktokMax)\n .regex(/^$|^@?[a-zA-Z0-9][a-zA-Z0-9._]{1,23}$/, ERR.TiktokInvalid)\n .optional(),\n youtubeHandle: z\n .string()\n .max(50, ERR.YoutubeMax)\n .regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, ERR.YoutubeInvalid)\n .optional(),\n });\n\n/**\n * Create campaign schema\n */\nexport const CreateCampaignSchema = z.object({\n // REQUIRED\n creator_id: z.string().uuid(),\n title: z.string().min(3).max(60),\n subtitle: z.string().min(1).max(200),\n story: z.string().min(10).max(1000),\n funding_target: z.number().positive(),\n duration: z.number().min(7).max(365),\n start_date: z.string(), // ISO date string\n campaign_images: z.array(z.string().uuid()).min(1),\n campaign_videos: z.array(z.string().uuid()).min(1),\n // OPTIONAL\n location_region: z.string().max(100).optional(),\n location_city: z.string().max(100).optional(),\n sport: z.string().max(50).optional(),\n category: z.string().max(50).optional(),\n tags: z.array(z.string()).optional(),\n // OPTIONAL (DB default ACTIVE)\n status: z.enum(['DRAFT', 'ACTIVE']).optional(),\n});\n\n/**\n * Update campaign schema\n */\nexport const UpdateCampaignSchema = CreateCampaignSchema.extend({\n id: z.string().uuid(),\n});\n\n/**\n * Patch campaign schema\n */\nexport const PatchCampaignSchema = CreateCampaignSchema.partial().extend({\n id: z.string().uuid().optional(),\n});\n\n/**\n * Delete campaign schema\n */\nexport const DeleteCampaignSchema = z.object({\n // Soft delete flag\n soft: z.boolean().default(true),\n\n // Reason for audit\n reason: z.string().trim().optional(),\n});\n\n/**\n * Query campaign schema\n */\nexport const QueryCampaignSchema = z.object({\n // Pagination\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(20),\n\n // Sorting\n sort_by: z.enum(['title', 'funding_target', 'created_at', 'updated_at']).default('created_at'),\n sort_order: z.enum(['asc', 'desc']).default('desc'),\n\n // Filters\n status: z.nativeEnum(CAMPAIGN_STATUS).optional(),\n creator_id: z.string().uuid().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n location_region: z.string().optional(),\n\n // Search\n search: z.string().trim().optional(),\n});\n\n/**\n * Campaign response schema (API response shape - snake_case)\n */\nexport const CampaignResponseSchema = z.object({\n id: z.string().uuid(),\n creator_id: z.string().uuid(),\n title: z.string(),\n subtitle: z.string(),\n story: z.string(),\n funding_target: z.number(),\n status: z.nativeEnum(CAMPAIGN_STATUS),\n campaign_images: z.array(z.string()),\n start_date: z.string().datetime(),\n duration: z.number(),\n location_region: z.string().optional(),\n location_city: z.string().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n tags: z.array(z.string()).optional(),\n campaign_videos: z.array(z.string()),\n first_contribution_at: z.string().datetime().optional(),\n created_at: z.string().datetime(),\n updated_at: z.string().datetime(),\n deleted_at: z.string().datetime().optional(),\n});\n\n/**\n * Campaign list response schema with pagination\n */\nexport const CampaignListResponseSchema = z.object({\n data: z.array(CampaignResponseSchema),\n meta: z.object({\n page: z.number(),\n limit: z.number(),\n total: z.number(),\n total_pages: z.number(),\n }),\n});\n\n/**\n * Type inferred from the campaign form schema for form validation\n */\nexport type FormCampaignData = z.infer<ReturnType<typeof formCampaignSchema>>;"]}
@@ -79,19 +79,25 @@ var formCampaignSchema = /* @__PURE__ */ __name(({ maxFunding }) => z.object({
79
79
  youtubeHandle: z.string().max(50, "components.CreateCampaign.Form.errors.youtubeMax" /* YoutubeMax */).regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, "components.CreateCampaign.Form.errors.youtubeInvalid" /* YoutubeInvalid */).optional()
80
80
  }), "formCampaignSchema");
81
81
  var CreateCampaignSchema = z.object({
82
+ // REQUIRED
82
83
  creator_id: z.string().uuid(),
83
84
  title: z.string().min(3).max(60),
84
85
  subtitle: z.string().min(1).max(200),
85
86
  story: z.string().min(10).max(1e3),
86
87
  funding_target: z.number().positive(),
87
- duration: z.number().min(7).max(365).optional(),
88
+ duration: z.number().min(7).max(365),
89
+ start_date: z.string(),
90
+ // ISO date string
91
+ campaign_images: z.array(z.string().uuid()).min(1),
92
+ campaign_videos: z.array(z.string().uuid()).min(1),
93
+ // OPTIONAL
88
94
  location_region: z.string().max(100).optional(),
89
95
  location_city: z.string().max(100).optional(),
90
96
  sport: z.string().max(50).optional(),
91
97
  category: z.string().max(50).optional(),
92
98
  tags: z.array(z.string()).optional(),
93
- campaign_images: z.array(z.string().uuid()).optional(),
94
- campaign_videos: z.array(z.string().uuid()).optional()
99
+ // OPTIONAL (DB default ACTIVE)
100
+ status: z.enum(["DRAFT", "ACTIVE"]).optional()
95
101
  });
96
102
  var UpdateCampaignSchema = CreateCampaignSchema.extend({
97
103
  id: z.string().uuid()
@@ -129,15 +135,15 @@ var CampaignResponseSchema = z.object({
129
135
  story: z.string(),
130
136
  funding_target: z.number(),
131
137
  status: z.nativeEnum(CAMPAIGN_STATUS),
132
- campaign_images: z.array(z.string()).optional(),
133
- start_date: z.string().datetime().optional(),
134
- duration: z.number().optional(),
138
+ campaign_images: z.array(z.string()),
139
+ start_date: z.string().datetime(),
140
+ duration: z.number(),
135
141
  location_region: z.string().optional(),
136
142
  location_city: z.string().optional(),
137
143
  sport: z.string().optional(),
138
144
  category: z.string().optional(),
139
145
  tags: z.array(z.string()).optional(),
140
- campaign_videos: z.array(z.string()).optional(),
146
+ campaign_videos: z.array(z.string()),
141
147
  first_contribution_at: z.string().datetime().optional(),
142
148
  created_at: z.string().datetime(),
143
149
  updated_at: z.string().datetime(),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/campaign/enums.ts","../../src/campaign/schemas.ts"],"names":["CAMPAIGN_STATUS","MILESTONE_TRIGGER_TYPE","MILESTONE_STATUS"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Enum containing error message keys for campaign creation form validation.\n * Contains localized error message keys that map to translation strings.\n */\nexport enum CREATE_CAMPAIGN_ERRORS {\n /** Error when campaign title is required but not provided */\n TitleRequired = 'components.CreateCampaign.Form.errors.titleRequired',\n /** Error when campaign title exceeds maximum length */\n TitleMax = 'components.CreateCampaign.Form.errors.titleMax',\n /** Error when campaign subtitle is required but not provided */\n SubtitleRequired = 'components.CreateCampaign.Form.errors.subtitleRequired',\n /** Error when campaign subtitle exceeds maximum length */\n SubtitleMax = 'components.CreateCampaign.Form.errors.subtitleMax',\n /** Error when campaign image is required but not provided */\n CampaignImageRequired = 'components.CreateCampaign.Form.errors.campaignImageRequired',\n /** Error when start date is required but not provided */\n StartDateRequired = 'components.CreateCampaign.Form.errors.startDateRequired',\n /** Error when start date format is invalid */\n StartDateInvalid = 'components.CreateCampaign.Form.errors.startDateInvalid',\n /** Error when start date is not in the future */\n StartDateFuture = 'components.CreateCampaign.Form.errors.startDateFuture',\n /** Error when campaign duration is required but not selected */\n DurationRequired = 'components.CreateCampaign.Form.errors.durationRequired',\n /** Error when campaign story is required but not provided */\n StoryRequired = 'components.CreateCampaign.Form.errors.storyRequired',\n /** Error when campaign story exceeds maximum length */\n StoryMax = 'components.CreateCampaign.Form.errors.storyMax',\n /** Error when video URL is from an unsupported provider */\n VideoInvalidProvider = 'components.CreateCampaign.Form.errors.videoInvalidProvider',\n /** Error when funding target is required but not provided */\n FundingRequired = 'components.CreateCampaign.Form.errors.fundingRequired',\n /** Error when funding target is outside allowed range */\n FundingRange = 'components.CreateCampaign.Form.errors.fundingRange',\n /** Error when Instagram handle exceeds maximum length */\n InstagramMax = 'components.CreateCampaign.Form.errors.instagramMax',\n /** Error when Instagram handle format is invalid */\n InstagramInvalid = 'components.CreateCampaign.Form.errors.instagramInvalid',\n /** Error when TikTok handle exceeds maximum length */\n TiktokMax = 'components.CreateCampaign.Form.errors.tiktokMax',\n /** Error when TikTok handle format is invalid */\n TiktokInvalid = 'components.CreateCampaign.Form.errors.tiktokInvalid',\n /** Error when YouTube handle exceeds maximum length */\n YoutubeMax = 'components.CreateCampaign.Form.errors.youtubeMax',\n /** Error when YouTube handle format is invalid */\n YoutubeInvalid = 'components.CreateCampaign.Form.errors.youtubeInvalid',\n}\n\n/**\n * Type representing all possible error keys for campaign creation form validation\n */\nexport type CreateCampaignErrorKey = keyof typeof CREATE_CAMPAIGN_ERRORS;\n/**\n * Campaign status enum matching database schema\n */\nexport enum CAMPAIGN_STATUS {\n Draft = 'DRAFT',\n Pending = 'PENDING',\n Active = 'ACTIVE',\n Completed = 'COMPLETED',\n Closed = 'CLOSED',\n Cancelled = 'CANCELLED',\n Rejected = 'REJECTED',\n}\n\n/**\n * Milestone trigger types\n */\nexport enum MILESTONE_TRIGGER_TYPE {\n FundingPercentage = 'FUNDING_PERCENTAGE',\n FundingAmount = 'FUNDING_AMOUNT',\n BackerCount = 'BACKER_COUNT',\n TimeBased = 'TIME_BASED',\n Manual = 'MANUAL',\n}\n\n/**\n * Milestone status\n */\nexport enum MILESTONE_STATUS {\n Pending = 'PENDING',\n Achieved = 'ACHIEVED',\n Verified = 'VERIFIED',\n PayoutReady = 'PAYOUT_READY',\n Completed = 'COMPLETED',\n}\n","/* eslint-disable no-magic-numbers */\nimport { z } from 'zod';\n\nimport { CREATE_CAMPAIGN_ERRORS as ERR, CAMPAIGN_STATUS } from './enums';\n\n/**\n * Zod schema for campaign creation form validation.\n * Validates all required fields for creating a new campaign including:\n * - Basic info (title, subtitle, image)\n * - Timeline (start date, duration)\n * - Content (story, video highlight)\n * - Funding target\n * - Social media handles\n *\n * @param config - Configuration object\n * @param config.maxFunding - Maximum funding amount allowed for campaigns\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types\nexport const formCampaignSchema = ({ maxFunding }: { maxFunding: number }) =>\n z.object({\n title: z.string().min(1, ERR.TitleRequired).max(60, ERR.TitleMax),\n subtitle: z.string().min(1, ERR.SubtitleRequired).max(200, ERR.SubtitleMax),\n campaignImage: z.any().refine(val => val instanceof File, {\n message: ERR.CampaignImageRequired,\n }),\n startDate: z\n .date({\n error: ERR.StartDateRequired,\n })\n .refine(date => date instanceof Date && !isNaN(date.getTime()), {\n message: ERR.StartDateInvalid,\n })\n .refine(date => date >= new Date(), {\n message: ERR.StartDateFuture,\n }),\n duration: z\n .union([z.literal(30), z.literal(60), z.literal(90)])\n .nullable()\n .refine(val => val !== null, {\n message: ERR.DurationRequired,\n }),\n story: z.string().min(1, ERR.StoryRequired).max(10000, ERR.StoryMax),\n videoHighlight: z\n .string()\n .refine(\n url => {\n if (!url || url.trim() === '') return true;\n try {\n const urlObj = new URL(url);\n const hostname = urlObj.hostname.toLowerCase();\n return (\n hostname.includes('youtube.com') ||\n hostname.includes('youtu.be') ||\n hostname.includes('tiktok.com') ||\n hostname.includes('vimeo.com')\n );\n } catch {\n return false;\n }\n },\n {\n message: ERR.VideoInvalidProvider,\n }\n )\n .optional(),\n fundingTarget: z\n .string()\n .min(1, ERR.FundingRequired)\n .refine(\n val => {\n const num = Number.parseFloat(val ?? '');\n return !isNaN(num) && num > 0 && num <= maxFunding;\n },\n {\n message: ERR.FundingRange,\n }\n ),\n instagramHandle: z\n .string()\n .max(30, ERR.InstagramMax)\n .regex(/^$|^@?(?!.*\\.\\.)(?!.*\\.$)[a-zA-Z0-9._]{1,30}$/, ERR.InstagramInvalid)\n .optional(),\n tiktokHandle: z\n .string()\n .max(24, ERR.TiktokMax)\n .regex(/^$|^@?[a-zA-Z0-9][a-zA-Z0-9._]{1,23}$/, ERR.TiktokInvalid)\n .optional(),\n youtubeHandle: z\n .string()\n .max(50, ERR.YoutubeMax)\n .regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, ERR.YoutubeInvalid)\n .optional(),\n });\n\n/**\n * Create campaign schema\n */\nexport const CreateCampaignSchema = z.object({\n creator_id: z.string().uuid(),\n title: z.string().min(3).max(60),\n subtitle: z.string().min(1).max(200),\n story: z.string().min(10).max(1000),\n funding_target: z.number().positive(),\n duration: z.number().min(7).max(365).optional(),\n location_region: z.string().max(100).optional(),\n location_city: z.string().max(100).optional(),\n sport: z.string().max(50).optional(),\n category: z.string().max(50).optional(),\n tags: z.array(z.string()).optional(),\n campaign_images: z.array(z.string().uuid()).optional(),\n campaign_videos: z.array(z.string().uuid()).optional(),\n});\n\n/**\n * Update campaign schema\n */\nexport const UpdateCampaignSchema = CreateCampaignSchema.extend({\n id: z.string().uuid(),\n});\n\n/**\n * Patch campaign schema\n */\nexport const PatchCampaignSchema = CreateCampaignSchema.partial().extend({\n id: z.string().uuid().optional(),\n});\n\n/**\n * Delete campaign schema\n */\nexport const DeleteCampaignSchema = z.object({\n // Soft delete flag\n soft: z.boolean().default(true),\n\n // Reason for audit\n reason: z.string().trim().optional(),\n});\n\n/**\n * Query campaign schema\n */\nexport const QueryCampaignSchema = z.object({\n // Pagination\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(20),\n\n // Sorting\n sort_by: z.enum(['title', 'funding_target', 'created_at', 'updated_at']).default('created_at'),\n sort_order: z.enum(['asc', 'desc']).default('desc'),\n\n // Filters\n status: z.nativeEnum(CAMPAIGN_STATUS).optional(),\n creator_id: z.string().uuid().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n location_region: z.string().optional(),\n\n // Search\n search: z.string().trim().optional(),\n});\n\n/**\n * Campaign response schema (API response shape - snake_case)\n */\nexport const CampaignResponseSchema = z.object({\n id: z.string().uuid(),\n creator_id: z.string().uuid(),\n title: z.string(),\n subtitle: z.string(),\n story: z.string(),\n funding_target: z.number(),\n status: z.nativeEnum(CAMPAIGN_STATUS),\n campaign_images: z.array(z.string()).optional(),\n start_date: z.string().datetime().optional(),\n duration: z.number().optional(),\n location_region: z.string().optional(),\n location_city: z.string().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n tags: z.array(z.string()).optional(),\n campaign_videos: z.array(z.string()).optional(),\n first_contribution_at: z.string().datetime().optional(),\n created_at: z.string().datetime(),\n updated_at: z.string().datetime(),\n deleted_at: z.string().datetime().optional(),\n});\n\n/**\n * Campaign list response schema with pagination\n */\nexport const CampaignListResponseSchema = z.object({\n data: z.array(CampaignResponseSchema),\n meta: z.object({\n page: z.number(),\n limit: z.number(),\n total: z.number(),\n total_pages: z.number(),\n }),\n});\n\n/**\n * Type inferred from the campaign form schema for form validation\n */\nexport type FormCampaignData = z.infer<ReturnType<typeof formCampaignSchema>>;\n"]}
1
+ {"version":3,"sources":["../../src/campaign/enums.ts","../../src/campaign/schemas.ts"],"names":["CAMPAIGN_STATUS","MILESTONE_TRIGGER_TYPE","MILESTONE_STATUS"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Enum containing error message keys for campaign creation form validation.\n * Contains localized error message keys that map to translation strings.\n */\nexport enum CREATE_CAMPAIGN_ERRORS {\n /** Error when campaign title is required but not provided */\n TitleRequired = 'components.CreateCampaign.Form.errors.titleRequired',\n /** Error when campaign title exceeds maximum length */\n TitleMax = 'components.CreateCampaign.Form.errors.titleMax',\n /** Error when campaign subtitle is required but not provided */\n SubtitleRequired = 'components.CreateCampaign.Form.errors.subtitleRequired',\n /** Error when campaign subtitle exceeds maximum length */\n SubtitleMax = 'components.CreateCampaign.Form.errors.subtitleMax',\n /** Error when campaign image is required but not provided */\n CampaignImageRequired = 'components.CreateCampaign.Form.errors.campaignImageRequired',\n /** Error when start date is required but not provided */\n StartDateRequired = 'components.CreateCampaign.Form.errors.startDateRequired',\n /** Error when start date format is invalid */\n StartDateInvalid = 'components.CreateCampaign.Form.errors.startDateInvalid',\n /** Error when start date is not in the future */\n StartDateFuture = 'components.CreateCampaign.Form.errors.startDateFuture',\n /** Error when campaign duration is required but not selected */\n DurationRequired = 'components.CreateCampaign.Form.errors.durationRequired',\n /** Error when campaign story is required but not provided */\n StoryRequired = 'components.CreateCampaign.Form.errors.storyRequired',\n /** Error when campaign story exceeds maximum length */\n StoryMax = 'components.CreateCampaign.Form.errors.storyMax',\n /** Error when video URL is from an unsupported provider */\n VideoInvalidProvider = 'components.CreateCampaign.Form.errors.videoInvalidProvider',\n /** Error when funding target is required but not provided */\n FundingRequired = 'components.CreateCampaign.Form.errors.fundingRequired',\n /** Error when funding target is outside allowed range */\n FundingRange = 'components.CreateCampaign.Form.errors.fundingRange',\n /** Error when Instagram handle exceeds maximum length */\n InstagramMax = 'components.CreateCampaign.Form.errors.instagramMax',\n /** Error when Instagram handle format is invalid */\n InstagramInvalid = 'components.CreateCampaign.Form.errors.instagramInvalid',\n /** Error when TikTok handle exceeds maximum length */\n TiktokMax = 'components.CreateCampaign.Form.errors.tiktokMax',\n /** Error when TikTok handle format is invalid */\n TiktokInvalid = 'components.CreateCampaign.Form.errors.tiktokInvalid',\n /** Error when YouTube handle exceeds maximum length */\n YoutubeMax = 'components.CreateCampaign.Form.errors.youtubeMax',\n /** Error when YouTube handle format is invalid */\n YoutubeInvalid = 'components.CreateCampaign.Form.errors.youtubeInvalid',\n}\n\n/**\n * Type representing all possible error keys for campaign creation form validation\n */\nexport type CreateCampaignErrorKey = keyof typeof CREATE_CAMPAIGN_ERRORS;\n/**\n * Campaign status enum matching database schema\n */\nexport enum CAMPAIGN_STATUS {\n Draft = 'DRAFT',\n Pending = 'PENDING',\n Active = 'ACTIVE',\n Completed = 'COMPLETED',\n Closed = 'CLOSED',\n Cancelled = 'CANCELLED',\n Rejected = 'REJECTED',\n}\n\n/**\n * Milestone trigger types\n */\nexport enum MILESTONE_TRIGGER_TYPE {\n FundingPercentage = 'FUNDING_PERCENTAGE',\n FundingAmount = 'FUNDING_AMOUNT',\n BackerCount = 'BACKER_COUNT',\n TimeBased = 'TIME_BASED',\n Manual = 'MANUAL',\n}\n\n/**\n * Milestone status\n */\nexport enum MILESTONE_STATUS {\n Pending = 'PENDING',\n Achieved = 'ACHIEVED',\n Verified = 'VERIFIED',\n PayoutReady = 'PAYOUT_READY',\n Completed = 'COMPLETED',\n}\n","/* eslint-disable no-magic-numbers */\nimport { z } from 'zod';\n\nimport { CREATE_CAMPAIGN_ERRORS as ERR, CAMPAIGN_STATUS } from './enums';\n\n/**\n * Zod schema for campaign creation form validation.\n * Validates all required fields for creating a new campaign including:\n * - Basic info (title, subtitle, image)\n * - Timeline (start date, duration)\n * - Content (story, video highlight)\n * - Funding target\n * - Social media handles\n *\n * @param config - Configuration object\n * @param config.maxFunding - Maximum funding amount allowed for campaigns\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type, @typescript-eslint/explicit-module-boundary-types\nexport const formCampaignSchema = ({ maxFunding }: { maxFunding: number }) =>\n z.object({\n title: z.string().min(1, ERR.TitleRequired).max(60, ERR.TitleMax),\n subtitle: z.string().min(1, ERR.SubtitleRequired).max(200, ERR.SubtitleMax),\n campaignImage: z.any().refine(val => val instanceof File, {\n message: ERR.CampaignImageRequired,\n }),\n startDate: z\n .date({\n error: ERR.StartDateRequired,\n })\n .refine(date => date instanceof Date && !isNaN(date.getTime()), {\n message: ERR.StartDateInvalid,\n })\n .refine(date => date >= new Date(), {\n message: ERR.StartDateFuture,\n }),\n duration: z\n .union([z.literal(30), z.literal(60), z.literal(90)])\n .nullable()\n .refine(val => val !== null, {\n message: ERR.DurationRequired,\n }),\n story: z.string().min(1, ERR.StoryRequired).max(10000, ERR.StoryMax),\n videoHighlight: z\n .string()\n .refine(\n url => {\n if (!url || url.trim() === '') return true;\n try {\n const urlObj = new URL(url);\n const hostname = urlObj.hostname.toLowerCase();\n return (\n hostname.includes('youtube.com') ||\n hostname.includes('youtu.be') ||\n hostname.includes('tiktok.com') ||\n hostname.includes('vimeo.com')\n );\n } catch {\n return false;\n }\n },\n {\n message: ERR.VideoInvalidProvider,\n }\n )\n .optional(),\n fundingTarget: z\n .string()\n .min(1, ERR.FundingRequired)\n .refine(\n val => {\n const num = Number.parseFloat(val ?? '');\n return !isNaN(num) && num > 0 && num <= maxFunding;\n },\n {\n message: ERR.FundingRange,\n }\n ),\n instagramHandle: z\n .string()\n .max(30, ERR.InstagramMax)\n .regex(/^$|^@?(?!.*\\.\\.)(?!.*\\.$)[a-zA-Z0-9._]{1,30}$/, ERR.InstagramInvalid)\n .optional(),\n tiktokHandle: z\n .string()\n .max(24, ERR.TiktokMax)\n .regex(/^$|^@?[a-zA-Z0-9][a-zA-Z0-9._]{1,23}$/, ERR.TiktokInvalid)\n .optional(),\n youtubeHandle: z\n .string()\n .max(50, ERR.YoutubeMax)\n .regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, ERR.YoutubeInvalid)\n .optional(),\n });\n\n/**\n * Create campaign schema\n */\nexport const CreateCampaignSchema = z.object({\n // REQUIRED\n creator_id: z.string().uuid(),\n title: z.string().min(3).max(60),\n subtitle: z.string().min(1).max(200),\n story: z.string().min(10).max(1000),\n funding_target: z.number().positive(),\n duration: z.number().min(7).max(365),\n start_date: z.string(), // ISO date string\n campaign_images: z.array(z.string().uuid()).min(1),\n campaign_videos: z.array(z.string().uuid()).min(1),\n // OPTIONAL\n location_region: z.string().max(100).optional(),\n location_city: z.string().max(100).optional(),\n sport: z.string().max(50).optional(),\n category: z.string().max(50).optional(),\n tags: z.array(z.string()).optional(),\n // OPTIONAL (DB default ACTIVE)\n status: z.enum(['DRAFT', 'ACTIVE']).optional(),\n});\n\n/**\n * Update campaign schema\n */\nexport const UpdateCampaignSchema = CreateCampaignSchema.extend({\n id: z.string().uuid(),\n});\n\n/**\n * Patch campaign schema\n */\nexport const PatchCampaignSchema = CreateCampaignSchema.partial().extend({\n id: z.string().uuid().optional(),\n});\n\n/**\n * Delete campaign schema\n */\nexport const DeleteCampaignSchema = z.object({\n // Soft delete flag\n soft: z.boolean().default(true),\n\n // Reason for audit\n reason: z.string().trim().optional(),\n});\n\n/**\n * Query campaign schema\n */\nexport const QueryCampaignSchema = z.object({\n // Pagination\n page: z.coerce.number().int().positive().default(1),\n limit: z.coerce.number().int().min(1).max(100).default(20),\n\n // Sorting\n sort_by: z.enum(['title', 'funding_target', 'created_at', 'updated_at']).default('created_at'),\n sort_order: z.enum(['asc', 'desc']).default('desc'),\n\n // Filters\n status: z.nativeEnum(CAMPAIGN_STATUS).optional(),\n creator_id: z.string().uuid().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n location_region: z.string().optional(),\n\n // Search\n search: z.string().trim().optional(),\n});\n\n/**\n * Campaign response schema (API response shape - snake_case)\n */\nexport const CampaignResponseSchema = z.object({\n id: z.string().uuid(),\n creator_id: z.string().uuid(),\n title: z.string(),\n subtitle: z.string(),\n story: z.string(),\n funding_target: z.number(),\n status: z.nativeEnum(CAMPAIGN_STATUS),\n campaign_images: z.array(z.string()),\n start_date: z.string().datetime(),\n duration: z.number(),\n location_region: z.string().optional(),\n location_city: z.string().optional(),\n sport: z.string().optional(),\n category: z.string().optional(),\n tags: z.array(z.string()).optional(),\n campaign_videos: z.array(z.string()),\n first_contribution_at: z.string().datetime().optional(),\n created_at: z.string().datetime(),\n updated_at: z.string().datetime(),\n deleted_at: z.string().datetime().optional(),\n});\n\n/**\n * Campaign list response schema with pagination\n */\nexport const CampaignListResponseSchema = z.object({\n data: z.array(CampaignResponseSchema),\n meta: z.object({\n page: z.number(),\n limit: z.number(),\n total: z.number(),\n total_pages: z.number(),\n }),\n});\n\n/**\n * Type inferred from the campaign form schema for form validation\n */\nexport type FormCampaignData = z.infer<ReturnType<typeof formCampaignSchema>>;"]}
@@ -36,14 +36,19 @@ export declare const CreateCampaignSchema: z.ZodObject<{
36
36
  subtitle: z.ZodString;
37
37
  story: z.ZodString;
38
38
  funding_target: z.ZodNumber;
39
- duration: z.ZodOptional<z.ZodNumber>;
39
+ duration: z.ZodNumber;
40
+ start_date: z.ZodString;
41
+ campaign_images: z.ZodArray<z.ZodString>;
42
+ campaign_videos: z.ZodArray<z.ZodString>;
40
43
  location_region: z.ZodOptional<z.ZodString>;
41
44
  location_city: z.ZodOptional<z.ZodString>;
42
45
  sport: z.ZodOptional<z.ZodString>;
43
46
  category: z.ZodOptional<z.ZodString>;
44
47
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
45
- campaign_images: z.ZodOptional<z.ZodArray<z.ZodString>>;
46
- campaign_videos: z.ZodOptional<z.ZodArray<z.ZodString>>;
48
+ status: z.ZodOptional<z.ZodEnum<{
49
+ ACTIVE: "ACTIVE";
50
+ DRAFT: "DRAFT";
51
+ }>>;
47
52
  }, z.core.$strip>;
48
53
  /**
49
54
  * Update campaign schema
@@ -54,14 +59,19 @@ export declare const UpdateCampaignSchema: z.ZodObject<{
54
59
  subtitle: z.ZodString;
55
60
  story: z.ZodString;
56
61
  funding_target: z.ZodNumber;
57
- duration: z.ZodOptional<z.ZodNumber>;
62
+ duration: z.ZodNumber;
63
+ start_date: z.ZodString;
64
+ campaign_images: z.ZodArray<z.ZodString>;
65
+ campaign_videos: z.ZodArray<z.ZodString>;
58
66
  location_region: z.ZodOptional<z.ZodString>;
59
67
  location_city: z.ZodOptional<z.ZodString>;
60
68
  sport: z.ZodOptional<z.ZodString>;
61
69
  category: z.ZodOptional<z.ZodString>;
62
70
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
63
- campaign_images: z.ZodOptional<z.ZodArray<z.ZodString>>;
64
- campaign_videos: z.ZodOptional<z.ZodArray<z.ZodString>>;
71
+ status: z.ZodOptional<z.ZodEnum<{
72
+ ACTIVE: "ACTIVE";
73
+ DRAFT: "DRAFT";
74
+ }>>;
65
75
  id: z.ZodString;
66
76
  }, z.core.$strip>;
67
77
  /**
@@ -73,14 +83,19 @@ export declare const PatchCampaignSchema: z.ZodObject<{
73
83
  subtitle: z.ZodOptional<z.ZodString>;
74
84
  story: z.ZodOptional<z.ZodString>;
75
85
  funding_target: z.ZodOptional<z.ZodNumber>;
76
- duration: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
86
+ duration: z.ZodOptional<z.ZodNumber>;
87
+ start_date: z.ZodOptional<z.ZodString>;
88
+ campaign_images: z.ZodOptional<z.ZodArray<z.ZodString>>;
89
+ campaign_videos: z.ZodOptional<z.ZodArray<z.ZodString>>;
77
90
  location_region: z.ZodOptional<z.ZodOptional<z.ZodString>>;
78
91
  location_city: z.ZodOptional<z.ZodOptional<z.ZodString>>;
79
92
  sport: z.ZodOptional<z.ZodOptional<z.ZodString>>;
80
93
  category: z.ZodOptional<z.ZodOptional<z.ZodString>>;
81
94
  tags: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
82
- campaign_images: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
83
- campaign_videos: z.ZodOptional<z.ZodOptional<z.ZodArray<z.ZodString>>>;
95
+ status: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
96
+ ACTIVE: "ACTIVE";
97
+ DRAFT: "DRAFT";
98
+ }>>>;
84
99
  id: z.ZodOptional<z.ZodString>;
85
100
  }, z.core.$strip>;
86
101
  /**
@@ -124,15 +139,15 @@ export declare const CampaignResponseSchema: z.ZodObject<{
124
139
  story: z.ZodString;
125
140
  funding_target: z.ZodNumber;
126
141
  status: z.ZodEnum<typeof CAMPAIGN_STATUS>;
127
- campaign_images: z.ZodOptional<z.ZodArray<z.ZodString>>;
128
- start_date: z.ZodOptional<z.ZodString>;
129
- duration: z.ZodOptional<z.ZodNumber>;
142
+ campaign_images: z.ZodArray<z.ZodString>;
143
+ start_date: z.ZodString;
144
+ duration: z.ZodNumber;
130
145
  location_region: z.ZodOptional<z.ZodString>;
131
146
  location_city: z.ZodOptional<z.ZodString>;
132
147
  sport: z.ZodOptional<z.ZodString>;
133
148
  category: z.ZodOptional<z.ZodString>;
134
149
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
135
- campaign_videos: z.ZodOptional<z.ZodArray<z.ZodString>>;
150
+ campaign_videos: z.ZodArray<z.ZodString>;
136
151
  first_contribution_at: z.ZodOptional<z.ZodString>;
137
152
  created_at: z.ZodString;
138
153
  updated_at: z.ZodString;
@@ -150,15 +165,15 @@ export declare const CampaignListResponseSchema: z.ZodObject<{
150
165
  story: z.ZodString;
151
166
  funding_target: z.ZodNumber;
152
167
  status: z.ZodEnum<typeof CAMPAIGN_STATUS>;
153
- campaign_images: z.ZodOptional<z.ZodArray<z.ZodString>>;
154
- start_date: z.ZodOptional<z.ZodString>;
155
- duration: z.ZodOptional<z.ZodNumber>;
168
+ campaign_images: z.ZodArray<z.ZodString>;
169
+ start_date: z.ZodString;
170
+ duration: z.ZodNumber;
156
171
  location_region: z.ZodOptional<z.ZodString>;
157
172
  location_city: z.ZodOptional<z.ZodString>;
158
173
  sport: z.ZodOptional<z.ZodString>;
159
174
  category: z.ZodOptional<z.ZodString>;
160
175
  tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
161
- campaign_videos: z.ZodOptional<z.ZodArray<z.ZodString>>;
176
+ campaign_videos: z.ZodArray<z.ZodString>;
162
177
  first_contribution_at: z.ZodOptional<z.ZodString>;
163
178
  created_at: z.ZodString;
164
179
  updated_at: z.ZodString;
package/dist/index.cjs CHANGED
@@ -7427,19 +7427,25 @@ var formCampaignSchema = /* @__PURE__ */ __name(({ maxFunding }) => zod.z.object
7427
7427
  youtubeHandle: zod.z.string().max(50, "components.CreateCampaign.Form.errors.youtubeMax" /* YoutubeMax */).regex(/^$|^@[a-zA-Z0-9][a-zA-Z0-9._-]{1,28}[a-zA-Z0-9]$/, "components.CreateCampaign.Form.errors.youtubeInvalid" /* YoutubeInvalid */).optional()
7428
7428
  }), "formCampaignSchema");
7429
7429
  var CreateCampaignSchema = zod.z.object({
7430
+ // REQUIRED
7430
7431
  creator_id: zod.z.string().uuid(),
7431
7432
  title: zod.z.string().min(3).max(60),
7432
7433
  subtitle: zod.z.string().min(1).max(200),
7433
7434
  story: zod.z.string().min(10).max(1e3),
7434
7435
  funding_target: zod.z.number().positive(),
7435
- duration: zod.z.number().min(7).max(365).optional(),
7436
+ duration: zod.z.number().min(7).max(365),
7437
+ start_date: zod.z.string(),
7438
+ // ISO date string
7439
+ campaign_images: zod.z.array(zod.z.string().uuid()).min(1),
7440
+ campaign_videos: zod.z.array(zod.z.string().uuid()).min(1),
7441
+ // OPTIONAL
7436
7442
  location_region: zod.z.string().max(100).optional(),
7437
7443
  location_city: zod.z.string().max(100).optional(),
7438
7444
  sport: zod.z.string().max(50).optional(),
7439
7445
  category: zod.z.string().max(50).optional(),
7440
7446
  tags: zod.z.array(zod.z.string()).optional(),
7441
- campaign_images: zod.z.array(zod.z.string().uuid()).optional(),
7442
- campaign_videos: zod.z.array(zod.z.string().uuid()).optional()
7447
+ // OPTIONAL (DB default ACTIVE)
7448
+ status: zod.z.enum(["DRAFT", "ACTIVE"]).optional()
7443
7449
  });
7444
7450
  var UpdateCampaignSchema = CreateCampaignSchema.extend({
7445
7451
  id: zod.z.string().uuid()
@@ -7477,15 +7483,15 @@ var CampaignResponseSchema = zod.z.object({
7477
7483
  story: zod.z.string(),
7478
7484
  funding_target: zod.z.number(),
7479
7485
  status: zod.z.nativeEnum(CAMPAIGN_STATUS),
7480
- campaign_images: zod.z.array(zod.z.string()).optional(),
7481
- start_date: zod.z.string().datetime().optional(),
7482
- duration: zod.z.number().optional(),
7486
+ campaign_images: zod.z.array(zod.z.string()),
7487
+ start_date: zod.z.string().datetime(),
7488
+ duration: zod.z.number(),
7483
7489
  location_region: zod.z.string().optional(),
7484
7490
  location_city: zod.z.string().optional(),
7485
7491
  sport: zod.z.string().optional(),
7486
7492
  category: zod.z.string().optional(),
7487
7493
  tags: zod.z.array(zod.z.string()).optional(),
7488
- campaign_videos: zod.z.array(zod.z.string()).optional(),
7494
+ campaign_videos: zod.z.array(zod.z.string()),
7489
7495
  first_contribution_at: zod.z.string().datetime().optional(),
7490
7496
  created_at: zod.z.string().datetime(),
7491
7497
  updated_at: zod.z.string().datetime(),