feat: Add type to campaign

This commit is contained in:
Dries Augustyns
2026-04-01 18:49:51 +02:00
parent 3343e891bd
commit d24259e8d2
9 changed files with 139 additions and 20 deletions
@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "campaigns" ADD COLUMN "type" "TemplateType" NOT NULL DEFAULT 'MARKETING';
+3
View File
@@ -291,6 +291,9 @@ model Campaign {
fromName String?
replyTo String?
// Campaign type
type TemplateType @default(MARKETING)
// Audience selection
audienceType CampaignAudienceType @default(ALL)
audienceCondition Json? // For FILTERED: manual filter condition with AND/OR logic (same structure as Segment.condition)
+2
View File
@@ -349,6 +349,7 @@ export const CampaignSchemas = {
from: email,
fromName: z.string().max(100).nullish(),
replyTo: email.nullish(),
type: z.nativeEnum(TemplateType).default(TemplateType.MARKETING),
audienceType: z.nativeEnum(CampaignAudienceType),
audienceCondition: filterConditionSchema.optional(),
segmentId: uuid.optional(),
@@ -364,6 +365,7 @@ export const CampaignSchemas = {
from: z.string().optional(),
fromName: z.string().max(100).nullish(),
replyTo: z.string().nullish(),
type: z.nativeEnum(TemplateType).optional(),
audienceType: z.nativeEnum(CampaignAudienceType).optional(),
audienceCondition: filterConditionSchema.optional(),
segmentId: z.string().optional(),
+3 -1
View File
@@ -2,7 +2,7 @@
* Campaign service types
*/
import type {CampaignAudienceType} from '@plunk/db';
import type {CampaignAudienceType, TemplateType} from '@plunk/db';
import type {FilterCondition} from '../segments/index.js';
/**
@@ -16,6 +16,7 @@ export interface CreateCampaignData {
from: string;
fromName?: string | null;
replyTo?: string | null;
type?: TemplateType;
audienceType: CampaignAudienceType;
audienceCondition?: FilterCondition;
segmentId?: string;
@@ -32,6 +33,7 @@ export interface UpdateCampaignData {
from?: string;
fromName?: string | null;
replyTo?: string | null;
type?: TemplateType;
audienceType?: CampaignAudienceType;
audienceCondition?: FilterCondition;
segmentId?: string;