Skip to content

Commit ab43d7a

Browse files
committed
Add: resend_campaign endpoint
1 parent c675bca commit ab43d7a

File tree

2 files changed

+105
-0
lines changed

2 files changed

+105
-0
lines changed

src/Messaging/Controller/CampaignController.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use PhpList\RestBundle\Common\Controller\BaseController;
1313
use PhpList\RestBundle\Common\Validator\RequestValidator;
1414
use PhpList\RestBundle\Messaging\Request\CreateMessageRequest;
15+
use PhpList\RestBundle\Messaging\Request\ResendMessageToListsRequest;
1516
use PhpList\RestBundle\Messaging\Request\UpdateMessageRequest;
1617
use PhpList\RestBundle\Messaging\Service\CampaignService;
1718
use Symfony\Bridge\Doctrine\Attribute\MapEntity;
@@ -405,4 +406,64 @@ public function sendMessage(
405406

406407
return $this->json($this->campaignService->getMessage($message), Response::HTTP_OK);
407408
}
409+
410+
#[Route('/{messageId}/resend', name: 'resend_campaign', requirements: ['messageId' => '\d+'], methods: ['POST'])]
411+
#[OA\Post(
412+
path: '/api/v2/campaigns/{messageId}/resend',
413+
description: '🚧 **Status: Beta** – This method is under development. Avoid using in production. ' .
414+
'Processes/sends campaign/message by id to specified mailing lists.',
415+
summary: 'Processes/sends campaign/message by id to lists.',
416+
requestBody: new OA\RequestBody(
417+
description: 'List ids to send this campaign to.',
418+
required: true,
419+
content: new OA\JsonContent(ref: '#/components/schemas/AdminAttributeDefinitionRequest')
420+
),
421+
tags: ['campaigns'],
422+
parameters: [
423+
new OA\Parameter(
424+
name: 'php-auth-pw',
425+
description: 'Session key obtained from login',
426+
in: 'header',
427+
required: true,
428+
schema: new OA\Schema(type: 'string')
429+
),
430+
new OA\Parameter(
431+
name: 'messageId',
432+
description: 'message ID',
433+
in: 'path',
434+
required: true,
435+
schema: new OA\Schema(type: 'string')
436+
)
437+
],
438+
responses: [
439+
new OA\Response(
440+
response: 200,
441+
description: 'Success',
442+
content: new OA\JsonContent(ref: '#/components/schemas/Message')
443+
),
444+
new OA\Response(
445+
response: 403,
446+
description: 'Failure',
447+
content: new OA\JsonContent(ref: '#/components/schemas/UnauthorizedResponse')
448+
)
449+
]
450+
)]
451+
public function resendMessageToLists(
452+
Request $request,
453+
#[MapEntity(mapping: ['messageId' => 'id'])] ?Message $message = null
454+
): JsonResponse {
455+
$this->requireAuthentication($request);
456+
if ($message === null) {
457+
throw $this->createNotFoundException('Campaign not found.');
458+
}
459+
460+
/** @var ResendMessageToListsRequest $resendToListsRequest */
461+
$resendToListsRequest = $this->validator->validate($request, ResendMessageToListsRequest::class);
462+
463+
$this->messageBus->dispatch(
464+
new SyncCampaignProcessorMessage($message->getId(), $resendToListsRequest->listIds)
465+
);
466+
467+
return $this->json($this->campaignService->getMessage($message), Response::HTTP_OK);
468+
}
408469
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpList\RestBundle\Messaging\Request;
6+
7+
use OpenApi\Attributes as OA;
8+
use PhpList\RestBundle\Common\Request\RequestInterface;
9+
use PhpList\RestBundle\Subscription\Validator\Constraint\ListExists;
10+
use Symfony\Component\Validator\Constraints as Assert;
11+
12+
#[OA\Schema(
13+
schema: 'ResendMessageToListsRequest',
14+
required: ['list_ids'],
15+
properties: [
16+
new OA\Property(
17+
property: 'list_ids',
18+
description: 'Target mailing list IDs.',
19+
type: 'array',
20+
items: new OA\Items(type: 'integer', minimum: 1),
21+
example: [1, 2, 3]
22+
),
23+
],
24+
type: 'object'
25+
)]
26+
class ResendMessageToListsRequest implements RequestInterface
27+
{
28+
#[Assert\NotNull]
29+
#[Assert\Type('array')]
30+
#[Assert\Count(min: 1)]
31+
#[Assert\All([
32+
new Assert\Type('integer'),
33+
new Assert\Positive(),
34+
new ListExists()
35+
])]
36+
public array $listIds;
37+
38+
public function getDto(): array
39+
{
40+
return [
41+
'list_ids' => $this->listIds,
42+
];
43+
}
44+
}

0 commit comments

Comments
 (0)