---
title: "DI a akcie — Appointments for Laravel | Roundly"
description: "Namiesto fasády injektujte AppointmentManager alebo spúšťajte šesť akcií priamo — plus úplná mapa metód fasády na akcie."
url: https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel/bez-fasady
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Appointments for Laravel](https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel.md)

# DI a akcie

Fasáda je najkratšia cesta a odporúčaná voľba, no je len jedným z troch rovnocenných vstupných bodov — vyberte si ten, ktorý sa hodí ku kódu, ktorý práve píšete:

- Fasáda Appointments — statické volania, najmenej kódu.
- Manažér — RoundlyConsulting\\Appointments\\AppointmentManager, koreň fasády. Injektujte ho cez konštruktor a získate identické API ako explicitnú závislosť, bez statických volaní.
- Akcie — jednoúčelové triedy s metódou execute(), ktoré skladáte do vlastných akcií, úloh vo fronte a príkazov.

## Injektovanie manažéra

```php
use RoundlyConsulting\Appointments\AppointmentManager;

final class BookingController
{
    public function __construct(private AppointmentManager $appointments) {}

    public function store(): void
    {
        $appointment = $this->appointments->schedule('Consultation')->startingAt(now()->addDay())->create();
        $this->appointments->for($appointment)->participants()->add(auth()->user());
    }
}
```

Appointments::fake() podstrčí fake za fasádu aj do kontajnera, takže fake dostane aj injektovaný AppointmentManager. Manažér zámerne nie je final, aby ho fake mohol rozšíriť.

## Spustenie akcie

Získajte akciu z kontajnera a zavolajte execute() — z úlohy vo fronte, z príkazu alebo z vlastnej akcie:

```php
use RoundlyConsulting\Appointments\Actions\AttachParticipantAction;
use RoundlyConsulting\Appointments\Actions\CreateAppointmentAction;
use RoundlyConsulting\Appointments\Actions\DetachParticipantAction;
use RoundlyConsulting\Appointments\Actions\RescheduleAppointmentAction;
use RoundlyConsulting\Appointments\Actions\ScheduleRecurringAppointmentAction;
use RoundlyConsulting\Appointments\Actions\TransitionAppointmentAction;
use RoundlyConsulting\Appointments\DataTransferObjects\ParticipantData;
use RoundlyConsulting\Appointments\Enums\Status;

$appointment = app(CreateAppointmentAction::class)->execute($appointmentData);
app(AttachParticipantAction::class)->execute($appointment, new ParticipantData($user), preventConflicts: true);
app(DetachParticipantAction::class)->execute($appointment, $user);
app(RescheduleAppointmentAction::class)->execute($appointment, $newStart, durationMinutes: 45);
app(TransitionAppointmentAction::class)->execute($appointment, Status::Confirmed);
app(ScheduleRecurringAppointmentAction::class)->execute($appointmentData, $rule);
```

Priamo volané akcie Appointments::fake() obchádzajú; fasáda, injektovaný manažér ani skratky na modeli nie.

## Metóda fasády → akcia

| Metóda fasády | Akcia |
| --- | --- |
| `create() · schedule()->…->create()` | `CreateAppointmentAction` |
| `createRecurring() · schedule()->…->createRecurring()` | `ScheduleRecurringAppointmentAction` (bez pravidla CreateAppointmentAction) |
| `for($a)->reschedule()` | `RescheduleAppointmentAction` |
| `for($a)->transition() · confirm() · cancel() · complete() · decline() · markNoShow()` | `TransitionAppointmentAction` |
| `for($a)->participants()->add()` | `AttachParticipantAction` |
| `for($a)->participants()->remove()` | `DetachParticipantAction` |
| `conflicts() · isAvailable() · ics() · occurrences()` | — len čítanie, bez akcie |

- CreateAppointmentAction — odmietne duplicitných účastníkov a potom v jednej transakcii uzamkne účastníkov a skontroluje konflikty (ak sú zakázané), uloží termín v UTC spolu s jeho pásmom, pripojí účastníkov a kontakty, otvorí žiadosť o schválenie a vráti termín s načítanými účastníkmi.
- ScheduleRecurringAppointmentAction — rozvinie pravidlo v pásme termínu a v jednej transakcii vytvorí všetky výskyty so spoločnou recurrence\_group.
- RescheduleAppointmentAction — presunie začiatok, ponechá trvanie, ak nezadáte nové, a spustí AppointmentRescheduled; pri zakázaných konfliktoch najprv uzamkne termín aj jeho účastníkov.
- TransitionAppointmentAction — overí a vykoná zmenu stavu a spustí AppointmentStatusChanged.
- AttachParticipantAction — pridá jedného účastníka za kontrolou duplicít a voliteľnou kontrolou konfliktov; skôr odobraného účastníka obnoví namiesto nového vloženia.
- DetachParticipantAction — cez soft delete odoberie účastníka podľa modelu alebo podľa riadka daného termínu; pri čomkoľvek inom vyhodí ParticipantNotFoundException.

Verejné metódy manažéra rescheduleFor(), transitionFor(), addParticipantFor() a removeParticipantFor() sú @internal — tvoria telo metód handlu a sú jediným miestom, ktoré fake prepisuje. Volajte namiesto nich handle for().

create(), createRecurring() aj všetky akcie prijímajú typované DTO opísané v časti Typované DTO.

## 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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel.md)
