TargetingMapper.java
package io.featureprobe.api.mapper;
import io.featureprobe.api.base.model.TargetingContent;
import io.featureprobe.api.dto.TargetingPublishRequest;
import io.featureprobe.api.dto.TargetingResponse;
import io.featureprobe.api.dao.entity.Targeting;
import io.featureprobe.api.base.util.JsonMapper;
import org.apache.commons.lang3.StringUtils;
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 java.util.Objects;
@Mapper
public interface TargetingMapper extends BaseMapper {
TargetingMapper INSTANCE = Mappers.getMapper(TargetingMapper.class);
@Mapping(target = "content",
expression = "java(toTargetingContent(targeting.getContent()))")
@Mapping(target = "modifiedBy",
expression = "java(getAccount(targeting.getModifiedBy()))")
TargetingResponse entityToResponse(Targeting targeting);
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
@Mapping(target = "content",
expression = "java(toTargetingContentString(publishRequest.getContent(), targeting))")
void mapEntity(TargetingPublishRequest publishRequest, @MappingTarget Targeting targeting);
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void mapContentEntity(TargetingContent content, @MappingTarget TargetingContent currentContent);
default String toTargetingContentString(TargetingContent content, Targeting targeting) {
if (Objects.nonNull(content)) {
return JsonMapper.toJSONString(content);
}
return targeting.getContent();
}
default TargetingContent toTargetingContent(String content) {
if (StringUtils.isNotBlank(content)) {
return JsonMapper.toObject(content, TargetingContent.class);
}
return null;
}
}