fix: teléfonos dados de baja en las respuestas y validación de los datos de contacto que edita el estudiante
Descripción:
Qué cambia
1. Solo se devuelven los teléfonos activos
- Al reemplazar un teléfono,
asignarTelefonos()deja el anterior en estadoELIMINADO(baja lógica), peroEstudianteMapper.mapTelefonos()devolvía todos los teléfonos de la colección. - Por eso la ficha del estudiante, el resumen del listado y "Mi perfil" seguían mostrando el número viejo junto al nuevo.
- Ahora el mapper filtra por estado
ACTIVO. Afecta atoDto,toResumenDtoytoMiPerfilDto. - En la base no cambia nada: el teléfono anterior se sigue conservando como
ELIMINADO.
2. Validación de formato en la autogestión del estudiante
-
MisDatosRequestDTO(PUT /estudiantes/{id}/mis-datos) solo validaba largos. Una calle con punto o un teléfono con guiones llegaba hasta elINSERT, la base lo rechazaba por sus restricciones y la API respondía un 409 genérico. - Ahora aplica los mismos patrones que
EstudianteRequestDTO:- calle, ciudad y departamento: solo letras, números y espacios;
- teléfonos: entre 8 y 12 dígitos numéricos (antes se aceptaban de 8 a 15 caracteres de cualquier tipo).
- Un valor inválido responde 400 con el campo en
detalles(ej."calle": "Solo se permiten letras, números y espacios").
Tests
-
EstudianteMapperTest: nuevo caso que verifica que se excluyen los teléfonosELIMINADO. -
MisDatosRequestDTOTest(nuevo): datos válidos, todos vacíos, calle con punto, ciudad y departamento con símbolos, teléfono con guiones, teléfono de 13 dígitos y límites de 8 y 12 dígitos.
Cómo probar
- Autenticado como estudiante, enviar
PUT /estudiantes/{id}/mis-datosreemplazando el teléfono: la respuesta debe traer solo el teléfono nuevo. -
GET /estudiantes/mi-perfil: debe mostrar solo el teléfono nuevo. - Enviar
"calle": "Av. 18 de Julio"o"telefonos": ["099-123-45"]: debe responder 400 con el campo endetallesy sin modificar los datos guardados.
Relacionado
Se mergea junto con el MR del front feature/autogestion-perfil-estudiante, que agrega la edición de contacto en "Mi perfil".