Open source
Opening Hours for Laravel
composer require roundly-consulting/opening-hours-for-laravelPrehľad
Natívny engine otváracích hodín pre Laravel. Priraďte akémukoľvek Eloquent modelu jeden alebo viac pomenovaných kalendárov — týždenné hodiny s obedňajšou prestávkou aj rozsahmi cez polnoc, sezónne rozvrhy, jednorazové a každoročné výnimky, sviatky viazané na Veľkú noc — a cez jednu fasádu OpeningHours sa pýtajte na čokoľvek: je otvorené teraz, kedy sa otvára, aké sú hodiny v daný deň, zoskupený týždeň, dáta pre schema.org. Odpovedá správne aj pri zmene času podľa jedného explicitného pravidla a z tých istých hodín vytvorí kontroly dostupnosti a rezervovateľné sloty napájané z ľubovoľného zdroja obsadenosti. Licencia MIT, postavené len na Laraveli a vlastných základných balíkoch Roundly — bez závislostí tretích strán.
Čo získate
Týždenné hodiny z praxe
Viac rozsahov za deň, rozsahy cez polnoc (22:00-02:00), nonstop aj zatvorené dni — a viac pomenovaných kalendárov na vlastníka.
Sezóny, výnimky a sviatky
Sezónne rozvrhy s prioritami, výnimky pre dátumy, obdobia a každoročné sviatky zapisované bezpečne pri súbežnosti a pohyblivé sviatky viazané na Veľkú noc či vlastné pravidlo.
Fasáda, DI alebo akcie
Jedna fasáda OpeningHours, injektovateľný manažér alebo jednoúčelové akcie — a OpeningHours::fake() zaznamená každý zápis bez zásahu do databázy.
Kompletné dotazovacie API
isOpenAt, nextOpen, nextClose, forDate, forWeek, dĺžka otvorenia a štruktúrované dáta pre schema.org.
Jedno explicitné pravidlo pre DST
Každá hranica sa vyhodnotí rovnako v každom pásme — overené brute-force orákulom na skutočných zmenách času.
Dostupnosť a sloty
Kapacita, časové rezervy, minimálny predstih a horizont, napájané z ľubovoľného zdroja obsadenosti — bez rezervačného balíka.
Pripravené do produkcie
Validačné pravidlo, fluentný builder s optimistickou súbežnosťou, cache podľa revízie, udalosti, API zdroje a voliteľné SQL scopy.
Dokumentácia
Inštalácia
Inštalácia cez Composer, publikovanie a spustenie šiestich migrácií a voliteľne publikovanie konfigurácie a prekladov en/sk.
Konfigurácia
Každý konfiguračný kľúč s predvolenou hodnotou a env premennou — časové pásma, hľadanie, limity, cache, API, čistenie a materializácia.
Vlastníci a kalendáre
Z akéhokoľvek Eloquent modelu urobíte vlastníka traitom HasOpeningHours, pridáte mu viac pomenovaných kalendárov a nastavíte časové pásmo.
Fasáda OpeningHours
Každý zápis aj čítanie cez jednu fasádu — sync, edit, exceptions(), delete(force:), refresh, validate — a dotazovací objekt, ktorý vracia.
DI a akcie
Namiesto fasády injektujte OpeningHoursManager alebo zavolajte akciu priamo — mapa fasáda → akcia a čo fake vidí a čo nie.
Definovanie otváracích hodín
Uložte hodiny z poľa — týždenné rozsahy, sezónne rozvrhy a výnimky — v rovnakom kanonickom tvare, aký prijíma validačné pravidlo.
Fluentný builder a súbežnosť
Upravujte hodiny cez CalendarBuilder a ScheduleBuilder, chráňte súbežné úpravy revíziami a skladajte kalendáre v pamäti.
Dotazovanie otváracích hodín
Zistite, či má vlastník v danom okamihu otvorené, nájdite najbližšie otvorenie či zatvorenie a vráťte odpovede v ľubovoľnom pásme.
Dni, týždne a štruktúrované dáta
Načítajte hodiny pre ľubovoľný dátum či deň, vykreslite zoskupené týždne s enumom Weekday a prekladmi a publikujte hodiny pre schema.org.
Intervaly a trvanie
Vypíšte obdobia otvorenia medzi dvoma okamihmi, overte celé intervaly a zmerajte čas otvorenia či zatvorenia v reálnych sekundách.
Výnimky a sviatky
Zatvorte alebo zmeňte hodiny pre dátumy, obdobia a každoročné sviatky, pridajte sviatky viazané na Veľkú noc aj vlastné pravidlá.
Validácia a HTTP vstup
Validujte vstup otváracích hodín pravidlom ValidOpeningHours, dostaňte každý problém pod jeho vnoreným kľúčom a validujte aj v kóde.
Dostupnosť a sloty
Overte, či sa dá termín rezervovať, a vypíšte voľné sloty — s kapacitou, časovými rezervami, predstihom a horizontom z akéhokoľvek zdroja.
Poskytovatelia obsadenosti
Napájajte dostupnosť z Eloquent dotazov, polí, closures alebo vlastného poskytovateľa — bez väzby na akýkoľvek rezervačný balík.
API zdroje
Hotové JSON resources pre aktuálny stav, upraviteľné definície, hodiny dňa a sloty — routy a controllery ostávajú na vás.
Cache a eager loading
Cache definícií podľa revízie bez potreby invalidácie, memo v rámci requestu a zoznamy bez N+1 dotazov.
Udalosti
Reagujte na zmenu alebo odstránenie hodín vlastníka — obe udalosti sa odosielajú po commite so skalárnymi dátami bezpečnými pre fronty.
SQL scopy
Filtrujte vlastníkov, ktorí majú otvorené teraz alebo počas celého intervalu, priamo v SQL cez voliteľné materializované intervaly.
Artisan príkazy
Pozrite si hodiny ľubovoľného vlastníka v termináli, premažte staré výnimky a zmazané riadky a obnovte materializované intervaly.
Import týždenných polí
Importujte hodiny uložené v rozšírenom formáte polí podľa dní, s popismi a výnimkami — ako import dát, nie prepis kódu.
Časové pásma a DST
Ako sa určuje časové pásmo kalendára, ako vrátiť odpovede v ľubovoľnom pásme a jedno explicitné pravidlo pre zmenu času.
Rozširovanie
Nahraďte modely vlastnými podtriedami, napojte časové pásmo a dynamické výnimky vlastníka a pripojte vlastných poskytovateľov.
Ošetrenie chýb
Všetky výnimky balíka dedia z jednej základnej triedy — zachyťte ich naraz alebo ošetrite zastarané zápisy a príliš veľké dotazy zvlášť.
Bezpečnosť
Čo balík stráži za vás — cudzie id, skryté meta, viazané stĺpce, limity veľkosti — a čo ostáva vo vašej zodpovednosti.
Testovanie
Zaznamenajte každý zápis cez OpeningHours::fake() a overte sync, výnimky, mazanie aj refresh — alebo zmrazte čas a testujte nad skutočnými riadkami.
Požiadavky
PHP 8.4+, Laravel 12 alebo 13 a SQLite, PostgreSQL či MySQL — bez PHP rozšírení a bez knižníc tretích strán.
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.