Skip to content

feat: ampliacion de entidades, tests unitarios y servicio de email#164

Merged
Azfe merged 13 commits into
mainfrom
develop
May 5, 2026
Merged

feat: ampliacion de entidades, tests unitarios y servicio de email#164
Azfe merged 13 commits into
mainfrom
develop

Conversation

@Azfe
Copy link
Copy Markdown
Owner

@Azfe Azfe commented May 5, 2026

Resumen

Esta PR consolida varias épicas de desarrollo que extienden el modelo de dominio, amplían la cobertura de tests unitarios hasta cubrir prácticamente todas las capas de la arquitectura, e introducen la notificación por email al recibir mensajes de
contacto. Incluye además el Dockerfile de producción y la migración del servicio de email de SendGrid/SMTP a Resend.

Cambios incluidos

Dominio y entidades

  • WorkExperience: nuevos campos location, is_current y duration_months
  • WorkExperience, Education, AdditionalTraining: campo opcional technologies
  • Skill: eliminado el campo category en todas las capas
  • Tool: campo category pasa a ser opcional; se omiten herramientas sin categoría en el endpoint agrupado

Aplicación y casos de uso

  • GetCompleteCVUseCase: agrega correctamente todas las entidades al CV completo usando default_profile como profile_id
  • ListSkillsUseCase: refactorización del listado
  • CreateContactMessageUseCase: integración con el nuevo servicio de email
  • DTOs actualizados en WorkExperienceDTO, EducationDTO, AdditionalTrainingDTO, ToolDTO y CVDTO

Infraestructura

  • Nuevo IEmailService en shared/interfaces/email_service.py
  • Implementaciones ResendEmailService y NullEmailService
  • Migración completa de SendGrid/aiosmtplib a Resend
  • Mappers actualizados: ExperienceMapper, EducationMapper, AdditionalTrainingMapper, ToolMapper, SkillMapper
  • requirements.txt convertido de UTF-16 a UTF-8

API

  • Schemas de Pydantic actualizados para WorkExperience, Education, AdditionalTraining, Skill y Tool
  • Routers de WorkExperience, Education y Tool propagan los nuevos campos en POST y PUT
  • Certification: acepta cadena vacía como nulo en expiry_date

Infraestructura de despliegue

  • Dockerfile de producción (python:3.13-slim, sin --reload)
  • Configuración de variables de entorno para Railway en settings.py

Tests (incremento masivo de cobertura)

  • DTOs: tests unitarios para AdditionalTrainingDTO, CertificationDTO, ContactInformationDTO, ContactMessageDTO, ProjectDTO, SocialNetworkDTO, ToolDTO
  • Casos de uso: tests unitarios para AdditionalTraining, Certification, ContactInformation, ContactMessage, Education, Profile, ProgrammingLanguage, Project, SocialNetwork, Tool, WorkExperience
  • Entidades: tests para WorkExperience, Education, AdditionalTraining, Skill, Tool
  • Value Objects: tests de comparación para SkillLevel
  • Repositorios: tests unitarios para SocialNetworkRepository y ToolRepository
  • Servicios: tests para ResendEmailService y NullEmailService
  • Excepciones compartidas: suite completa para la jerarquía ApplicationException
  • Routers: tests de unidad para EducationRouter y WorkExperienceRouter
  • Fixtures de integración y E2E actualizados para reflejar los cambios de esquema

Plan de pruebas

  • Ejecutar la suite de tests unitarios: make test-unit — todos deben pasar
  • Ejecutar los tests de integración: make test-integration — validar repositorios contra MongoDB real
  • Ejecutar los tests E2E: make test-e2e — validar el flujo completo del CV
  • Verificar el endpoint GET /api/v1/cv devuelve todas las secciones correctamente
  • Verificar que POST /api/v1/contact-messages envía la notificación de email vía Resend
  • Verificar que GET /api/v1/skills no devuelve el campo category
  • Verificar que GET /api/v1/tools agrupa correctamente omitiendo herramientas sin categoría
  • Verificar que GET /api/v1/work-experience incluye location, is_current y duration_months
  • Construir la imagen de producción: docker build -t portfolio-backend . — debe completarse sin errores
  • Revisar la cobertura de código: make test-cov — sin regresiones respecto a main

@codecov
Copy link
Copy Markdown

codecov Bot commented May 5, 2026

Codecov Report

❌ Patch coverage is 95.77465% with 3 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
app/domain/entities/additional_training.py 93.75% 1 Missing ⚠️
app/domain/entities/education.py 93.75% 1 Missing ⚠️
app/domain/entities/work_experience.py 93.75% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@Azfe Azfe merged commit 2396631 into main May 5, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant