Files
medusa-store/packages/medusa/src/api/admin/campaigns/validators.ts
2024-07-01 17:23:45 +02:00

82 lines
2.4 KiB
TypeScript

import { CampaignBudgetType, isPresent } from "@medusajs/utils"
import { z } from "zod"
import { createFindParams, createSelectParams } from "../../utils/validators"
export const AdminGetCampaignParams = createSelectParams()
export type AdminGetCampaignsParamsType = z.infer<
typeof AdminGetCampaignsParams
>
export const AdminGetCampaignsParams = createFindParams({
offset: 0,
limit: 50,
})
.merge(
z.object({
q: z.string().optional(),
campaign_identifier: z.string().optional(),
budget: z
.object({
currency_code: z.string().optional(),
})
.optional(),
$and: z.lazy(() => AdminGetCampaignsParams.array()).optional(),
$or: z.lazy(() => AdminGetCampaignsParams.array()).optional(),
})
)
.strict()
export const CreateCampaignBudget = z
.object({
type: z.nativeEnum(CampaignBudgetType),
limit: z.number().nullish(),
currency_code: z.string().nullish(),
})
.strict()
.refine(
(data) =>
data.type !== CampaignBudgetType.SPEND || isPresent(data.currency_code),
{
path: ["currency_code"],
message: `currency_code is required when budget type is ${CampaignBudgetType.SPEND}`,
}
)
.refine(
(data) =>
data.type !== CampaignBudgetType.USAGE || !isPresent(data.currency_code),
{
path: ["currency_code"],
message: `currency_code should not be present when budget type is ${CampaignBudgetType.USAGE}`,
}
)
export const UpdateCampaignBudget = z
.object({
limit: z.number().nullish(),
})
.strict()
export type AdminCreateCampaignType = z.infer<typeof AdminCreateCampaign>
export const AdminCreateCampaign = z
.object({
name: z.string(),
campaign_identifier: z.string(),
description: z.string().nullish(),
budget: CreateCampaignBudget.nullish(),
starts_at: z.coerce.date().nullish(),
ends_at: z.coerce.date().nullish(),
promotions: z.array(z.object({ id: z.string() })).optional(),
})
.strict()
export type AdminUpdateCampaignType = z.infer<typeof AdminUpdateCampaign>
export const AdminUpdateCampaign = z.object({
name: z.string().optional(),
campaign_identifier: z.string().optional(),
description: z.string().nullish(),
budget: UpdateCampaignBudget.optional(),
starts_at: z.coerce.date().nullish(),
ends_at: z.coerce.date().nullish(),
promotions: z.array(z.object({ id: z.string() })).optional(),
})