43 lines
3.0 KiB
Markdown
43 lines
3.0 KiB
Markdown
# Фаза 12. Наём, предметы и предел бюджета
|
||
|
||
## Зависимости
|
||
|
||
- [Фаза 11](11-applicants.md)
|
||
|
||
## Зачем
|
||
|
||
Игрок нанимает людей и раздаёт предметы, а выделенная сумма ограничивает, сколько он может себе
|
||
позволить. Экрана ещё нет — всё через API.
|
||
|
||
## Задачи
|
||
|
||
- [x] Выделяемая на месяц сумма — в `SimulationOptions`, с умолчанием
|
||
- [x] Фонд оплаты школы: сумма базовых ставок плюс надбавки за предметы сверх первого
|
||
- [x] Наём: соискатель уходит из пула, становится работником, попадает в ростер. Родитель
|
||
остаётся родителем — новой сущности не заводится
|
||
- [x] Назначение предмета нанятому и снятие предмета
|
||
- [x] Предел проверяется **в момент действия**: наём или назначение, выводящее фонд за
|
||
выделенную сумму, отклоняется с внятным кодом ошибки, а не откладывается до конца месяца
|
||
- [x] Покрытие предметов: какие предметы преподаются в существующих параллелях и не имеют ни
|
||
одного учителя
|
||
- [x] `GET /api/schools/{id}/staffing` — деньги, покрытие, пул и штат; читает опубликованный
|
||
снимок, воркер не трогает
|
||
- [x] Наём и назначение идут в воркер через мейлбокс с `TaskCompletionSource`, как create и delete
|
||
- [x] Состав пишется на диск при изменении, снимок публикуется заново
|
||
- [x] `docs/protocol.md` пополняется в том же коммите, что и обработчики
|
||
|
||
## Критерий готовности
|
||
|
||
- Нанять двоих на 3 000 и 7 000 при выделенных 10 000 — третий наём отклонён
|
||
- Снять предмет — фонд уменьшился, наём снова возможен
|
||
- Назначение, не влезающее в предел, отклонено, и в ответе видно почему
|
||
- Перезапуск сервера поднимает школу с тем же штатом и теми же назначениями
|
||
- Тесты API: наём, повторный наём того же человека, отклонение по пределу, неизвестная школа,
|
||
неизвестный соискатель
|
||
- `dotnet test` проходит
|
||
|
||
## Стоп
|
||
|
||
Не увольнять. Не платить зарплату по месяцам — предел проверяется, деньги не движутся.
|
||
Не расписание.
|