Skip to content

Balloon and print tasks are never created, so the staff screen is structurally empty #87

Closed

Description

@matbrgz

O que existe

App\Models\Task tem exatamente o formato da tasktable do BOCA: task_number, description, filename, file_path, color_name, color_hex, staff_id, completed_time. O StaffController está documentado como "Staff task screen (BOCA's staff/task.php) — printing/balloon-delivery style tasks that a staff member claims and marks done", lista as tarefas do concurso e deixa o staff concluir uma.

O que não existe

Nada cria uma Task. Não há um único Task::create(), Task::firstOrCreate() ou new Task em app/:

$ grep -rn "Task::create\|Task::firstOrCreate\|new Task" app/
(nada)

Então a tela do staff está estruturalmente vazia em qualquer competição real. As factories criam Tasks para os testes, o que faz a tela parecer coberta.

De onde as tarefas viriam

No BOCA, duas fontes:

  1. Impressão — src/team/task.php é a tela onde o competidor envia um arquivo para imprimir, e o staff recebe na fila. É por isso que Task tem filename/file_path. microHelium não tem rota nenhuma de time para isso (php artisan route:list não mostra nada de print/task para competidor).
  2. Balões — src/staff/task.php e src/admin/task.php renderizam balloonurl($task[$i]["color"]), a cor vindo do problema. É por isso que Task tem color_name/color_hex, e Problem também tem os dois. Nada liga uma coisa na outra.

O CD-MOJ tem a mesma peça, server/api/v1/lib/print.sh, descrita como "fila/balões/escopo de sede" — com escopo por sede, que é relevante aqui porque Task já tem site_id.

Escopo sugerido

  • Criar a task de balão automaticamente no primeiro AC de uma equipe num problema, copiando color_name/color_hex do Problem. O gancho natural é onde Score::updateScore() já é chamado, no fim do julgamento.
  • Não criar balão para submissão de treino (Contest::competition() — ver Persistent practice/training mode outside live contests #43) nem para reenvio de problema já resolvido.
  • Fila de impressão: rota de competidor que envia arquivo, virando Task com filename/file_path. Decidir se entra nesta fase.
  • Escopo por sede: o staff de uma sede não deveria ver a fila de outra. Task.site_id já existe; o StaffController hoje filtra só por concurso.

Por que importa

Balão é a única coisa que o público de uma maratona enxerga acontecendo. Uma tela de staff que nunca recebe nada é pior do que não ter a tela: ela passa a impressão de que a função existe.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions