Skip to content

Instantly share code, notes, and snippets.

View mmouih's full-sized avatar

Mounir Mouih mmouih

View GitHub Profile
@mmouih
mmouih / InvoiceContract.php
Created April 7, 2024 18:24
Mapping invoice entity to DTO to safeguard our entity
<?php
namespace App\Contract;
class InvoiceContract
{
public readonly int $id;
public readonly string $invoiceNumber;
public readonly string $amount;
public readonly \DateTimeInterface $createdAt;
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
#[ORM\Table(name: "invoice")]
class Invoice
{
@mmouih
mmouih / PaymentProcessor.php
Created January 29, 2024 01:45
Payment processor autoconfigured with an attribute
<?php
namespace App\Domain\Payment;
use App\Entity\Client;
#[AutoconfigureTag]
interface PaymentProcessor
{
public function handle(float $amount, Client $client): float;
@mmouih
mmouih / MyService.php
Created January 22, 2024 02:22
AsPeriodicTask usage
<?php
namespace App\Service;
use Symfony\Component\Scheduler\Attribute\AsPeriodicTask;
class MyService
{
#[AsPeriodicTask(schedule: 'watchdog_attribute', frequency: '5 seconds', jitter: 10)]
public function monitoring(): void
@mmouih
mmouih / CallbackScheduleProvider.php
Created January 22, 2024 02:00
CallbackScheduleProvider
<?php
namespace App\Scheduler;
use App\Message\WatchDogMessage;
use Symfony\Component\Scheduler\Schedule;
use Symfony\Component\Scheduler\RecurringMessage;
use Symfony\Component\Scheduler\Attribute\AsSchedule;
use Symfony\Component\Scheduler\ScheduleProviderInterface;
use Symfony\Component\Scheduler\Trigger\CallbackTrigger;
@mmouih
mmouih / WatchDogMessage.php
Created January 21, 2024 23:00
Watchdog message
<?php
namespace App\Message;
final class WatchDogMessage
{
public function __construct(readonly private array $services)
{
}
@mmouih
mmouih / WatchDogMessageHandler.php
Created January 21, 2024 22:59
watchdob message handler
<?php
namespace App\MessageHandler;
use App\Message\WatchDogMessage;
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
#[AsMessageHandler]
final class WatchDogMessageHandler
{
<?php
namespace App\Scheduler;
use App\Message\WatchDogMessage;
use Symfony\Component\Scheduler\Schedule;
use Symfony\Component\Scheduler\RecurringMessage;
use Symfony\Component\Scheduler\Attribute\AsSchedule;
use Symfony\Component\Scheduler\ScheduleProviderInterface;
use Symfony\Component\Scheduler\Trigger\ExcludeTimeTrigger;
@mmouih
mmouih / WatchDogJitterScheduleProvider.php
Last active January 22, 2024 01:29
WatchDog with jitter
<?php
namespace App\Scheduler;
use App\Message\WatchDogMessage;
use Symfony\Component\Scheduler\Schedule;
use Symfony\Component\Scheduler\RecurringMessage;
use Symfony\Component\Scheduler\Attribute\AsSchedule;
use Symfony\Component\Scheduler\Trigger\JitterTrigger;
use Symfony\Component\Scheduler\ScheduleProviderInterface;
@mmouih
mmouih / WatchDogScheduleProvider.php
Last active January 21, 2024 22:57
WatchDog to monitor services
<?php
namespace App\Scheduler;
use App\Message\WatchDogMessage;
use Symfony\Component\Scheduler\Schedule;
use Symfony\Component\Scheduler\RecurringMessage;
use Symfony\Component\Scheduler\Attribute\AsSchedule;
use Symfony\Component\Scheduler\ScheduleProviderInterface;