Skip to content

Управление регистрациями в потоках школ#

Описание#

Функциональность позволяет администраторам самостоятельно открывать и закрывать регистрацию учеников в потоках школ — на уровне отдельного потока и массово в рамках потока обучения (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.

Выдача права администратору#

  1. POST /admin/rbac/v1/create_assignment — привязать пользователя к блоку 21
  2. POST /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} — поле registrationOpened
  • GET /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

Связанные документы#