ArtisanPack UI
DocsBookingsContracts

Contracts

Bookings v1.2.2

holds eleven interfaces. Six are replaceable seams — bind your own implementation in a service provider and the package uses it instead of the default...

ArtisanPackUI\Bookings\Contracts holds eleven interfaces. Six are replaceable seams — bind your own implementation in a service provider and the package uses it instead of the default:

Contract Replaces Default
SlotResolver how availability rules become bookable slots AvailabilityService
RoundRobinStrategy which provider is assigned to a slot LeastRecentlyAssignedStrategy
CalendarSyncDriver how one external calendar system is talked to IcalFeedDriver, GoogleCalendarDriver
NotificationChannel how one lifecycle message is delivered CMS or Laravel channel
SmsDriver which gateway a text message is handed to null (logs only)
MeetingTypeRegistry which shapes a service can be booked in MeetingTypeRegistry

The other five are internal interfaces rather than seams you bind: CalendarDriverRegistry (the registry drivers register through), GoogleTokenProvider (bound by artisanpack-ui/google), TwoWayCalendarDriver (the two-way surface a read-back driver adds on top of CalendarSyncDriver), MeetingType (contributed through a filter, below), and ResolvesHostAddresses (the webhook guard's host resolver, replaceable for split-horizon DNS).

Binding a contract

use ArtisanPackUI\Bookings\Contracts\RoundRobinStrategy;

public function register(): void
{
    $this->app->bind( RoundRobinStrategy::class, MyFairnessStrategy::class );
}

MeetingTypeRegistry is the odd one out

Bind it only to replace the registry itself. To add a meeting type — the common case — implement Contracts\MeetingType (or construct a RegisteredMeetingType) and contribute it through the ap.bookings.registeredMeetingTypes filter. No binding required. See Hooks & Filters.

CalendarSyncDriver

The calendar driver contract is a seam and a plugin point at once: bind or register a driver to talk to a calendar system the package does not ship. Its full method set and rules are covered under Calendar Sync.

SmsDriver

One method — send( string $phone, string $message ): void — handed a number and a string, knowing nothing about bookings. Name your class in notifications.sms_driver or bind the contract. See Text Messages.

Site resolution is not on this list

Site resolution is deliberately not a bookings contract. It is ArtisanPackUI\Core\Contracts\SiteResolver, bound once for the whole ecosystem — see Multi-Site.

Stay in the Loop

Monthly tips, tutorials and package updates — plus a free Quick Start cheat sheet.

Subscribe
Edit this page on GitHub