Skip to content

Commit 89d123b

Browse files
authored
Add campaign state filter (#20)
1 parent dfe73a4 commit 89d123b

3 files changed

Lines changed: 50 additions & 11 deletions

File tree

api-docs.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5231,6 +5231,17 @@
52315231
"required": false,
52325232
"type": "string",
52335233
"x-example": "id"
5234+
},
5235+
{
5236+
"collectionFormat": "multi",
5237+
"description": "Filter campaigns by state. Can be specified multiple times to filter by multiple states. Valid states: Draft, Ready, Scheduled, Running, Finished, Starting, Aborted, Recurring, Archived. Example: ?campaignState=Ready&campaignState=Running",
5238+
"in": "query",
5239+
"items": {
5240+
"type": "string"
5241+
},
5242+
"name": "campaignState",
5243+
"required": false,
5244+
"type": "array"
52345245
}
52355246
],
52365247
"responses": {
@@ -5567,6 +5578,17 @@
55675578
"required": false,
55685579
"type": "string",
55695580
"x-example": "id"
5581+
},
5582+
{
5583+
"collectionFormat": "multi",
5584+
"description": "Filter campaigns by state. Can be specified multiple times to filter by multiple states. Valid states: Draft, Ready, Scheduled, Running, Finished, Starting, Aborted, Recurring, Archived. Example: ?campaignState=Ready&campaignState=Running",
5585+
"in": "query",
5586+
"items": {
5587+
"type": "string"
5588+
},
5589+
"name": "campaignState",
5590+
"required": false,
5591+
"type": "array"
55705592
}
55715593
],
55725594
"responses": {

src/client/campaigns.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
ArchiveCampaignsResponse,
66
ArchiveCampaignsResponseSchema,
77
CampaignMetricsResponse,
8+
CampaignState,
89
CancelCampaignParams,
910
CreateBlastCampaignParams,
1011
CreateCampaignResponse,
@@ -58,6 +59,12 @@ export function Campaigns<T extends Constructor<BaseIterableClient>>(Base: T) {
5859
queryParams.append("sort", sortString);
5960
}
6061

62+
if (params?.campaignState) {
63+
params.campaignState.forEach((state: CampaignState) =>
64+
queryParams.append("campaignState", state)
65+
);
66+
}
67+
6168
const url = `/api/campaigns?${queryParams.toString()}`;
6269
const response = await this.client.get(
6370
url,

src/types/campaigns.ts

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,25 @@ import {
1212
* Campaign management schemas and types
1313
*/
1414

15+
export const CampaignStateSchema = z.enum([
16+
"Draft",
17+
"Ready",
18+
"Scheduled",
19+
"Running",
20+
"Finished",
21+
"Starting",
22+
"Aborted",
23+
"Recurring",
24+
"Archived",
25+
]);
26+
27+
export type CampaignState = z.infer<typeof CampaignStateSchema>;
28+
1529
export const CampaignDetailsSchema = z.object({
1630
id: z.number(),
1731
name: z.string(),
1832
type: z.enum(["Blast", "Triggered"]),
19-
campaignState: z.enum([
20-
"Draft",
21-
"Ready",
22-
"Scheduled",
23-
"Running",
24-
"Finished",
25-
"Starting",
26-
"Aborted",
27-
"Recurring",
28-
"Archived",
29-
]),
33+
campaignState: CampaignStateSchema,
3034
messageMedium: z.string(),
3135
createdAt: UnixTimestampSchema,
3236
updatedAt: UnixTimestampSchema,
@@ -74,6 +78,12 @@ export const GetCampaignsParamsSchema = z.object({
7478
sort: createSortParamSchema(CAMPAIGN_SORT_FIELDS).describe(
7579
"Field to sort campaigns by with optional direction (defaults to id ascending)"
7680
),
81+
campaignState: z
82+
.array(CampaignStateSchema)
83+
.optional()
84+
.describe(
85+
"Filter campaigns by state. Can specify multiple states. Valid states: Draft, Ready, Scheduled, Running, Finished, Starting, Aborted, Recurring, Archived"
86+
),
7787
});
7888

7989
export type GetCampaignsParams = z.infer<typeof GetCampaignsParamsSchema>;

0 commit comments

Comments
 (0)