Skip to content

Групповые (командные) лабораторные работы #54

Description

@markpolyak

Ознакомиться с docs/TEAM_ASSIGNMENTS_PLAN.md и реализовать функционал согласно плану.

Продолжение #46: сейчас /join/{course_id}/{lab_id} создаёт один репозиторий на одного студента. Нужно поддержать лабы, которые выполняются командами: один репозиторий на команду, доступ у всех её участников.

Сценарий: студент переходит по той же ссылке, авторизуется через GitHub, видит список уже созданных команд (человекочитаемое название, описание, состав, заполненность) и кнопку «Создать команду». Преподаватель задаёт в конфиге лабы максимум участников в команде и/или максимум команд.

Ключевые решения плана:

  • Команда = репозиторий. Источник истины о составе — прямые коллабораторы репозитория {github-prefix}-team-{N} плюс непринятые приглашения; название и описание команды хранятся в поле description репозитория. Нового хранилища не появляется, а RepoProvisioner._ensure_access (вместе с починкой протухших приглашений — заменой github-reinvite) переиспользуется целиком.
  • GitHub teams (подход GitHub Classroom) не используются — членство в team требует членства в организации, что меняет модель доступа всего проекта; разбор в §3.2 плана.
  • Удаление студента из команды — штатная операция GitHub (Settings → Collaborators → Remove плюс отмена непринятого приглашения); инструкция для преподавателя в §12 плана.
  • После OAuth заводится короткая подписанная cookie-сессия студента (join_session), так как командный сценарий требует диалога, а не одного колбэка. Username берётся только из cookie.
  • Проверка работ: команда оценивается один раз, результат разносится по строкам всех участников с индивидуальной проверкой защиты ячейки. TASKID для командных лаб отключается.

Этапы и чек-лист приёмки — в §16 плана. Этап 7 (управление командами из админки) помечен как опциональный, вне минимального объёма.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions