NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

Akcie v RoundlyConsulting\Approvals\Actions sú kód, ktorý spúšťa fasáda aj manažér — jednoúčelové triedy s metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov. Mapu metód fasády na akcie nájdete v časti DI a akcie.

Signatúry akcií

use RoundlyConsulting\Approvals\Actions\ApproveAction;
use RoundlyConsulting\Approvals\Actions\CancelApprovalAction;
use RoundlyConsulting\Approvals\Actions\ExpireApprovalsAction;
use RoundlyConsulting\Approvals\Actions\RejectAction;
use RoundlyConsulting\Approvals\Actions\RequestApprovalAction;
use RoundlyConsulting\Approvals\Actions\ToggleApprovalAction;
use RoundlyConsulting\Approvals\DataTransferObjects\DecisionData;

app(ApproveAction::class)->execute($user, $post, DecisionData::approved('Looks good'));
app(RejectAction::class)->execute($user, $post, DecisionData::rejected('Needs work'));
app(RequestApprovalAction::class)->execute($user, $post);                    // pending Approval
app(CancelApprovalAction::class)->execute($user, $post, 'Changed my mind');   // ?Approval
app(ToggleApprovalAction::class)->execute($user, $post);                     // bool
app(ExpireApprovalsAction::class)->execute();                                // int
app(ExpireApprovalsAction::class)->execute(subjectType: Post::class);        // int — posts only
Akciaexecute()Poznámka
ApproveAction($actor, $approvable, ?DecisionData, ?ApprovalRequest): ApprovalKontrola cez Gate, menovaní schvaľovatelia, delegovanie, váha a stupeň; nahradí držané zamietnutie; opakovanie nič nezmení; vyhodnotí žiadosť.
RejectAction($actor, $approvable, ?DecisionData, ?ApprovalRequest): ApprovalKontrola cez Gate, menovaní schvaľovatelia, delegovanie, váha a stupeň; nahradí držané schválenie; vyhodnotí žiadosť.
RequestApprovalAction($actor, $approvable, ?DecisionData, ?ApprovalRequest): ApprovalZaznamená čakajúce rozhodnutie — alebo vráti živé rozhodnutie aktéra nezmenené; spustí ApprovalRequested.
CancelApprovalAction($actor, $approvable, ?string $reason, ?ApprovalRequest): ?ApprovalStiahne živé rozhodnutie aktéra alebo to, ktoré urobil ako zástupca.
ToggleApprovalAction($actor, $approvable): boolSchváli cez ApproveAction, alebo živé schválenie stiahne a mäkko zmaže.
OpenApprovalRequestAction(ApprovalRequestData $data): ApprovalRequestOtvorí jednostupňovú žiadosť a uloží jej menovaných schvaľovateľov; required_approvers je predvolene jeden na schvaľovateľa.
RequestStagedApprovalAction($subject, $stages, $rejectOnStageRejection = true, ?$expiresAt, ?$workflow): ApprovalRequestOtvorí viacstupňové schvaľovanie; každý stupeň uloží svojich menovaných schvaľovateľov.
OpenWorkflowRequestAction($subject, WorkflowPreset, $approvers): ApprovalRequestOtvorí žiadosť z načítanej šablóny.
DelegateApprovalsAction($delegator, $delegate, ?$startsAt, ?$endsAt): ApprovalDelegationOverí a uloží delegovanie; spustí ApprovalDelegated.
RevokeApprovalDelegationAction($delegator, ?$delegate): intZruší aktívne aj naplánované delegovania; vráti ich počet.
ExpireApprovalsAction(?$now, ?$subjectType): intNechá vypršať zmeškané vyžiadania, schválenia a žiadosti — voliteľne len jedného typu subjektu; vráti ich počet.

Pripojenie ku konkrétnej žiadosti

Akcie schválenia, zamietnutia, vyžiadania a stiahnutia prijímajú žiadosť, ku ktorej sa majú pripojiť, ako štvrtý argument — fasáda ju odovzdá cez within(). Bez neho použijú poslednú otvorenú žiadosť schvaľovaného modelu, prípadne zapíšu samostatné rozhodnutie, ak model nikdy žiadnu nemal. Žiadosť iného subjektu vyhodí InvalidApprovalRequestException a uzavretá žiadosť ClosedApprovalRequestException, a to ešte pred zápisom:

use RoundlyConsulting\Approvals\Actions\ApproveAction;
use RoundlyConsulting\Approvals\DataTransferObjects\DecisionData;
use RoundlyConsulting\Approvals\Facades\Approvals;

$request = Approvals::request($release)->from([$lead, $qa])->open();

// The action's fourth argument is what within($request) passes on the facade.
app(ApproveAction::class)->execute($lead, $release, DecisionData::approved('Ship it'), $request);

DecisionData

DecisionData nesie zámer rozhodnutia. Vytvoríte ho pomenovaným konštruktorom:

KonštruktorVýsledok
DecisionData::approved(?$reason, ?$expiresAt, ?$weight)Schválenie — weight prebije vypočítanú váhu pre toto jedno rozhodnutie.
DecisionData::rejected(?$reason, ?$weight)Zamietnutie — weight funguje ako pri approved().
DecisionData::pending(?$expiresAt)Čakajúce rozhodnutie.
DecisionData::cancelled(?$reason)Zrušenie.

Viacstupňová žiadosť s názvom workflow

RequestStagedApprovalAction prijíma expiráciu a názov workflow, ktoré uloží na žiadosť — expiráciu nastavíte aj cez fasádu či trait, názov prijíma len akcia:

use RoundlyConsulting\Approvals\Actions\RequestStagedApprovalAction;
use RoundlyConsulting\Approvals\DataTransferObjects\StageDefinition;
use RoundlyConsulting\Approvals\Enums\ApprovalRule;

app(RequestStagedApprovalAction::class)->execute(
    $release,
    [
        new StageDefinition([$eng1, $eng2], name: 'engineering'),
        new StageDefinition([$product], ApprovalRule::Any, name: 'product'),
    ],
    rejectOnStageRejection: true,
    expiresAt: now()->addDays(3),
);

ApprovalRequestData

ApprovalRequestData je nemenný vstup akcie OpenApprovalRequestAction: subjekt, schvaľovatelia (menovaní schvaľovatelia — ak nikoho nevymenujete, rozhodovať môže ktokoľvek), pravidlo, kvórum, expiresAt a voliteľne requiredApprovers (predvolene jeden na menovaného schvaľovateľa) a názov workflow.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.