# Библиотека расписаний работы

Расписания работы для серверов в режиме «по расписанию»: сервер работает в окна расписания и спит вне их. Библиотека общая на портал — одно расписание назначается многим серверам, и правка его окон сразу меняет режим всех назначенных машин.

**Готовые и свои расписания.** Готовые расписания даёт платформа: `weekdays-9-18` — будни с 9 до 18, `weekdays-8-20` — будни с 8 до 20, `daily-9-21` — каждый день с 9 до 21. Они не правятся и не удаляются: для другой недели создайте своё расписание. Своих расписаний у портала может быть до 50.

**Окна недели.** Окно — объект `{ isoDay, start, end }` в местном времени расписания: `isoDay` от 1 (понедельник) до 7, `start` и `end` в формате `ЧЧ:ММ` с шагом 30 минут, конец суток — `24:00`. Окно длится не меньше часа и не переходит через полночь. В одном дне — до двух окон, и между ними не меньше 30 минут.

**Кто правит.** Своё расписание правит и удаляет его автор или администратор портала. Поле `canEdit` в ответе показывает, вправе ли это владелец ключа.

**Пока режимы не включены.** Чтение библиотеки доступно всегда. Создание, правка и удаление, как и [смена режима сервера](/docs/infra/lifecycle/run-mode), отвечают `400 RUN_MODE_UNAVAILABLE`, пока режимы работы не включены для портала. До этого библиотека пуста: готовые расписания появляются в ней вместе с режимами.

Скоуп: `vibe:infra`

## Операции

- [Список расписаний](./work-schedules/list.md) — `GET /v1/work-schedules`
- [Получить расписание](./work-schedules/get.md) — `GET /v1/work-schedules/:id`
- [Создать расписание](./work-schedules/create.md) — `POST /v1/work-schedules`
- [Обновить расписание](./work-schedules/update.md) — `PATCH /v1/work-schedules/:id`
- [Удалить расписание](./work-schedules/delete.md) — `DELETE /v1/work-schedules/:id`

## Типовой сценарий

1. Найти подходящее расписание в [списке](./work-schedules/list.md) или завести своё через [создание](./work-schedules/create.md).
2. Назначить его серверу — [`PATCH /v1/infra/servers/:id/run-mode`](/docs/infra/lifecycle/run-mode) с `mode: "SCHEDULE"` и `scheduleId`.
3. Поменять окна сразу у всех назначенных серверов — [обновить расписание](./work-schedules/update.md) с текущей `version`.

## Смотрите также

- [Инфраструктура](/docs/infra)
- [Сменить режим работы сервера](/docs/infra/lifecycle/run-mode)
- [Пробуждение по расписанию](/docs/infra/wake-schedules)
