Asignación masiva de jurados por categoría (área)#7
Merged
Conversation
…oría/área
Asigna un conjunto de jurados a TODOS los prototipos de una categoría dentro de
la edición del template, en un solo INSERT idempotente (ON CONFLICT DO NOTHING).
Es la forma práctica de cubrir el "área" de la exhibición sin asignar uno por
uno. Reusa la tabla assignments y todo el pipeline verificado de evaluación +
promedio. Valida: jurado_ids no vacío, todos rol jurado, categoría y template
existentes (422). Devuelve {created, skipped, prototipos, jurados}.
Tests: +6 en admin_assignments.rs (14 verdes). openapi.json regenerado.
Claude-Session: https://claude.ai/code/session_019ZSsKMAxiM8DENEBf36oWv
Nuevo botón "Asignar jurados por categoría" en el panel de Asignaciones que abre una hoja (BulkAssignSheet): elige edición + categoría + rúbrica + varios jurados (multi-select con buscar/seleccionar todos) y llama POST /admin/assignments/bulk. Tras asignar, invalida las cachés por prototipo y el listado, y muestra el resumen (creadas / ya existían / jurados × prototipos). Reusa los providers existentes (ediciones, categoriasCatalog, activeJurados, templatesByEdition). analyze limpio. Claude-Session: https://claude.ai/code/session_019ZSsKMAxiM8DENEBf36oWv
- API: cuenta prototipos + inserta en UNA sentencia (CTE protos/ins) → mismo snapshot, sin carrera entre contar e insertar; conteos created/skipped exactos. - API tests: +partial_overlap (created=3, skipped=1) y +unknown_template (422). 16 verdes. - Mobile: captura el ProviderContainer ANTES del await → la invalidación de cachés no lanza si el widget se desmonta en vuelo (fix-now). Guard de lista vacía en el selector de ediciones. Comentario en editionId (UI-only). cargo test admin_assignments 16/16 · flutter analyze limpio. Claude-Session: https://claude.ai/code/session_019ZSsKMAxiM8DENEBf36oWv
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Resuelve "demasiados jurados por prototipo / asignar por área": como las áreas = las 7 categorías, se añade asignación en bloque por categoría. Construido sobre
main(incluye PR #5 de Robert). No requiere migración ni entidad nueva.Qué hace
Un admin elige categoría + rúbrica + varios jurados y todos quedan asignados a todos los prototipos de esa categoría en la edición de la rúbrica. Reusa la tabla
assignmentsy el pipeline verificado de evaluación + promedio (N jurados por prototipo).Backend —
POST /admin/assignments/bulk{ categoria_id, template_id, jurado_ids[] }. Deriva la edición del template.ON CONFLICT DO NOTHING).jurado_idsno vacío, todos roljurado, categoría y template existentes →422. Sólo admin →403.{ created, skipped, prototipos, jurados }.admin_assignments.rs(16 verdes): caso normal, idempotente, solape parcial (created=3/skipped=1), no-jurado, vacío, categoría y template desconocidos, 403. OpenAPI regenerado.Mobile
ProviderContainerantes del await, robusto si el widget se desmonta) y muestra el resumen.flutter analyzelimpio · build APK verde.Calidad
Revisión adversarial multi-agente (4 lentes × verificación independiente): 20 hallazgos → 6 confirmados → todos aplicados (el único fix-now era la invalidación post-await sin guard).
maindespliega el API a prod (endpoint aditivo, no cambia comportamiento existente). La UI llega en el siguiente build de la app.https://claude.ai/code/session_019ZSsKMAxiM8DENEBf36oWv