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

Eventy a výnimky

Balík spustí event pri každej zmene, takže potvrdenia, synchronizácia kalendára či dashboardy zostanú mimo vášho plánovacieho kódu. Všetky sú v RoundlyConsulting\Appointments\Events:

EventDátaSpustí sa, keď
AppointmentCreated$appointmentsa vloží riadok termínu.
AppointmentUpdated$appointmentsa termín uloží so zmenami — vrátane presunov a zmien stavu.
AppointmentRescheduled$appointment, $previousStartsAtreschedule() presunie termín.
AppointmentStatusChanged$appointment, $from, $tonastane prechod stavu — priamo alebo cez synchronizáciu schválenia.
ParticipantCreated$participantsa účastník pridá prvýkrát.
ParticipantUpdated$participantsa riadok účastníka uloží so zmenami — alebo sa odobraný účastník pridá znova a jeho riadok sa obnoví.
ParticipantDeleted$participantsa účastník odoberie (soft delete) — jeden event na riadok.
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Appointments\Enums\Status;
use RoundlyConsulting\Appointments\Events\AppointmentStatusChanged;

Event::listen(function (AppointmentStatusChanged $event): void {
    if ($event->to === Status::Confirmed) {
        foreach ($event->appointment->participants as $participant) {
            // notify $participant->participant that the booking is confirmed
        }
    }
});

Poznámky k načasovaniu

  • Každý event balíka implementuje ShouldDispatchAfterCommit: v databázovej transakcii sa spustí až po jej potvrdení a pri zápise, ktorý sa vráti späť, sa nespustí vôbec.
  • Rezervácia sa zapisuje v jednej transakcii, takže AppointmentCreated sa spustí až po uložení jej účastníkov, kontaktov a žiadosti o schválenie — a odmietnutá či zlyhaná rezervácia nespustí nič.
  • Opakovaná séria je tiež jedna transakcia: jej eventy sa spustia po potvrdení celej série a séria, ktorá sa vráti späť, nespustí žiadny.
  • reschedule() aj prechody stavu model ukladajú, takže popri AppointmentRescheduled či AppointmentStatusChanged sa spustí aj AppointmentUpdated.
  • Stav nastavený pri vytvorení cez withStatus() AppointmentStatusChanged nespustí, rovnako ako prechod na aktuálny stav.

Výnimky

VýnimkaKedy nastaneNesie
InvalidStatusTransitionExceptionPrechod stavu, ktorý stavový automat nepovoľuje.$from, $to
SchedulingConflictExceptionVytvorenie, presun alebo pridanie účastníka sa pri zapnutej ochrane prekrýva s rezerváciou účastníka.$conflicts — Collection termínov
DuplicateParticipantExceptionTen istý model je pri novom termíne uvedený dvakrát alebo participants()->add() dostane model, ktorý sa už zúčastňuje.—
ParticipantNotFoundExceptionparticipants()->remove() dostane model, ktorý sa nezúčastňuje, alebo riadok účastníka iného termínu.—
InvalidScheduleExceptionTrvanie kratšie ako jedna minúta alebo koniec, ktorý nie je neskôr ako začiatok — z buildera, AppointmentData či reschedule(). Vyhodí sa pred akýmkoľvek zápisom.—
InvalidRecurrenceExceptionRecurrenceData s intervalom či počtom pod jedna alebo s dňom v týždni mimo 1–7.—
CannotReviewAppointmentExceptionreview() pre neovereného autora pri zapnutom reviews.require_verified_attendance.—
AppointmentsExceptionAbstraktná základná trieda všetkých výnimiek vyššie.—

Všetky sú v RoundlyConsulting\Appointments\Exceptions a rozširujú AppointmentsException, takže jeden catch pokryje celý balík.

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.