BugFix Stream for Article model.

This commit is contained in:
FlorianSpeicher
2025-06-03 21:37:01 +02:00
parent 71524f0bd4
commit 081cb12548
6 changed files with 33 additions and 11 deletions

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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<>();
}

View File

@@ -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

View File

@@ -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();

View File

@@ -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);
}
}