diff --git a/src/main/java/de/mstock/monolith/domain/DataTransferObjectFactory.java b/src/main/java/de/mstock/monolith/domain/DataTransferObjectFactory.java index 914d1ae..b026020 100644 --- a/src/main/java/de/mstock/monolith/domain/DataTransferObjectFactory.java +++ b/src/main/java/de/mstock/monolith/domain/DataTransferObjectFactory.java @@ -86,6 +86,8 @@ public class DataTransferObjectFactory { ProductI18n i18n = product.getI18n().get(locale.getLanguage()); String price = numberFormat.format(i18n.getPrice()); ProductDTO productDTO = new ProductDTO(); + // Addition: productDTO.setID() + productDTO.setId(product.getId()); productDTO.setItemNumber(product.getItemNumber()); productDTO.setUnit(product.getUnit()); productDTO.setName(i18n.getName()); diff --git a/src/main/java/de/mstock/monolith/domain/ProductRepository.java b/src/main/java/de/mstock/monolith/domain/ProductRepository.java index e811855..d72fb53 100644 --- a/src/main/java/de/mstock/monolith/domain/ProductRepository.java +++ b/src/main/java/de/mstock/monolith/domain/ProductRepository.java @@ -1,5 +1,7 @@ package de.mstock.monolith.domain; +import java.util.List; + import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.Repository; @@ -9,4 +11,7 @@ public interface ProductRepository extends Repository { + "where key(i) = ?1 and lower(i.name) = ?2") Product findByI18nName(String language, String name); + @Query("select p from Product p") + List findAll(); + } diff --git a/src/main/java/de/mstock/monolith/service/ShopService.java b/src/main/java/de/mstock/monolith/service/ShopService.java index c230e45..c96f266 100644 --- a/src/main/java/de/mstock/monolith/service/ShopService.java +++ b/src/main/java/de/mstock/monolith/service/ShopService.java @@ -58,6 +58,19 @@ public class ShopService { return Collections.unmodifiableList(products); } + /** + * Gets all products in the current language. + * + * @return A simplified Data Transfer Object. + */ + public List getAllProducts(Locale locale) { + String language = locale.getLanguage(); + List products = productRepository.findAll(); + List productsDTO = + dtoFactory.createProductWithoutReviewsDTOs(products, locale); + return Collections.unmodifiableList(productsDTO); + } + /** * Gets a product in the current language. * diff --git a/src/main/java/de/mstock/monolith/web/HomepageController.java b/src/main/java/de/mstock/monolith/web/HomepageController.java index 90a0acc..4395a42 100644 --- a/src/main/java/de/mstock/monolith/web/HomepageController.java +++ b/src/main/java/de/mstock/monolith/web/HomepageController.java @@ -17,11 +17,24 @@ public class HomepageController { @Autowired private ShopService shopService; + // Addition: contant with the address of the stock microservice adminfrontend + private final String STOCKADMINFRONTENDTEMPLATE = "https://stock.pub.warehost.de/index.html"; + + /** + * Redirect to stock admin frontend + * + * @param model Template model + * @return The constant template name for the stock admin frontend. + */ + @RequestMapping(value = "/stockadmin", method = RequestMethod.GET) + public String redirect(Model model) { + return "redirect:" + this.STOCKADMINFRONTENDTEMPLATE; + } /** * Homepage - * - * @param model Template model + * + * @param model Template model * @param locale Current locale * @return The template's name. */ diff --git a/src/main/java/de/mstock/monolith/web/ProductController.java b/src/main/java/de/mstock/monolith/web/ProductController.java index 52f1ed3..5fbcacf 100644 --- a/src/main/java/de/mstock/monolith/web/ProductController.java +++ b/src/main/java/de/mstock/monolith/web/ProductController.java @@ -1,6 +1,7 @@ package de.mstock.monolith.web; import java.util.Locale; +import java.util.List; import javax.validation.Valid; @@ -11,6 +12,7 @@ import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; import de.mstock.monolith.service.ReviewService; import de.mstock.monolith.service.ShopService; @@ -66,4 +68,17 @@ public class ProductController { model.addAttribute("product", shopService.getProduct(locale, prettyUrlFragment)); return TEMPLATE; } + + @RequestMapping(value = "/products/{prettyUrlFragment:[\\w-]+}.json", method = RequestMethod.GET) + @ResponseBody + public ProductDTO productJson(@PathVariable String prettyUrlFragment, Locale locale) { + return shopService.getProduct(locale, prettyUrlFragment); + } + + @RequestMapping(value = "/products.json", method = RequestMethod.GET) + @ResponseBody + public List allProductJson(Locale locale) { + return shopService.getAllProducts(locale); + } + } diff --git a/src/main/java/de/mstock/monolith/web/ProductDTO.java b/src/main/java/de/mstock/monolith/web/ProductDTO.java index a5b76b6..a7d3245 100644 --- a/src/main/java/de/mstock/monolith/web/ProductDTO.java +++ b/src/main/java/de/mstock/monolith/web/ProductDTO.java @@ -6,6 +6,7 @@ import de.mstock.monolith.domain.ProductWeightUnit; public class ProductDTO { + private int id; private String itemNumber; private ProductWeightUnit unit; private String name; @@ -14,6 +15,15 @@ public class ProductDTO { private String description; private List reviews; + // Addition: int id, getId() and setID() + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + public String getItemNumber() { return itemNumber; } diff --git a/src/main/resources/templates/product.html b/src/main/resources/templates/product.html index 0d7bc31..9b2d0bf 100644 --- a/src/main/resources/templates/product.html +++ b/src/main/resources/templates/product.html @@ -31,6 +31,10 @@

Product Name

+ + + +

0,00 Euro

Description.