Add ReviewController

This commit is contained in:
Tim
2025-05-24 14:08:18 +02:00
parent 46244b9a13
commit 0fb2942099
6 changed files with 154 additions and 6 deletions

View File

@@ -6,8 +6,8 @@ public class ParameterConfig {
public static final String PARAM_ID = "id";
public static final String PARAM_UUID = "uuid";
public static final String PARAM_ARTICLE_ID = "articleId";
public static final String PARAM_IMAGE_ID = "imageId";
public static final String PARAM_EMAIL = "email";
public static final String PARAM_PASSWORD = "password";
public static final String PARAM_CUSTOMER_ID = "customerId";
}

View File

@@ -0,0 +1,95 @@
package de.htwsaar.webshop.controller;
import de.htwsaar.webshop.repository.entities.Review;
import de.htwsaar.webshop.service.ReviewService;
import de.htwsaar.webshop.service.ValidatorService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static de.htwsaar.webshop.config.ControllerPathConfig.*;
import static de.htwsaar.webshop.config.ParameterConfig.PARAM_ARTICLE_ID;
import static de.htwsaar.webshop.config.ParameterConfig.PARAM_ID;
import static de.htwsaar.webshop.util.LoggerUtil.logRequest;
@RestController
@Slf4j
public class ReviewController {
private final ReviewService reviewService;
private final ValidatorService validatorService;
@Autowired
public ReviewController(ReviewService reviewService, ValidatorService validatorService) {
this.reviewService = reviewService;
this.validatorService = validatorService;
}
@RequestMapping(path = REVIEW_GET_ALL, method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<List<Review>> getAll(HttpServletRequest request,
@RequestParam(value = PARAM_ARTICLE_ID) Long articleId) {
logRequest(request);
List<Review> review = reviewService.getAllByArticleId(articleId);
if(review.isEmpty()) {
return ResponseEntity.noContent().build();
}
return ResponseEntity.ok(review);
}
@RequestMapping(path = REVIEW_BASE, method = RequestMethod.GET, produces = "application/json")
public ResponseEntity<Review> get(HttpServletRequest request,
@RequestParam(value = PARAM_ID) Long reviewId) {
logRequest(request);
Review review = reviewService.getReviewById(reviewId);
if(review == null) {
return ResponseEntity.noContent().build();
}
return ResponseEntity.ok(review);
}
@RequestMapping(path = REVIEW_BASE, method = RequestMethod.POST, produces = "application/json")
public ResponseEntity<Boolean> add(HttpServletRequest request,
@RequestBody Review order) {
logRequest(request);
if (validatorService.isInvalid(order)) {
log.warn("[{}] failed Validation, sending bad request", request.getRequestURI());
return ResponseEntity.badRequest().body(false);
}
Review saved = reviewService.save(order);
return ResponseEntity.ok(saved != null);
}
@RequestMapping(path = REVIEW_BASE, method = RequestMethod.PUT, produces = "application/json")
public ResponseEntity<Boolean> update(HttpServletRequest request,
@RequestParam(value = PARAM_ID) Long reviewId,
@RequestBody Review review) {
logRequest(request);
if (reviewId == null || reviewService.getReviewById(reviewId) == null) {
return ResponseEntity.badRequest().body(false);
}
review.setId(reviewService.getReviewById(reviewId).getId());
return ResponseEntity.ok(reviewService.save(review) != null);
}
@RequestMapping(path = REVIEW_BASE, method = RequestMethod.DELETE, produces = "application/json")
public ResponseEntity<Boolean> delete(HttpServletRequest request,
@RequestParam(value = PARAM_ID) Long reviewId) {
logRequest(request);
if (reviewId == null) {
log.warn("[{}] got invalid imageId", request.getRequestURI());
return ResponseEntity.badRequest().body(false);
}
if (reviewService.getReviewById(reviewId) != null) {
log.warn("[{}] got invalid imageId", request.getRequestURI());
return ResponseEntity.badRequest().body(false);
}
reviewService.delete(reviewId);
return ResponseEntity.ok().build();
}
}

View File

@@ -6,9 +6,12 @@ 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);
}

View File

@@ -0,0 +1,12 @@
package de.htwsaar.webshop.service;
import java.util.List;
import de.htwsaar.webshop.repository.entities.Review;
public interface ReviewService {
Review save(Review review);
void delete(Long reviewId);
Review getReviewById(Long id);
List<Review> getAllByArticleId(Long articleId);
}

View File

@@ -7,16 +7,13 @@ import org.springframework.stereotype.Service;
/**
* Implementation of {@link PasswordService} responsible for creating the salt string.
* <p>
* This service generates the salt.
* </p>
* Implementation of {@link PasswordService} responsible for hashing and verifying passwords.
*/
@Service
@Slf4j
public class PasswordServiceImpl implements PasswordService {
/**
* A way to generate Password aafterBCrypt Standard <br>
* A way to generate Password after BCrypt Standard <br>
* This is computationally expensive
*
* @return a non-deterministic Salt for BCrypt.

View File

@@ -0,0 +1,41 @@
package de.htwsaar.webshop.service.impl;
import de.htwsaar.webshop.repository.ReviewRepository;
import de.htwsaar.webshop.repository.entities.Review;
import de.htwsaar.webshop.service.ReviewService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@Slf4j
public class ReviewServiceImpl implements ReviewService {
private final ReviewRepository reviewRepository;
@Autowired
public ReviewServiceImpl(ReviewRepository reviewRepository) {
this.reviewRepository = reviewRepository;
}
@Override
public Review save(Review review) {
return reviewRepository.save(review);
}
@Override
public void delete(Long reviewId) {
reviewRepository.deleteById(reviewId);
}
@Override
public Review getReviewById(Long reviewId) {
return reviewRepository.findById(reviewId).orElse(null);
}
@Override
public List<Review> getAllByArticleId(Long articleId) {
return reviewRepository.getReviewsByArticle_Id(articleId);
}
}