Mapping Refactor

This commit is contained in:
Tim
2026-03-11 14:30:51 +01:00
parent fd9f805c44
commit 06720d400f
4 changed files with 91 additions and 56 deletions

View File

@@ -25,8 +25,8 @@ public class ControllerPathConfig {
//ArticleController //ArticleController
public static final String ARTICLE_BASE = "/article"; public static final String ARTICLE_BASE = "/article";
public static final String ARTICLE_GET_ALL = ARTICLE_BASE + "/all"; public static final String ARTICLE_GET_ALL = "/all";
public static final String ARTICLE_GET_ALL_WITH_IMAGE = ARTICLE_BASE + "/all/image"; public static final String ARTICLE_GET_ALL_WITH_IMAGE = "/all/image";
//CustomerController //CustomerController
public static final String CUSTOMER_BASE = "/customer"; public static final String CUSTOMER_BASE = "/customer";
@@ -43,12 +43,12 @@ public class ControllerPathConfig {
//OrderController //OrderController
public static final String ORDER_BASE = "/order"; public static final String ORDER_BASE = "/order";
public static final String ORDER_GET_ALL = ORDER_BASE + "/all"; public static final String ORDER_GET_ALL = "/all";
public static final String ORDER_GET_ALL_ADMIN = ORDER_BASE + "/all/all"; public static final String ORDER_GET_ALL_ADMIN = "/all/all";
//ReviewController //ReviewController
public static final String REVIEW_BASE = "/review"; public static final String REVIEW_BASE = "/review";
public static final String REVIEW_GET_ALL = REVIEW_BASE + "/all"; public static final String REVIEW_GET_ALL = "/all";
//StatisticsController //StatisticsController
private static final String STATISTICS_BASE = "/statistics"; private static final String STATISTICS_BASE = "/statistics";

View File

@@ -19,6 +19,7 @@ import static de.htwsaar.webshop.util.LoggerUtil.logRequest;
@RestController @RestController
@Slf4j @Slf4j
@RequestMapping(path = ARTICLE_BASE, produces = "application/json")
public class ArticleController { public class ArticleController {
private final ArticleService articleService; private final ArticleService articleService;
@@ -27,26 +28,26 @@ public class ArticleController {
this.articleService = articleService; this.articleService = articleService;
} }
@RequestMapping(path = ARTICLE_GET_ALL, method = RequestMethod.GET, produces = "application/json") @GetMapping(path = ARTICLE_GET_ALL)
public ResponseEntity<List<ArticleModel>> getAll(HttpServletRequest request) { public ResponseEntity<List<ArticleModel>> getAll(HttpServletRequest request) {
logRequest(request); logRequest(request);
return ResponseEntity.ok(articleService.from(articleService.findAll())); return ResponseEntity.ok(articleService.from(articleService.findAll()));
} }
@RequestMapping(path = ARTICLE_GET_ALL_WITH_IMAGE, method = RequestMethod.GET, produces = "application/json") @GetMapping(path = ARTICLE_GET_ALL_WITH_IMAGE)
public ResponseEntity<List<ArticleWithImageModel>> getAllWithImageData(HttpServletRequest request) { public ResponseEntity<List<ArticleWithImageModel>> getAllWithImageData(HttpServletRequest request) {
logRequest(request); logRequest(request);
return ResponseEntity.ok(articleService.fromWithImage(articleService.findAll())); return ResponseEntity.ok(articleService.fromWithImage(articleService.findAll()));
} }
@RequestMapping(path = ARTICLE_BASE, method = RequestMethod.GET, produces = "application/json") @GetMapping
public ResponseEntity<ArticleModel> getByUUID(HttpServletRequest request, public ResponseEntity<ArticleModel> getByUUID(HttpServletRequest request,
@RequestParam(value = PARAM_UUID) UUID uuid) { @RequestParam(value = PARAM_UUID) UUID uuid) {
logRequest(request); logRequest(request);
return ResponseEntity.ok(articleService.from(articleService.findByUUID(uuid))); return ResponseEntity.ok(articleService.from(articleService.findByUUID(uuid)));
} }
@RequestMapping(path = ARTICLE_BASE, method = RequestMethod.POST, produces = "application/json") @PostMapping
public ResponseEntity<Boolean> add(HttpServletRequest request, public ResponseEntity<Boolean> add(HttpServletRequest request,
@RequestBody Article article) { @RequestBody Article article) {
logRequest(request); logRequest(request);
@@ -60,7 +61,7 @@ public class ArticleController {
return ResponseEntity.ok(a != null); return ResponseEntity.ok(a != null);
} }
@RequestMapping(path = ARTICLE_BASE, method = RequestMethod.PUT, produces = "application/json") @PutMapping
public ResponseEntity<Boolean> update(HttpServletRequest request, public ResponseEntity<Boolean> update(HttpServletRequest request,
@RequestParam(value = PARAM_UUID) UUID uuid, @RequestParam(value = PARAM_UUID) UUID uuid,
@RequestBody Article article) { @RequestBody Article article) {
@@ -80,7 +81,7 @@ public class ArticleController {
return ResponseEntity.ok(true); return ResponseEntity.ok(true);
} }
@RequestMapping(path = ARTICLE_BASE, method = RequestMethod.DELETE, produces = "application/json") @DeleteMapping
public ResponseEntity<Boolean> delete(HttpServletRequest request, public ResponseEntity<Boolean> delete(HttpServletRequest request,
@RequestParam(value = PARAM_UUID) UUID uuid) { @RequestParam(value = PARAM_UUID) UUID uuid) {
logRequest(request); logRequest(request);

View File

@@ -22,6 +22,7 @@ import static de.htwsaar.webshop.util.LoggerUtil.logRequest;
@RestController @RestController
@Slf4j @Slf4j
@RequestMapping(path = ORDER_BASE, produces = "application/json")
public class OrderController { public class OrderController {
private final OrderService orderService; private final OrderService orderService;
@@ -35,7 +36,7 @@ public class OrderController {
this.sessionService = sessionService; this.sessionService = sessionService;
} }
@RequestMapping(path = ORDER_GET_ALL, method = RequestMethod.GET, produces = "application/json") @GetMapping(path = ORDER_GET_ALL)
public ResponseEntity<List<OrderModel>> getAll(HttpServletRequest request, public ResponseEntity<List<OrderModel>> getAll(HttpServletRequest request,
@RequestParam(value = PARAM_CUSTOMER_ID) Long customerId) { @RequestParam(value = PARAM_CUSTOMER_ID) Long customerId) {
logRequest(request); logRequest(request);
@@ -46,7 +47,7 @@ public class OrderController {
return ResponseEntity.ok(orders.stream().map(Order::toModel).toList()); return ResponseEntity.ok(orders.stream().map(Order::toModel).toList());
} }
@RequestMapping(path = ORDER_GET_ALL_ADMIN, method = RequestMethod.GET, produces = "application/json") @GetMapping(path = ORDER_GET_ALL_ADMIN)
public ResponseEntity<List<OrderModel>> getAll(HttpServletRequest request, public ResponseEntity<List<OrderModel>> getAll(HttpServletRequest request,
@RequestParam(value = PARAM_EMAIL) String email, @RequestParam(value = PARAM_EMAIL) String email,
@RequestParam(value = PARAM_SESSION) UUID token) { @RequestParam(value = PARAM_SESSION) UUID token) {
@@ -59,7 +60,7 @@ public class OrderController {
return ResponseEntity.ok(orderService.findAll().stream().map(Order::toModel).toList()); return ResponseEntity.ok(orderService.findAll().stream().map(Order::toModel).toList());
} }
@RequestMapping(path = ORDER_BASE, method = RequestMethod.GET, produces = "application/json") @GetMapping
public ResponseEntity<OrderModel> get(HttpServletRequest request, public ResponseEntity<OrderModel> get(HttpServletRequest request,
@RequestParam(value = PARAM_ID) Long orderId) { @RequestParam(value = PARAM_ID) Long orderId) {
logRequest(request); logRequest(request);
@@ -70,7 +71,7 @@ public class OrderController {
return ResponseEntity.ok(order.toModel()); return ResponseEntity.ok(order.toModel());
} }
@RequestMapping(path = ORDER_BASE, method = RequestMethod.POST, produces = "application/json") @PostMapping
public ResponseEntity<Boolean> add(HttpServletRequest request, public ResponseEntity<Boolean> add(HttpServletRequest request,
@RequestBody OrderModel order) { @RequestBody OrderModel order) {
logRequest(request); logRequest(request);
@@ -85,8 +86,8 @@ public class OrderController {
return ResponseEntity.ok(saved != null); return ResponseEntity.ok(saved != null);
} }
@RequestMapping(path = ORDER_BASE, method = RequestMethod.PATCH, produces = "application/json") @PatchMapping
public ResponseEntity<Boolean> update(HttpServletRequest request, public ResponseEntity<Boolean> patch(HttpServletRequest request,
@RequestParam(value = PARAM_ID) Long orderId, @RequestParam(value = PARAM_ID) Long orderId,
@RequestParam(value = PARAM_STATUS) OrderStatus status) { @RequestParam(value = PARAM_STATUS) OrderStatus status) {
logRequest(request); logRequest(request);
@@ -107,7 +108,7 @@ public class OrderController {
return ResponseEntity.ok(orderService.saveNew(order) != null); return ResponseEntity.ok(orderService.saveNew(order) != null);
} }
@RequestMapping(path = ORDER_BASE, method = RequestMethod.DELETE, produces = "application/json") @DeleteMapping
public ResponseEntity<Boolean> delete(HttpServletRequest request, public ResponseEntity<Boolean> delete(HttpServletRequest request,
@RequestParam(value = PARAM_ID) Long orderId) { @RequestParam(value = PARAM_ID) Long orderId) {
logRequest(request); logRequest(request);

View File

@@ -1,3 +1,4 @@
package de.htwsaar.webshop.controller; package de.htwsaar.webshop.controller;
import de.htwsaar.webshop.model.ReviewModel; import de.htwsaar.webshop.model.ReviewModel;
@@ -5,8 +6,13 @@ import de.htwsaar.webshop.repository.entities.Review;
import de.htwsaar.webshop.service.ArticleService; import de.htwsaar.webshop.service.ArticleService;
import de.htwsaar.webshop.service.ReviewService; import de.htwsaar.webshop.service.ReviewService;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
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.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -19,6 +25,7 @@ import static de.htwsaar.webshop.config.ParameterConfig.*;
import static de.htwsaar.webshop.util.LoggerUtil.logRequest; import static de.htwsaar.webshop.util.LoggerUtil.logRequest;
@RestController @RestController
@RequestMapping(value = REVIEW_BASE, produces = "application/json")
@Slf4j @Slf4j
public class ReviewController { public class ReviewController {
@@ -31,69 +38,95 @@ public class ReviewController {
this.articleService = articleService; this.articleService = articleService;
} }
@RequestMapping(path = REVIEW_GET_ALL, method = RequestMethod.GET, produces = "application/json") @GetMapping(path = REVIEW_GET_ALL)
public ResponseEntity<List<ReviewModel>> getAll(HttpServletRequest request, public ResponseEntity<List<ReviewModel>> getAll(HttpServletRequest request,
@RequestParam(value = PARAM_UUID) UUID uuid) { @RequestParam(value = PARAM_UUID) UUID uuid) {
logRequest(request); logRequest(request);
List<ReviewModel> review = reviewService.getAllByUUID(uuid).stream().map(reviewService::toModel).toList(); List<ReviewModel> reviews = reviewService.getAllByUUID(uuid)
if (review.isEmpty()) { .stream()
.map(reviewService::toModel)
.toList();
if (reviews.isEmpty()) {
return ResponseEntity.noContent().build(); return ResponseEntity.noContent().build();
} }
return ResponseEntity.ok(review); return ResponseEntity.ok(reviews);
} }
@RequestMapping(path = REVIEW_BASE, method = RequestMethod.GET, produces = "application/json") @GetMapping
public ResponseEntity<Review> get(HttpServletRequest request, public ResponseEntity<ReviewModel> get(HttpServletRequest request,
@RequestParam(value = PARAM_ID) Long reviewId) { @RequestParam(value = PARAM_ID) Long reviewId) {
logRequest(request); logRequest(request);
Review review = reviewService.getReviewById(reviewId); Review review = reviewService.getReviewById(reviewId);
if (review == null) { if (review == null) {
log.debug("Review with id {} not found", reviewId);
return ResponseEntity.noContent().build(); return ResponseEntity.noContent().build();
} }
return ResponseEntity.ok(review);
return ResponseEntity.ok(reviewService.toModel(review));
} }
@RequestMapping(path = REVIEW_BASE, method = RequestMethod.POST, produces = "application/json") @PostMapping
public ResponseEntity<Boolean> add(HttpServletRequest request, public ResponseEntity<ReviewModel> add(HttpServletRequest request,
@RequestParam(value = PARAM_UUID) UUID uuid, @RequestParam(value = PARAM_UUID) UUID articleUuid,
@RequestParam(value = PARAM_RATING) int rating, @RequestParam(value = PARAM_RATING)
@RequestBody String review) { @Min(value = 0, message = "Rating must be at least 0")
@Max(value = 10, message = "Rating must be at most 10")
int rating,
@RequestBody @NotBlank(message = "Review text cannot be empty") String reviewText) {
logRequest(request); logRequest(request);
if (uuid == null || articleService.findByUUID(uuid) == null if (articleService.findByUUID(articleUuid) == null) {
|| rating < 0 || rating > 10) { log.warn("Article with UUID {} not found for review creation", articleUuid);
log.warn("[{}] failed Validation, sending bad request", request.getRequestURI()); return ResponseEntity.badRequest().build();
return ResponseEntity.badRequest().body(false);
} }
Review saved = reviewService.save(uuid, rating, review); Review savedReview = reviewService.save(articleUuid, rating, reviewText);
return ResponseEntity.ok(saved != null);
if (savedReview == null) {
log.error("Failed to save review for article UUID {}", articleUuid);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
} }
@RequestMapping(path = REVIEW_BASE, method = RequestMethod.PUT, produces = "application/json") return ResponseEntity.status(HttpStatus.CREATED).body(reviewService.toModel(savedReview));
public ResponseEntity<Boolean> update(HttpServletRequest request, }
@PutMapping
public ResponseEntity<ReviewModel> update(HttpServletRequest request,
@RequestParam(value = PARAM_ID) Long reviewId, @RequestParam(value = PARAM_ID) Long reviewId,
@RequestBody Review review) { @RequestBody @Valid Review review) {
logRequest(request); logRequest(request);
if (reviewId == null || reviewService.getReviewById(reviewId) == null) {
return ResponseEntity.badRequest().body(false); Review existingReview = reviewService.getReviewById(reviewId);
} if (existingReview == null) {
review.setId(reviewService.getReviewById(reviewId).getId()); log.warn("Review with id {} not found for update", reviewId);
return ResponseEntity.ok(reviewService.save(review) != null); return ResponseEntity.notFound().build();
} }
@RequestMapping(path = REVIEW_BASE, method = RequestMethod.DELETE, produces = "application/json") // Ensure the ID matches
public ResponseEntity<Boolean> delete(HttpServletRequest request, review.setId(reviewId);
Review updatedReview = reviewService.save(review);
if (updatedReview == null) {
log.error("Failed to update review with id {}", reviewId);
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
return ResponseEntity.ok(reviewService.toModel(updatedReview));
}
@DeleteMapping
public ResponseEntity<Void> delete(HttpServletRequest request,
@RequestParam(value = PARAM_ID) Long reviewId) { @RequestParam(value = PARAM_ID) Long reviewId) {
logRequest(request); logRequest(request);
if (reviewId == null) {
log.warn("[{}] got invalid imageId", request.getRequestURI()); Review existingReview = reviewService.getReviewById(reviewId);
return ResponseEntity.badRequest().body(false); if (existingReview == null) {
} log.warn("Review with id {} not found for deletion", reviewId);
if (reviewService.getReviewById(reviewId) != null) { return ResponseEntity.notFound().build();
log.warn("[{}] got invalid imageId", request.getRequestURI());
return ResponseEntity.badRequest().body(false);
} }
reviewService.delete(reviewId); reviewService.delete(reviewId);
return ResponseEntity.ok().build(); return ResponseEntity.ok().build();
} }