Skip to content

Latest commit

 

History

History
80 lines (61 loc) · 7.11 KB

expert-workspace.md

File metadata and controls

80 lines (61 loc) · 7.11 KB

Эксперты и личное оценивание

Организатор получает пятую вкладку «Эксперты» в управлении программой: приглашения по email, состав и нагрузку, ручное назначение проектов, предпросмотр и применение автораспределения, изменение необходимого числа оценщиков.

Макеты:

Переходы и роли

/office/evaluation всегда открывает «Мои программы», даже с одной программой. Кнопка программы «Оценка проектов» открывает непосредственно её /office/program/{id}/projects-rating; карточка в кабинете ведёт туда же.

Меню доступно принявшим приглашение экспертам и пользователям с действующим приглашением на их email. При нуле назначений вход остаётся, показано пустое состояние. Обычный участник не видит оценивание; организатор видит управление; эксперт — оценку; совмещающий обе роли — обе кнопки. Роль проверяется в текущей программе, глобальный user_type не является источником разрешения.

Права и ограничения повторно проверяются backend при прямом запросе. Принятие приглашения сбрасывает кеш сведений о программе и обновляет профиль. Возврат в кабинет после оценки обновляет личные счётчики.

Приглашение

/expert-invitation/{token} находится вне Office, чтобы новый пользователь мог пройти путь до входа. Открытие ссылки ничего не создаёт и не принимает.

Новый аккаунт: фиксированный email, имя, фамилия, пароль/повтор и действующие согласия платформы (не отмечены заранее). Даты рождения в этом сценарии нет. Создание и принятие атомарны; повторное подтверждение email не отправляется. Обязательный onboarding не перекрывает переход к оценке, но остальные сценарии платформы сохраняют свои требования.

Существующий аккаунт: вход, затем отдельное принятие приглашения. Другая почта показывает объяснение и смену аккаунта. Восстановление пароля сохраняет контекст приглашения, после смены пароля возвращает на вход, не авторизует автоматически. Ссылка из письма открывает /expert-password-reset/ в той же Auth-оболочке; этот SPA route не пересекается с API /auth/ на совмещённом DEV-host. Просроченная/отозванная ссылка и повторное принятие имеют отдельные состояния. На странице приглашения действует no-referrer; ссылка не передаётся в Referer.

UI и ограничения

Используются существующие Modal/CDK focus trap, Button/Field/Choice/Avatar/Alert, Mont, семантические токены и текущая оболочка. Все новые модалки центрированы, высота ограничена viewport, длинные списки прокручиваются внутри. Desktop — компактная таблица, 390/360 — карточки. Выбор строки/кружка повторным нажатием снимается. Поиск сохраняет фокус и текст; выбранный кейс остаётся в select.

Защищённые назначения с оценками не снимаются. При 409 выбор остаётся в редакторе; нужно обновить данные перед повторной записью. Pending не доступен для назначения. Автораспределение заполняет дефицит до N, исключает свои команды, сохраняет текущие назначения и показывает нагрузку до/после. Нехватка кандидатов блокирует применение. Изменение N предварительно показывает влияние на готовность; оценки не удаляются.

API и rollout

Новый EvaluationRepositoryPort → HTTP adapter/repository → use case → UI; доменная логика не размещается в компонентах. Используется существующее преобразование snake_case/camelCase. Контракт и миграции — docs/expert-workspace.md в API repo. Backend должен быть выложен раньше Angular. Новая таблица приглашений и nullable birthday обязательны до открытия новых маршрутов.

Новый кабинет показывает назначения (assigned_only=1), поэтому существующим экспертам перед началом работы следует назначить проекты через новую вкладку. Backend сохраняет прежний open mode для старых клиентов до явного включения управляемого режима организатором. Production/React rollout в эту задачу не входит.

AC1–AC9 и правила объединены в implementation spec. Feature tests находятся рядом с ExpertsComponent и ExpertInvitationComponent; рейтинг проверяется существующим RatingCardService suite. Browser acceptance использует настоящий изолированный Django/PostgreSQL, синтетические аккаунты и locmem mail; реальных писем не отправляет.