BugFix Stream for Article model.
This commit is contained in:
@@ -3,6 +3,7 @@ package de.htwsaar.webshop.repository;
|
||||
import de.htwsaar.webshop.repository.entities.Article;
|
||||
import lombok.NonNull;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
package de.htwsaar.webshop.repository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import de.htwsaar.webshop.repository.entities.Review;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Positive;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@Repository
|
||||
public interface ReviewRepository extends JpaRepository<Review, Long> {
|
||||
Stream<Review> streamReviewsByArticleId(@NotNull @Positive Long id);
|
||||
|
||||
List<Review> getReviewsByArticle_Id(Long articleId);
|
||||
List<Review> getReviewsByArticleId(Long articleId);
|
||||
}
|
||||
|
||||
@@ -7,7 +7,10 @@ import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
@Getter
|
||||
@@ -16,6 +19,7 @@ import java.util.UUID;
|
||||
@NoArgsConstructor
|
||||
@Entity
|
||||
@Table(name = "Articles")
|
||||
@ToString
|
||||
public class Article {
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@@ -46,4 +50,7 @@ public class Article {
|
||||
|
||||
@Column(name = "category", nullable = false)
|
||||
private String category;
|
||||
|
||||
@OneToMany(mappedBy = "article", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
|
||||
private List<Review> reviews = new ArrayList<>();
|
||||
}
|
||||
|
||||
@@ -23,8 +23,8 @@ public class Review {
|
||||
@Column(name = "content", nullable = false)
|
||||
private String content;
|
||||
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "articleId", referencedColumnName = "id", nullable = false)
|
||||
@ManyToOne(fetch = FetchType.EAGER)
|
||||
@JoinColumn(name = "article_id", nullable = false)
|
||||
private Article article;
|
||||
|
||||
@PositiveOrZero
|
||||
|
||||
@@ -6,6 +6,7 @@ import de.htwsaar.webshop.repository.ReviewRepository;
|
||||
import de.htwsaar.webshop.repository.entities.Article;
|
||||
import de.htwsaar.webshop.repository.entities.Review;
|
||||
import de.htwsaar.webshop.service.ArticleService;
|
||||
import jakarta.transaction.Transactional;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -56,7 +57,10 @@ public class ArticleServiceImpl implements ArticleService {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public Article save(Article article) {
|
||||
article.setId(null);
|
||||
article.setUuid(UUID.randomUUID());
|
||||
return articleRepository.save(article);
|
||||
}
|
||||
|
||||
@@ -64,10 +68,12 @@ public class ArticleServiceImpl implements ArticleService {
|
||||
public double getRating(Long id) {
|
||||
return reviewRepository.streamReviewsByArticleId(id)
|
||||
.mapToInt(Review::getRating)
|
||||
.average().orElse(-1);
|
||||
.average()
|
||||
.orElse(-1);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public double getRating(UUID uuid) {
|
||||
return reviewRepository.streamReviewsByArticleId(
|
||||
articleRepository.findArticleByUuid(uuid).orElseThrow().getId()
|
||||
@@ -85,10 +91,17 @@ public class ArticleServiceImpl implements ArticleService {
|
||||
article.getDiscount100(),
|
||||
article.getStock(),
|
||||
article.getCategory(),
|
||||
getRating(article.getId())
|
||||
calculateAverageRating(article.getReviews())
|
||||
);
|
||||
}
|
||||
|
||||
private double calculateAverageRating(List<Review> reviews) {
|
||||
return reviews.stream()
|
||||
.mapToInt(Review::getRating)
|
||||
.average()
|
||||
.orElse(-1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ArticleModel> from(List<Article> articles) {
|
||||
return articles.stream().map(this::from).toList();
|
||||
|
||||
@@ -36,6 +36,6 @@ public class ReviewServiceImpl implements ReviewService {
|
||||
|
||||
@Override
|
||||
public List<Review> getAllByArticleId(Long articleId) {
|
||||
return reviewRepository.getReviewsByArticle_Id(articleId);
|
||||
return reviewRepository.getReviewsByArticleId(articleId);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user