ProjectMapper.java
package io.featureprobe.api.mapper;
import io.featureprobe.api.dto.EnvironmentResponse;
import io.featureprobe.api.dto.ProjectCreateRequest;
import io.featureprobe.api.dto.ProjectResponse;
import io.featureprobe.api.dto.ProjectUpdateRequest;
import io.featureprobe.api.dao.entity.Environment;
import io.featureprobe.api.dao.entity.Project;
import org.mapstruct.BeanMapping;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.mapstruct.NullValuePropertyMappingStrategy;
import org.mapstruct.factory.Mappers;
import org.springframework.util.CollectionUtils;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@Mapper
public interface ProjectMapper {
ProjectMapper INSTANCE = Mappers.getMapper(ProjectMapper.class);
@Mapping(target = "environments", expression = "java(toEnvironmentResponses(project.getEnvironments()))")
ProjectResponse entityToResponse(Project project);
Project requestToEntity(ProjectCreateRequest createRequest);
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void mapEntity(ProjectUpdateRequest updateRequest, @MappingTarget Project project);
default List<EnvironmentResponse> toEnvironmentResponses(List<Environment> environments) {
if (!CollectionUtils.isEmpty(environments)) {
return environments.stream().map(environment ->
EnvironmentMapper.INSTANCE.entityToResponse(environment)).collect(Collectors.toList());
}
return Collections.emptyList();
}
}