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