diff --git a/00-backend/src/main/java/de/htwsaar/webshop/config/ParameterConfig.java b/00-backend/src/main/java/de/htwsaar/webshop/config/ParameterConfig.java index c98a8f1..4b453f6 100644 --- a/00-backend/src/main/java/de/htwsaar/webshop/config/ParameterConfig.java +++ b/00-backend/src/main/java/de/htwsaar/webshop/config/ParameterConfig.java @@ -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"; } diff --git a/00-backend/src/main/java/de/htwsaar/webshop/controller/ReviewController.java b/00-backend/src/main/java/de/htwsaar/webshop/controller/ReviewController.java new file mode 100644 index 0000000..141d53e --- /dev/null +++ b/00-backend/src/main/java/de/htwsaar/webshop/controller/ReviewController.java @@ -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> getAll(HttpServletRequest request, + @RequestParam(value = PARAM_ARTICLE_ID) Long articleId) { + logRequest(request); + List 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 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 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 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 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(); + } +} diff --git a/00-backend/src/main/java/de/htwsaar/webshop/repository/ReviewRepository.java b/00-backend/src/main/java/de/htwsaar/webshop/repository/ReviewRepository.java index aeee9b4..0e8b644 100644 --- a/00-backend/src/main/java/de/htwsaar/webshop/repository/ReviewRepository.java +++ b/00-backend/src/main/java/de/htwsaar/webshop/repository/ReviewRepository.java @@ -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 { Stream streamReviewsByArticleId(@NotNull @Positive Long id); + + List getReviewsByArticle_Id(Long articleId); } diff --git a/00-backend/src/main/java/de/htwsaar/webshop/service/ReviewService.java b/00-backend/src/main/java/de/htwsaar/webshop/service/ReviewService.java new file mode 100644 index 0000000..2422017 --- /dev/null +++ b/00-backend/src/main/java/de/htwsaar/webshop/service/ReviewService.java @@ -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 getAllByArticleId(Long articleId); +} diff --git a/00-backend/src/main/java/de/htwsaar/webshop/service/impl/PasswordServiceImpl.java b/00-backend/src/main/java/de/htwsaar/webshop/service/impl/PasswordServiceImpl.java index 70e9de9..49af3ef 100644 --- a/00-backend/src/main/java/de/htwsaar/webshop/service/impl/PasswordServiceImpl.java +++ b/00-backend/src/main/java/de/htwsaar/webshop/service/impl/PasswordServiceImpl.java @@ -7,16 +7,13 @@ import org.springframework.stereotype.Service; /** - * Implementation of {@link PasswordService} responsible for creating the salt string. - *

- * This service generates the salt. - *

+ * Implementation of {@link PasswordService} responsible for hashing and verifying passwords. */ @Service @Slf4j public class PasswordServiceImpl implements PasswordService { /** - * A way to generate Password aafterBCrypt Standard
+ * A way to generate Password after BCrypt Standard
* This is computationally expensive * * @return a non-deterministic Salt for BCrypt. diff --git a/00-backend/src/main/java/de/htwsaar/webshop/service/impl/ReviewServiceImpl.java b/00-backend/src/main/java/de/htwsaar/webshop/service/impl/ReviewServiceImpl.java new file mode 100644 index 0000000..34f25ee --- /dev/null +++ b/00-backend/src/main/java/de/htwsaar/webshop/service/impl/ReviewServiceImpl.java @@ -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 getAllByArticleId(Long articleId) { + return reviewRepository.getReviewsByArticle_Id(articleId); + } +}