Fasáda Appointments
Všetko prechádza cez RoundlyConsulting\Appointments\Facades\Appointments. Jej koreňom je AppointmentManager, singleton v kontajneri, ktorý môžete aj injektovať (pozrite DI a akcie). schedule(), create() a createRecurring() zapisujú nové rezervácie, for($appointment) obmedzí každú zmenu na jednu rezerváciu a metódy na čítanie zodpovedajú otázky dostupnosti a exportu bez akéhokoľvek zápisu:
use Carbon\CarbonImmutable;
use RoundlyConsulting\Appointments\DataTransferObjects\RecurrenceData;
use RoundlyConsulting\Appointments\Enums\Frequency;
use RoundlyConsulting\Appointments\Enums\Status;
use RoundlyConsulting\Appointments\Facades\Appointments;
// Create
$appointment = Appointments::schedule('Consultation')->startingAt('2026-07-01 09:00')->lasting(45)->create();
$appointment = Appointments::create($appointmentData); // from an AppointmentData
$series = Appointments::createRecurring($appointmentData, $rule); // Collection<int, Appointment>
// One booking
$booking = Appointments::for($appointment); // AppointmentHandle
$booking->reschedule(CarbonImmutable::parse('2026-07-02 10:00')); // keeps the duration
$booking->confirm(); // or cancel(), complete(), decline(), markNoShow()
$booking->transition(Status::Completed);
$booking->participants()->add($user); // AppointmentParticipants
$booking->ics(); // one-event calendar
// Reads — nothing is written
Appointments::isAvailable($doctor, $start, $end); // bool
Appointments::conflicts($doctor, $start, $end); // Collection<int, Appointment>
Appointments::ics($user->appointments()->upcoming()->get()); // one VCALENDAR, many VEVENTs
Appointments::occurrences($start, new RecurrenceData(Frequency::Weekly, count: 4)); // list<CarbonImmutable>
// Tests
$fake = Appointments::fake(); // AppointmentsFakePrehľad metód
| Metóda | Vracia |
|---|---|
schedule(string $name) | AppointmentBuilder — zreťazte metódy buildera a zavolajte create() alebo createRecurring(). |
create(AppointmentData $data) | Appointment. |
createRecurring(AppointmentData $data, ?RecurrenceData $rule = null) | Collection<int, Appointment> — bez pravidla použije recurrence z DTO; ak chýba aj to, kolekciu s jedným termínom. |
for(Appointment $appointment) | AppointmentHandle — reschedule(), transition(), confirm(), cancel(), complete(), decline(), markNoShow(), participants(), ics(). |
for($appointment)->participants() | AppointmentParticipants — add(), remove(), has(), all(). |
conflicts(Model $participant, $start, $end, ?Appointment $ignore = null) | Collection<int, Appointment> — prekrývajúce sa rezervácie účastníka. |
isAvailable(Model $participant, $start, $end, ?Appointment $ignore = null) | bool — voľno počas celého okna. |
ics(iterable $appointments) | string — jeden VCALENDAR s jedným VEVENT na termín. |
occurrences(CarbonInterface $start, RecurrenceData $rule) | list<CarbonImmutable> — začiatky podľa pravidla, bez zápisu. |
fake() | AppointmentsFake — pozrite Testovanie. |
Handle for()
Appointments::for($appointment) vráti AppointmentHandle naviazaný na danú rezerváciu. reschedule() ponechá trvanie, ak nezadáte nové, a spustí AppointmentRescheduled; transition() a skratky ako confirm() prechádzajú stráženým stavovým automatom; participants() vráti AppointmentParticipants obmedzené na túto rezerváciu s metódami add(), remove(), has() a all(); ics() vykreslí rezerváciu ako kalendár s jednou udalosťou.
Skratky na modeli
Metódy confirm(), cancel(), complete(), decline(), markNoShow(), transitionTo() a toIcs() na modeli Appointment sú len skratkou k tomu istému handlu — volajú for($this) na manažéri, takže ich vidí aj prepísanie v hostiteľskej aplikácii, aj Appointments::fake().
- Každý zápis — z fasády, injektovaného manažéra, buildera, handlu či skratky na modeli — prejde jednou metódou manažéra, ktorá si akciu získa z kontajnera, takže akcia, ktorú previažete, platí všade.
- Každý zápis rezervácie prebehne v jednej transakcii a eventy balíka sa spustia až po jej potvrdení: odmietnutá či zlyhaná rezervácia nezanechá riadok ani nespustí event.
- Builder, handle aj prístup k účastníkom dostanete hotové — začnite od schedule() a for(), nikdy nie cez new.
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 kryptomienOdoslaní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.