60 lines
1.9 KiB
PHP
60 lines
1.9 KiB
PHP
<?php
|
||
|
||
declare(strict_types=1);
|
||
|
||
namespace KupShop\GraphQLBundle\ApiAdmin\Controller;
|
||
|
||
use KupShop\GraphQLBundle\ApiAdmin\Annotation\Module;
|
||
use KupShop\GraphQLBundle\ApiAdmin\Types\Changes\ChangeInterface;
|
||
use KupShop\GraphQLBundle\ApiAdmin\Types\Changes\Response\ChangesResetMutateResponse;
|
||
use KupShop\GraphQLBundle\ApiAdmin\Types\MutateResponse;
|
||
use KupShop\GraphQLBundle\ApiAdmin\Util\ChangesUtil;
|
||
use TheCodingMachine\GraphQLite\Annotations\Mutation;
|
||
use TheCodingMachine\GraphQLite\Annotations\Query;
|
||
|
||
class ChangeController
|
||
{
|
||
public function __construct(
|
||
private readonly ChangesUtil $changesUtil,
|
||
) {
|
||
}
|
||
|
||
/**
|
||
* Seznam změněných objektů.
|
||
*
|
||
* Pro správné zpracování změn je nutné po každém zpracování dávky změn volat `changesConfirm`.
|
||
* Dokud `changesConfirm` není zavolán, uživatel opakovaně dostává stejné změny – nové se nezpřístupní.
|
||
*
|
||
* @return iterable<ChangeInterface>
|
||
*/
|
||
#[Query]
|
||
#[Module(\Modules::KAFKA)]
|
||
public function changes(int $limit = 100): iterable
|
||
{
|
||
return $this->changesUtil->getChanges($limit);
|
||
}
|
||
|
||
/**
|
||
* Potvrdí zpracování všech změn, které mají ID menší než specifikované ID.
|
||
*
|
||
* Volání `changesConfirm` stačí provádět vždy po zpracování dávky změn - např. načtu 100 změn, zpracuji je a na konci zavolám
|
||
* `changesConfirm` s nejvyšším ID zpracované změny.
|
||
*/
|
||
#[Mutation]
|
||
#[Module(\Modules::KAFKA)]
|
||
public function changesConfirm(int $changeId): MutateResponse
|
||
{
|
||
return $this->changesUtil->confirmChanges($changeId);
|
||
}
|
||
|
||
/**
|
||
* Nastaví změny zpět k danému datumu a času – např. při potřebě opětovné synchronizace.
|
||
*/
|
||
#[Mutation]
|
||
#[Module(\Modules::KAFKA)]
|
||
public function changesReset(\DateTimeInterface $date): ChangesResetMutateResponse
|
||
{
|
||
return $this->changesUtil->resetChanges($date);
|
||
}
|
||
}
|