package de.asideas.crowdsource.service;
import de.asideas.crowdsource.domain.model.CommentEntity;
import de.asideas.crowdsource.domain.model.ProjectEntity;
import de.asideas.crowdsource.domain.model.UserEntity;
import de.asideas.crowdsource.presentation.Comment;
import de.asideas.crowdsource.domain.service.user.UserNotificationService;
import de.asideas.crowdsource.repository.CommentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class CommentService {
private CommentRepository commentRepository;
private ProjectService projectService;
private UserService userService;
private UserNotificationService userNotificationService;
@Autowired
public CommentService(CommentRepository commentRepository, ProjectService projectService, UserService userService, UserNotificationService userNotificationService) {
this.commentRepository = commentRepository;
this.projectService = projectService;
this.userService = userService;
this.userNotificationService = userNotificationService;
}
public void addComment(Comment comment, String projectId, String commentingUserEmail) {
final ProjectEntity project = projectService.loadProjectEntity(projectId);
final UserEntity commentingUser = userService.getUserByEmail(commentingUserEmail);
CommentEntity commentEntity = new CommentEntity(project, commentingUser, comment.getComment());
commentRepository.save(commentEntity);
userNotificationService.notifyCreatorOnComment(commentEntity);
}
public List<Comment> loadCommentsByProject(String projectId) {
final ProjectEntity project = projectService.loadProjectEntity(projectId);
return commentRepository.findByProject(project).stream().map(Comment::new).collect(Collectors.toList());
}
}