BoardGameMapper.java

package com.codecool.bytebattlers.mapper;

import com.codecool.bytebattlers.controller.dto.BoardGameDto;
import com.codecool.bytebattlers.model.BoardGame;
import org.mapstruct.*;

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, componentModel = MappingConstants.ComponentModel.SPRING)
public interface BoardGameMapper {
    @Mapping(source = "publisherPublisherName", target = "publisher.publisherName")
    @Mapping(source = "publisherPublicID", target = "publisher.publicID")
    BoardGame toEntity(BoardGameDto boardGameDto);

    @AfterMapping
    default void linkReviews(@MappingTarget BoardGame boardGame) {
        boardGame.getReviews().forEach(review -> review.setBoardGame(boardGame));
    }

    @AfterMapping
    default void linkRatings(@MappingTarget BoardGame boardGame) {
        boardGame.getRatings().forEach(rating -> rating.setBoardGame(boardGame));
    }

    @InheritInverseConfiguration(name = "toEntity")
    BoardGameDto toDto(BoardGame boardGame);

    @InheritConfiguration(name = "toEntity")
    @BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
    BoardGame partialUpdate(BoardGameDto boardGameDto, @MappingTarget BoardGame boardGame);
}