src/main/java/com/forum/mapper/PostMapper.java
package com.forum.mapper;
import com.forum.dto.PostRequest;
import com.forum.dto.PostResponse;
import com.forum.model.Post;
import com.forum.model.Subforum;
import com.forum.model.User;
import com.forum.repository.CommentRepository;
import com.github.marlonlom.utilities.timeago.TimeAgo;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.springframework.beans.factory.annotation.Autowired;
@Mapper(componentModel = "spring")
public abstract class PostMapper {
@Autowired
private CommentRepository commentRepository;
@Mapping(target = "createdDate", expression = "java(java.time.Instant.now())")
@Mapping(target = "description", source = "postRequest.description")
@Mapping(target = "subforum", source = "subforum")
@Mapping(target = "voteCount", constant = "0")
@Mapping(target = "user", source = "user")
public abstract Post map(PostRequest postRequest, Subforum subforum, User user);
@Mapping(target = "id", source = "postId")
@Mapping(target = "subforumName", source = "subforum.name")
@Mapping(target = "userName", source = "user.username")
@Mapping(target = "commentCount", expression = "java(commentCount(post))")
@Mapping(target = "duration", expression = "java(getDuration(post))")
public abstract PostResponse mapToDto(Post post);
Integer commentCount(Post post) {
return commentRepository.findByPost(post).size();
}
String getDuration(Post post) {
return TimeAgo.using(post.getCreatedDate().toEpochMilli());
}
}