Interface EntityDtoMapper<T,D,C,U>

Type Parameters:
T - Tipo de entidad de dominio (ej: User, Product, Order)
D - Tipo de DTO de respuesta (ej: UserResponseDto, ProductDto)
C - Tipo de DTO de creación (ej: UserCreateDto, CreateProductRequest)
U - Tipo de DTO de actualización (ej: UserUpdateDto, UpdateProductRequest)

public interface EntityDtoMapper<T,D,C,U>
Interfaz para mapeo entre entidades y DTOs en operaciones de paginación y CRUD.

Esta interfaz define los métodos necesarios para convertir entre diferentes representaciones de datos: entidades de dominio, DTOs de respuesta, DTOs de creación y DTOs de actualización.

Ejemplo de Uso:


 @Component
 public class UserMapper implements EntityDtoMapper<User, UserResponseDto, UserCreateDto, UserUpdateDto> {

     @Override
     public UserResponseDto toResponse(User entity) {
         return UserResponseDto.builder()
             .id(entity.getId())
             .name(entity.getName())
             .email(entity.getEmail())
             .createdAt(entity.getCreatedAt())
             .build();
     }

     @Override
     public User toEntity(UserCreateDto createDto) {
         return User.builder()
             .name(createDto.getName())
             .email(createDto.getEmail())
             .build();
     }

     @Override
     public User toUpdateEntity(UserUpdateDto updateDto) {
         return User.builder()
             .name(updateDto.getName())
             .email(updateDto.getEmail())
             .build();
     }
 }
 
Since:
1.0
  • Method Summary

    Modifier and Type
    Method
    Description
    toEntity(C createDto)
    Convierte un DTO de creación a una entidad de dominio.
    toResponse(T entity)
    Convierte una entidad de dominio a un DTO de respuesta.
    toUpdateEntity(U updateDto)
    Convierte un DTO de actualización a una entidad de dominio para operaciones de actualización.
  • Method Details

    • toResponse

      D toResponse(T entity)
      Convierte una entidad de dominio a un DTO de respuesta.

      Este método se utiliza principalmente para transformar entidades recuperadas de la base de datos a DTOs que serán enviados como respuesta en las APIs REST.

      Parameters:
      entity - La entidad de dominio a convertir. No debe ser null.
      Returns:
      El DTO de respuesta correspondiente
      Throws:
      IllegalArgumentException - si la entidad es null

      Ejemplo de uso:

      
       User user = userRepository.findById("123");
       UserResponseDto responseDto = mapper.toResponse(user);
       
    • toEntity

      T toEntity(C createDto)
      Convierte un DTO de creación a una entidad de dominio.

      Este método se utiliza cuando se recibe una petición de creación desde el cliente y necesitamos convertir los datos a una entidad para persistir en la base de datos.

      Parameters:
      createDto - El DTO de creación con los datos del nuevo registro. No debe ser null.
      Returns:
      La entidad de dominio lista para ser persistida
      Throws:
      IllegalArgumentException - si el DTO es null

      Ejemplo de uso:

      
       UserCreateDto createDto = new UserCreateDto("John Doe", "john@example.com");
       User user = mapper.toEntity(createDto);
       userRepository.save(user);
       
    • toUpdateEntity

      T toUpdateEntity(U updateDto)
      Convierte un DTO de actualización a una entidad de dominio para operaciones de actualización.

      Este método se utiliza cuando se recibe una petición de actualización. Típicamente, se combina con la entidad existente para realizar actualizaciones parciales.

      Parameters:
      updateDto - El DTO de actualización con los campos a modificar. No debe ser null.
      Returns:
      La entidad de dominio con los cambios aplicados
      Throws:
      IllegalArgumentException - si el DTO es null

      Ejemplo de uso:

      
       UserUpdateDto updateDto = new UserUpdateDto("John Smith", null); // Solo actualizar nombre
       User existingUser = userRepository.findById("123");
       User updatedEntity = mapper.toUpdateEntity(updateDto);
       // Aplicar cambios solo a campos no nulos
       if (updatedEntity.getName() != null) {
           existingUser.setName(updatedEntity.getName());
       }
       userRepository.save(existingUser);