package com.estate.expert.admin.domain.common.mapper; import com.estate.expert.admin.domain.common.EntityBase; import com.estate.expert.admin.domain.common.EntityRef; import org.mapstruct.TargetType; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @Component public class EntityRefMapper { @PersistenceContext private EntityManager entityManager; public T resolve(EntityRef reference, @TargetType Class entityClass) { return reference != null ? entityManager.find( entityClass, reference.getId() ) : null; } public EntityRef toReference(EntityBase entity) { return entity != null ? EntityRef.of(entity.getId(), entity.getName(), entity.getInfo()) : null; } public List toReference(List entities) { if(CollectionUtils.isEmpty(entities)) return List.of(); return entities.stream().map(this::toReference).toList(); } public Set toReference(Set entities) { if(CollectionUtils.isEmpty(entities)) return Set.of(); return entities.stream().map(this::toReference).collect(Collectors.toSet()); } }