Управление регистрациями в потоках школ#
Описание#
Функциональность позволяет администраторам самостоятельно открывать и закрывать регистрацию учеников в потоках школ — на уровне отдельного потока и массово в рамках потока обучения (mentor flow).
Ранее флаг registrationOpened менялся через UpdateSchoolFlow. Теперь управление регистрацией вынесено в отдельные ручки и отдельное право RBAC.
Сервисы#
| Сервис | Роль |
|---|---|
terra_school_service |
gRPC: хранение флага registration_opened, бизнес-логика, проверка при регистрации ученика |
admin (webAPI) |
HTTP-ручки для админ-панели, проверка RBAC |
terra_gateway |
Регистрация ученика (RegisterOnFlow) — автоматически учитывает закрытую регистрацию |
terra_rbac_service |
Выдача права SCHOOL_FLOW_REGISTRATION_MANAGE |
Состояния регистрации#
| Состояние | Значение registrationOpened |
|---|---|
| Открыта | true |
| Закрыта | false |
Поле хранится в terra_school_service.school_flow.registration_opened (см. flow.md).
Права доступа (RBAC)#
Блок#
SCHOOL_FLOW_REGISTRATION_MANAGE = 21— управление регистрациями потоков школ (isSubBlock)
Подробнее: constants.md
Требуемый доступ#
Для всех операций управления регистрацией требуется:
- блок:
SCHOOL_FLOW_REGISTRATION_MANAGE(21) - доступ:
UPDATE(3)
Важно#
- Право
SCHOOL_FLOW+UPDATE(редактирование потока) не даёт доступ к open/close регистрации. - Право
MENTOR_REGISTRATION(наставники) не распространяется на потоки школ. - Право
SCHOOL_REGISTRATION(модерация заявок approve/reject) — отдельное, не заменяет manage.
Выдача права администратору#
POST /admin/rbac/v1/create_assignment— привязать пользователя к блоку21POST /admin/rbac/v1/create_admin_scope— выдатьadminAccesses: [3](UPDATE)
Пример create_assignment:
{
"userUUID": "3486dc79-c089-4946-93ab-60419a92c781",
"role": 1,
"block": 21,
"canCreate": false,
"canDeleteWithoutApproval": false,
"canSharePermissions": false
}
Пример create_admin_scope:
{
"assignmentUUID": "uuid-из-create_assignment",
"adminAccesses": [3]
}
Проверка права в школах#
GET /admin/school/v1/permissions
При наличии права:
{
"permissions": {
"SCHOOL_FLOW_REGISTRATION_MANAGE": ["UPDATE"]
}
}
Admin API#
Базовый префикс prod: https://mobile-api.terraprod.ru/admin
Dev: https://gateway.devterra.ru/admin
Все ручки требуют авторизации администратора.
SetSchoolFlowRegistrationOpened#
Открыть или закрыть регистрацию на одном потоке школы.
Ручка: PATCH /school_flows/v1/{schoolFlowUUID}/registration_opened
| Среда | URL |
|---|---|
| Dev | https://gateway.devterra.ru/admin/school_flows/v1/{schoolFlowUUID}/registration_opened |
| Prod | https://mobile-api.terraprod.ru/admin/school_flows/v1/{schoolFlowUUID}/registration_opened |
RBAC: SCHOOL_FLOW_REGISTRATION_MANAGE + UPDATE
Параметры#
| Поле | Тип | Где | Обязательное | Описание |
|---|---|---|---|---|
| schoolFlowUUID | string | path | ✅ | UUID потока школы |
| registrationOpened | bool | body | ✅ | true — открыть, false — закрыть |
Пример запроса#
{
"registrationOpened": true
}
Ответ#
200 OK
gRPC (terra_school_service)#
SchoolFlowService.SetSchoolFlowRegistrationOpened
BulkSetSchoolFlowRegistrationOpened#
Массово открыть или закрыть регистрацию на всех потоках школ, привязанных к потоку обучения.
Ручка: POST /school_flows/v1/bulk_set_registration_opened
| Среда | URL |
|---|---|
| Dev | https://gateway.devterra.ru/admin/school_flows/v1/bulk_set_registration_opened |
| Prod | https://mobile-api.terraprod.ru/admin/school_flows/v1/bulk_set_registration_opened |
RBAC: SCHOOL_FLOW_REGISTRATION_MANAGE + UPDATE
Тело запроса#
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| mentorFlowID | int32 | ✅ | ID потока обучения |
| registrationOpened | bool | ✅ | true — открыть все, false — закрыть все |
Пример запроса#
{
"mentorFlowID": 101,
"registrationOpened": false
}
Пример ответа#
{
"updatedCount": 12
}
| Поле | Тип | Описание |
|---|---|---|
| updatedCount | int32 | Количество обновлённых потоков школ |
gRPC (terra_school_service)#
SchoolFlowService.BulkSetSchoolFlowRegistrationOpened
GetMentorFlowSchoolFlowsRegistrationStatus#
Сводка и (опционально) детальный список состояния регистраций по потокам школ в рамках потока обучения.
Ручка: POST /school_flows/v1/get_mentor_flow_registration_status
| Среда | URL |
|---|---|
| Dev | https://gateway.devterra.ru/admin/school_flows/v1/get_mentor_flow_registration_status |
| Prod | https://mobile-api.terraprod.ru/admin/school_flows/v1/get_mentor_flow_registration_status |
RBAC: SCHOOL_FLOW_REGISTRATION_MANAGE + UPDATE
Тело запроса#
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| mentorFlowID | int32 | ✅ | ID потока обучения |
| includeDetails | bool | ❌ | true — вернуть таблицу по каждому потоку |
Пример запроса#
{
"mentorFlowID": 101,
"includeDetails": true
}
Пример ответа#
{
"openedCount": 8,
"closedCount": 4,
"details": [
{
"schoolUUID": "ae3adcf1-bf6d-4e6f-9b87-fc199a3d3a91",
"schoolName": "Школа A",
"schoolFlowUUID": "bf88f76a-f465-4707-b026-6e77e50e1628",
"schoolFlowName": "Поток 1",
"registrationOpened": true
},
{
"schoolUUID": "ae3adcf1-bf6d-4e6f-9b87-fc199a3d3a91",
"schoolName": "Школа A",
"schoolFlowUUID": "c0123456-7890-abcd-ef12-345678901234",
"schoolFlowName": "Поток 2",
"registrationOpened": false
}
]
}
| Поле | Тип | Описание |
|---|---|---|
| openedCount | int32 | Потоков с открытой регистрацией |
| closedCount | int32 | Потоков с закрытой регистрацией |
| details | array | Список потоков (только при includeDetails: true) |
gRPC (terra_school_service)#
SchoolService.GetMentorFlowSchoolFlowsRegistrationStatus
Отображение состояния (FR-3)#
Текущее состояние регистрации на потоке школы возвращается в существующих ручках:
GET /school_flows/v1/{uuid}— полеregistrationOpenedGET /school/{schoolUUID}/flows— полеregistrationOpenedв каждом элементе списка
Изменение состояния через эти ручки не поддерживается.
Изменения в UpdateSchoolFlow#
Поле registrationOpened удалено из UpdateSchoolFlow.
Для open/close используйте SetSchoolFlowRegistrationOpened или BulkSetSchoolFlowRegistrationOpened.
При создании потока (CreateSchoolFlow) поле registrationOpened по-прежнему можно передать для начального состояния.
Регистрация ученика (FR-4)#
При попытке подать заявку в закрытый поток (registrationOpened = false):
- заявка не создаётся;
- возвращается ошибка
SCHOOL_FLOW_REG_CLOSED; - сообщение для пользователя (RU): «Регистрация на поток закрыта».
Проверка выполняется в terra_school_service при вызове RegisterOnFlow (через terra_gateway).
Существующие заявки при закрытии регистрации не изменяются.
Бизнес-правила#
| ID | Правило |
|---|---|
| BR-1 | Регистрация только в состоянии «открыта» или «закрыта» |
| BR-2 | Массовое изменение затрагивает только потоки школ выбранного mentorFlowID |
| BR-3 | При закрытой регистрации новые заявки создать нельзя |
Edge cases#
| Ситуация | Поведение |
|---|---|
| Регистрация закрыта во время подачи заявки | Заявка не создаётся, ошибка SCHOOL_FLOW_REG_CLOSED |
| Массовое open/close | Обновляются только потоки школ выбранного mentor flow; updatedCount может быть 0 |
Нет права SCHOOL_FLOW_REGISTRATION_MANAGE |
HTTP 403 / ошибка RBAC |
| В mentor flow нет потоков школ | Bulk вернёт updatedCount: 0 |
Связанные документы#
- endpoints.md — общий список ручек школ
- flow.md — таблица
school_flow, полеregistration_opened - ../rbac/constants.md — константы RBAC
- ../rbac/permissions/create_assignment.md
- ../rbac/permissions/create_admin_scope.md