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

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

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:

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ádyAkcia
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

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.