Мастера и ресурсы
Создание мастера/кабинета/оборудования, привязка к услугам, опциональная таймзона, активность.
Мастера и ресурсы
Ресурс — это то, что физически выполняет услугу: конкретный мастер, кабинет, единица оборудования, переговорная комната. У ресурса своё расписание (которое расшаривается между всеми услугами, что он оказывает), и это естественная единица учёта пропускной способности.
Когда нужен ресурс
| Сценарий | Нужен ресурс? |
|---|---|
| Один мастер делает все услуги | Да — один ресурс «Мастер Маша», все услуги привязаны к нему. |
| Несколько мастеров одной специальности | Да — по ресурсу на каждого. Клиент выбирает или система берёт first available. |
| Кабинет с оборудованием, мастера сменяемые | Да — ресурс «Кабинет 1», расписание по кабинету, не по людям. |
| Онлайн-консультация без привязки к конкретному человеку | Не обязательно. Услугу можно оставить без ресурса — slot-engine работает по правилам с resourceId=NULL. |
Создание
/account/services → вкладка «Мастера» → «Создать».
| Поле | Описание |
|---|---|
| Имя | Видно клиенту при выборе мастера на чекауте. |
| Описание | Короткая регалия / профиль. |
| Аватар | URL картинки. Можно загрузить через файловый менеджер. |
| Таймзона (опционально) | Если ресурс физически работает в другой зоне, чем услуга — переопределяет service.timezone. NULL = используется зона услуги. |
| Активен | Если выключено — ресурс не отдаётся ни в одном slot-расчёте, новые записи на него не делаются. |
Привязка ресурса к услугам
Один ресурс может оказывать несколько услуг — например, мастер Маша делает и стрижку, и окрашивание. Это идёт через M2M service_to_resource. Управляется:
- Со стороны услуги — в карточке услуги блок «Мастера».
- Со стороны ресурса — в карточке ресурса блок «Услуги».
Оба интерфейса пишут в одну и ту же M2M.
Расписание ресурса
Расписание привязано к ресурсу, не к услуге — потому что один мастер делает разные услуги по одному графику. Подробнее: Расписание.
Опционально можно ограничить правило конкретной услугой (например, мастер делает массаж только утром, а консультации — днём) — для этого в правиле задаётся serviceId.
Что произойдёт, если удалить ресурс
Каскадно отвалятся:
- привязки
service_to_resource; - правила расписания (
service_availability_rule); - time-off для этого ресурса.
Существующие брони останутся, но booking.resourceId станет NULL (через ON DELETE SET NULL) — клиент уже записан, и эту запись надо обслужить, даже если мастера в системе больше нет.
Если ресурс уходит в отпуск или болеет — не удаляйте его, а заведите time-off. Расписание автоматически перестанет отдавать слоты на это время.
Деактивация vs удаление
- Деактивация (
isActive=false) — ресурс больше не показывается клиенту, slot-engine не отдаёт его слотов. Но история броней и привязки остаются. Это безопасный «выключатель». - Удаление — destructive. Используйте только если ресурс заведён по ошибке или давно не работает.
Таймзона ресурса (про DST)
Мастер в Питере, бизнес в Москве — обе зоны Москвы, всё работает. Но если мастер из Калининграда оказывает услуги московского бизнеса, у него своё локальное время. Тогда заполните service_resource.timezone = 'Europe/Kaliningrad'. Slot-engine корректно учтёт это: правила «9:00–18:00» этого ресурса будут резолвиться в его зоне, а клиентам отображаться в их.
Что хранится в БД
| Таблица | Что |
|---|---|
service_resource | Ресурс (мастер/кабинет/оборудование) |
service_to_resource | M2M услуга ↔ ресурс |