PetMapper.java
package org.petify.shelter.mapper;
import org.petify.shelter.dto.PetRequest;
import org.petify.shelter.dto.PetResponse;
import org.petify.shelter.dto.PetResponseWithImages;
import org.petify.shelter.model.Pet;
import org.petify.shelter.model.Shelter;
import org.petify.shelter.util.ImageUrlConverter;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingConstants;
import org.mapstruct.ReportingPolicy;
@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE,
componentModel = MappingConstants.ComponentModel.SPRING,
uses = PetImageMapper.class,
imports = ImageUrlConverter.class)
public interface PetMapper {
@Mapping(source = "shelter.id", target = "shelterId")
@Mapping(target = "imageUrl", expression = "java(ImageUrlConverter.toFullImageUrl(pet.getImageName()))")
PetResponse toDto(Pet pet);
@Mapping(source = "shelter.id", target = "shelterId")
@Mapping(target = "images", source = "images")
@Mapping(target = "imageUrl", expression = "java(ImageUrlConverter.toFullImageUrl(pet.getImageName()))")
PetResponseWithImages toDtoWithImages(Pet pet);
@Mapping(source = "pet.shelter.id", target = "shelterId")
@Mapping(target = "images", source = "pet.images")
@Mapping(target = "imageUrl", expression = "java(ImageUrlConverter.toFullImageUrl(pet.getImageName()))")
@Mapping(source = "distance", target = "distance")
PetResponseWithImages toDtoWithImagesAndDistance(Pet pet, Double distance);
@Mapping(target = "id", ignore = true)
@Mapping(target = "adoptions", ignore = true)
@Mapping(target = "images", ignore = true)
@Mapping(target = "favoritePets", ignore = true)
@Mapping(target = "archived", ignore = true)
Pet toEntity(PetRequest request);
default Pet toEntityWithShelter(PetRequest request, Shelter shelter) {
Pet pet = toEntity(request);
pet.setShelter(shelter);
return pet;
}
}