task: adds event log module
This commit is contained in:
@@ -6,6 +6,14 @@ controllersBase:
|
||||
defaults:
|
||||
schemes: [ 'https' ]
|
||||
|
||||
controllersEventLog:
|
||||
resource:
|
||||
path: ../src/EventLog/Framework/Controller/
|
||||
namespace: App\EventLog\Framework\Controller
|
||||
type: attribute
|
||||
defaults:
|
||||
schemes: [ 'https' ]
|
||||
|
||||
controllersLibrary:
|
||||
resource:
|
||||
path: ../src/Library/Framework/Controller/
|
||||
|
||||
35
migrations/Version20251101194723.php
Normal file
35
migrations/Version20251101194723.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace DoctrineMigrations;
|
||||
|
||||
use Doctrine\DBAL\Schema\Schema;
|
||||
use Doctrine\Migrations\AbstractMigration;
|
||||
|
||||
/**
|
||||
* Auto-generated Migration: Please modify to your needs!
|
||||
*/
|
||||
final class Version20251101194723 extends AbstractMigration
|
||||
{
|
||||
public function getDescription(): string
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
public function up(Schema $schema): void
|
||||
{
|
||||
// this up() migration is auto-generated, please modify it to your needs
|
||||
$this->addSql(<<<'SQL'
|
||||
ALTER TABLE user_preference CHANGE preference_value preference_value VARCHAR(255) DEFAULT NULL
|
||||
SQL);
|
||||
}
|
||||
|
||||
public function down(Schema $schema): void
|
||||
{
|
||||
// this down() migration is auto-generated, please modify it to your needs
|
||||
$this->addSql(<<<'SQL'
|
||||
ALTER TABLE user_preference CHANGE preference_value preference_value VARCHAR(1024) DEFAULT NULL
|
||||
SQL);
|
||||
}
|
||||
}
|
||||
15
src/EventLog/Action/Command/AddEventLogCommand.php
Normal file
15
src/EventLog/Action/Command/AddEventLogCommand.php
Normal file
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace App\EventLog\Action\Command;
|
||||
|
||||
use OneToMany\RichBundle\Contract\CommandInterface;
|
||||
|
||||
/** @implements CommandInterface<AddEventLogCommand> */
|
||||
class AddEventLogCommand implements CommandInterface
|
||||
{
|
||||
public function __construct(
|
||||
public string $type,
|
||||
public string $message,
|
||||
public array $context,
|
||||
) {}
|
||||
}
|
||||
28
src/EventLog/Action/Handler/AddEventLogHandler.php
Normal file
28
src/EventLog/Action/Handler/AddEventLogHandler.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\EventLog\Action\Handler;
|
||||
|
||||
use App\EventLog\Framework\Repository\EventLogRepository;
|
||||
use App\EventLog\Action\Command\AddEventLogCommand;
|
||||
use App\EventLog\Action\Result\AddEventLogResult;
|
||||
use OneToMany\RichBundle\Contract\CommandInterface;
|
||||
use OneToMany\RichBundle\Contract\HandlerInterface;
|
||||
use OneToMany\RichBundle\Contract\ResultInterface;
|
||||
|
||||
/*** @implements HandlerInterface<AddEventLogCommand> */
|
||||
class AddEventLogHandler implements HandlerInterface
|
||||
{
|
||||
public function __construct(
|
||||
private EventLogRepository $repository,
|
||||
) {}
|
||||
|
||||
public function handle(CommandInterface $command): ResultInterface
|
||||
{
|
||||
$eventLog = $this->repository->insert(
|
||||
type: $command->type,
|
||||
message: $command->message,
|
||||
context: $command->context
|
||||
);
|
||||
return new AddEventLogResult($eventLog);
|
||||
}
|
||||
}
|
||||
36
src/EventLog/Action/Input/AddEventLogInput.php
Normal file
36
src/EventLog/Action/Input/AddEventLogInput.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\EventLog\Action\Input;
|
||||
|
||||
use App\EventLog\Action\Command\AddEventLogCommand;
|
||||
use OneToMany\RichBundle\Attribute\SourceQuery;
|
||||
use OneToMany\RichBundle\Attribute\SourceRequest;
|
||||
use OneToMany\RichBundle\Contract\CommandInterface;
|
||||
use OneToMany\RichBundle\Contract\InputInterface;
|
||||
|
||||
/** @implements InputInterface<AddEventLogCommand> */
|
||||
class AddEventLogInput implements InputInterface
|
||||
{
|
||||
public function __construct(
|
||||
#[SourceQuery('type')]
|
||||
#[SourceRequest('type')]
|
||||
public string $type,
|
||||
|
||||
#[SourceQuery('message')]
|
||||
#[SourceRequest('message')]
|
||||
public string $message,
|
||||
|
||||
#[SourceQuery('context')]
|
||||
#[SourceRequest('context')]
|
||||
public array $context = []
|
||||
){}
|
||||
|
||||
public function toCommand(): CommandInterface
|
||||
{
|
||||
return new AddEventLogCommand(
|
||||
$this->type,
|
||||
$this->message,
|
||||
$this->context
|
||||
);
|
||||
}
|
||||
}
|
||||
14
src/EventLog/Action/Result/AddEventLogResult.php
Normal file
14
src/EventLog/Action/Result/AddEventLogResult.php
Normal file
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
namespace App\EventLog\Action\Result;
|
||||
|
||||
use App\EventLog\Framework\Entity\EventLog;
|
||||
use OneToMany\RichBundle\Contract\ResultInterface;
|
||||
|
||||
/** @implements ResultInterface<AddEventLogResult> */
|
||||
class AddEventLogResult implements ResultInterface
|
||||
{
|
||||
public function __construct(
|
||||
public EventLog $eventLog,
|
||||
) {}
|
||||
}
|
||||
28
src/EventLog/Framework/Controller/EventLogController.php
Normal file
28
src/EventLog/Framework/Controller/EventLogController.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\EventLog\Framework\Controller;
|
||||
|
||||
use App\Base\Service\Broadcaster;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\Routing\Attribute\Route;
|
||||
|
||||
final class EventLogController extends AbstractController
|
||||
{
|
||||
public function __construct(
|
||||
private readonly Broadcaster $broadcaster,
|
||||
) {}
|
||||
|
||||
#[Route('/alert', name: 'app_alert')]
|
||||
public function index(): Response
|
||||
{
|
||||
$this->broadcaster->alert(
|
||||
'Added to queue',
|
||||
'This is a testy test!'
|
||||
);
|
||||
|
||||
return $this->json([
|
||||
'Success' => 'Published'
|
||||
]);
|
||||
}
|
||||
}
|
||||
63
src/EventLog/Framework/Entity/EventLog.php
Normal file
63
src/EventLog/Framework/Entity/EventLog.php
Normal file
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
namespace App\EventLog\Framework\Entity;
|
||||
|
||||
use App\EventLog\Framework\Repository\EventLogRepository;
|
||||
use Doctrine\DBAL\Types\Types;
|
||||
use Doctrine\ORM\Mapping as ORM;
|
||||
|
||||
#[ORM\Entity(repositoryClass: EventLogRepository::class)]
|
||||
class EventLog
|
||||
{
|
||||
#[ORM\Id]
|
||||
#[ORM\GeneratedValue]
|
||||
#[ORM\Column(nullable: true)]
|
||||
private ?int $id = null;
|
||||
|
||||
#[ORM\Column(length: 255, nullable: true)]
|
||||
private ?string $type = null;
|
||||
|
||||
#[ORM\Column(type: Types::TEXT, nullable: true)]
|
||||
private ?string $message = null;
|
||||
|
||||
#[ORM\Column(type: Types::JSON, nullable: true)]
|
||||
private ?array $context = null;
|
||||
|
||||
public function getId(): ?int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
public function getType(): ?string
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
public function setType(?string $type): self
|
||||
{
|
||||
$this->type = $type;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getMessage(): ?string
|
||||
{
|
||||
return $this->message;
|
||||
}
|
||||
|
||||
public function setMessage(?string $message): self
|
||||
{
|
||||
$this->message = $message;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function getContext(): ?array
|
||||
{
|
||||
return $this->context;
|
||||
}
|
||||
|
||||
public function setContext(?array $context): self
|
||||
{
|
||||
$this->context = $context;
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
32
src/EventLog/Framework/Repository/EventLogRepository.php
Normal file
32
src/EventLog/Framework/Repository/EventLogRepository.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\EventLog\Framework\Repository;
|
||||
|
||||
use App\EventLog\Framework\Entity\EventLog;
|
||||
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
|
||||
use Doctrine\Persistence\ManagerRegistry;
|
||||
|
||||
/**
|
||||
* @extends ServiceEntityRepository<EventLog>
|
||||
*/
|
||||
class EventLogRepository extends ServiceEntityRepository
|
||||
{
|
||||
public function __construct(ManagerRegistry $registry)
|
||||
{
|
||||
parent::__construct($registry, EventLog::class);
|
||||
}
|
||||
|
||||
public function insert(
|
||||
string $type,
|
||||
string $message,
|
||||
array $context = []
|
||||
): EventLog {
|
||||
$eventLog = new EventLog()
|
||||
->setType($type)
|
||||
->setMessage($message)
|
||||
->setContext($context);
|
||||
$this->getEntityManager()->persist($eventLog);
|
||||
$this->getEntityManager()->flush();
|
||||
return $eventLog;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user