ldc-boutique-cnc-sable/app/Actions/Crm/UnsubscribeFromNewsletter.php
Jérémy Munsch 2aa4fa8aed
feat(crm): implement unsubscribe from newsletter functionality
- Added UnsubscribeFromNewsletter action and input/output classes.
- Introduced CrmHashcode value object and its cast.
- Updated NewsletterController to use the new unsubscribe action.
- Enhanced validation in UnsubscribeNewsletterRequest.
2026-10-27 09:58:34 +01:00

39 lines
1 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Actions\Crm;
use App\Contracts\Action;
use App\Contracts\ActionInput;
use App\Services\CrmService;
use Webmozart\Assert\Assert;
/**
* @implements \App\Contracts\Action<\App\Actions\Crm\UnsubscribeFromNewsletterInput, \App\Actions\Crm\UnsubscribeFromNewsletterOutput>
*/
final class UnsubscribeFromNewsletter implements Action
{
public function __construct(
private readonly CrmService $crmService
) {
}
#[\Override]
public function __invoke(ActionInput $input): UnsubscribeFromNewsletterOutput
{
Assert::isInstanceOf($input, UnsubscribeFromNewsletterInput::class);
try {
$isUnsubscribed = $this->crmService->unsubscribeCustomer(
$input->hashcode
);
return $isUnsubscribed ? UnsubscribeFromNewsletterOutput::SUCCESS : UnsubscribeFromNewsletterOutput::FAILURE;
} catch (\Throwable $e) {
report($e);
return UnsubscribeFromNewsletterOutput::FAILURE;
}
}
}