ReviewService.java
package com.codecool.bytebattlers.service;
import com.codecool.bytebattlers.controller.dto.ReviewDto;
import com.codecool.bytebattlers.mapper.ReviewMapper;
import com.codecool.bytebattlers.model.AppUser;
import com.codecool.bytebattlers.model.BoardGame;
import com.codecool.bytebattlers.model.Review;
import com.codecool.bytebattlers.repository.ReviewRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Set;
import java.util.UUID;
@Service
public class ReviewService {
private final ReviewMapper reviewMapper;
private final ReviewRepository reviewRepository;
private final UserService userService;
private final BoardGameService boardGameService;
@Autowired
public ReviewService(ReviewMapper reviewMapper, ReviewRepository reviewRepository, UserService userService, BoardGameService boardGameService) {
this.reviewMapper = reviewMapper;
this.reviewRepository = reviewRepository;
this.userService = userService;
this.boardGameService = boardGameService;
}
public List<ReviewDto> findAll() {
return reviewRepository.findAll().stream().map(reviewMapper::toDto).toList();
}
public List<ReviewDto> findAllReviewsByBoardGame(UUID id){
BoardGame foundBoardgame = boardGameService.findByPublicID(id);
Set<Review> foundBoardGameReviews = foundBoardgame.getReviews();
return foundBoardGameReviews.stream().map(reviewMapper::toDto).toList();
}
public ReviewDto save(ReviewDto reviewDto) {
BoardGame foundBoardgame = boardGameService.findByPublicID(reviewDto.boardGamePublicID());
Set<Review> foundBoardGameReviews = foundBoardgame.getReviews();
AppUser foundUser = userService.findByPublicID(reviewDto.appUserPublicID());
Review review = reviewMapper.toEntity(reviewDto);
foundBoardGameReviews.add(review);
foundBoardgame.setReviews(foundBoardGameReviews);
review.setAppUser(foundUser);
review.setBoardGame(foundBoardgame);
reviewRepository.save(review);
return reviewMapper.toDto(review);
}
public void deleteById(UUID publicID) {
reviewRepository.deleteByPublicID(publicID);
}
}