Skip to content

Feature: incluir urlFoto en el resumen de estudiante para quien puede ver la foto

belen.varsi requested to merge pft/feature/url-foto-en-listado-estudiantes into dev

Qué y por qué

El listado (GET /estudiantes), GET /estudiantes/{id}/resumen y GET /estudiantes/mi-perfil devuelven EstudianteResumenDTO, que no traía la ruta de la foto. El frontend tenía que armarla con el id y pedir una foto por fila, recibiendo un 404 por cada estudiante sin foto (y un 403 por cada fila para roles sin permiso). Ahora el resumen incluye urlFoto, la misma ruta que ya devuelve la ficha completa: /estudiantes/{id}/foto. ## Cambios

  • EstudianteResumenDTO: nuevo campo urlFoto (+ @Setter, igual que EstudianteResponseDTO). Se actualiza el javadoc, que decía "sin foto".
  • EstudianteService: urlFoto solo se ofrece a quien puede pedir la foto. Se anula en el servicio, como ya se hace con el bloque confidencial en obtenerPorId, para no acoplar MapStruct a SecurityContextHolder.
  • EstudianteMapper: se extrae mapUrlFoto para no duplicar la expresión entre toDto y toResumenDto. El comportamiento de la fcompleta no cambia. ## Quién ve urlFoto | Endpoint | Quién | urlFoto | |---|---|---| | GET /estudiantes, GET /estudiantes/{id}/resumen | con VER_ESTUDIANTE | ruta si el estudiante tiene foto, null si no | | GET /estudiantes, GET /estudiantes/{id}/resumen | solo VER_ESTUDIANTE_RESUMIDO (TUTOR, DOCENTE) | siempre null (el endpoin foto les daría 403) | | GET /estudiantes/mi-perfil | el propio estudiante | ruta si tiene foto (puede ver la suya, ver obtenerFoto) |

No cambia ningún permiso ni el endpoint GET /estudiantes/{id}/foto.

Compatibilidad

Campo nuevo en la respuesta, sin cambios en los existentes: no rompe a los consumidores actuales.

Tests

  • Servicio: visibilidad de urlFoto según permiso en listar y obtenerResumenPorId, y verMiPerfil para el propio estudiante. Se ajustó obtenerResumenPorId_Exito, que ahora necesita autenticación porque el servicio consulta permisos.
  • Nuevo EstudianteMapperTest: con foto, sin foto y ficha completa.
  • Suite completa: 753 tests, 0 fallas (1 omitido que ya estaba).

Notas

  • EstudianteMapper.toResumenDtoList mapea urlFoto sin filtrar por permiso. Hoy no se usa en ningún lado; si en el futuro se usara, tendría que pasar por el filtro del servicio.
  • El MR del frontend (feature/asignacion-grupo-itr-carrera) consume este campo. Conviene mergear este primero; el frontend no se rompe si va antes, pero no muestra fotos hasta que esto esté en dev.

Merge request reports

Loading