From 2e0819561f6d7548188b79cf76f4db922a8b1249 Mon Sep 17 00:00:00 2001 From: lionarius Date: Tue, 17 Sep 2024 19:14:27 +0300 Subject: [PATCH] . --- .../isdojplab/controller/HomeController.java | 12 ++++ .../controller/ProductFormController.java | 29 -------- .../controller/RegisterFormController.java | 32 +++++++++ .../ru/lionarius/isdojplab/model/Product.java | 12 ++-- .../ru/lionarius/isdojplab/model/User.java | 18 +++++ src/main/resources/static/css/styles.css | 71 +++++++++++++++++++ src/main/resources/templates/home.html | 39 +++++++++- .../resources/templates/product_form.html | 28 -------- .../resources/templates/register_form.html | 49 +++++++++++++ .../isdojplab/HomeControllerTest.java | 16 ++--- 10 files changed, 231 insertions(+), 75 deletions(-) delete mode 100644 src/main/java/ru/lionarius/isdojplab/controller/ProductFormController.java create mode 100644 src/main/java/ru/lionarius/isdojplab/controller/RegisterFormController.java create mode 100644 src/main/java/ru/lionarius/isdojplab/model/User.java create mode 100644 src/main/resources/static/css/styles.css delete mode 100644 src/main/resources/templates/product_form.html create mode 100644 src/main/resources/templates/register_form.html diff --git a/src/main/java/ru/lionarius/isdojplab/controller/HomeController.java b/src/main/java/ru/lionarius/isdojplab/controller/HomeController.java index 52dcaae..425d656 100644 --- a/src/main/java/ru/lionarius/isdojplab/controller/HomeController.java +++ b/src/main/java/ru/lionarius/isdojplab/controller/HomeController.java @@ -3,6 +3,10 @@ package ru.lionarius.isdojplab.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; +import ru.lionarius.isdojplab.model.Product; + +import java.util.ArrayList; +import java.util.List; @Controller public class HomeController { @@ -10,6 +14,14 @@ public class HomeController { @GetMapping("/") public String home(Model model) { model.addAttribute("message", "Добро пожаловать в магазин электротоваров!"); + + List products = new ArrayList<>(); + products.add(new Product("Электрический чайник", 900.0, "Высококачественный чайник с быстрой функцией закипания", "https://example.com/electro1.jpg")); + products.add(new Product("Утюг с парогенератором", 1000.0, "Мощный утюг с автоматической подачей пара", "https://example.com/electro2.jpg")); + products.add(new Product("Мультиварка", 400.0, "Универсальная мультиварка с множеством режимов приготовления", "https://example.com/electro3.jpg")); + + model.addAttribute("products", products); + return "home"; } } diff --git a/src/main/java/ru/lionarius/isdojplab/controller/ProductFormController.java b/src/main/java/ru/lionarius/isdojplab/controller/ProductFormController.java deleted file mode 100644 index f853e7a..0000000 --- a/src/main/java/ru/lionarius/isdojplab/controller/ProductFormController.java +++ /dev/null @@ -1,29 +0,0 @@ -package ru.lionarius.isdojplab.controller; - -import jakarta.validation.Valid; -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PostMapping; -import ru.lionarius.isdojplab.model.Product; - -@Controller -public class ProductFormController { - - @GetMapping("/product_form") - public String showForm(Model model) { - model.addAttribute("product", new Product()); - return "product_form"; - } - - @PostMapping("/product_form") - public String submitForm(@Valid @ModelAttribute("product") Product product, BindingResult bindingResult, Model model) { - if (bindingResult.hasErrors()) { - return "product_form"; - } - model.addAttribute("message", "Товар успешно добавлен: " + product.getName()); - return "redirect:/"; - } -} diff --git a/src/main/java/ru/lionarius/isdojplab/controller/RegisterFormController.java b/src/main/java/ru/lionarius/isdojplab/controller/RegisterFormController.java new file mode 100644 index 0000000..46ce511 --- /dev/null +++ b/src/main/java/ru/lionarius/isdojplab/controller/RegisterFormController.java @@ -0,0 +1,32 @@ +package ru.lionarius.isdojplab.controller; + +import jakarta.validation.Valid; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import ru.lionarius.isdojplab.model.User; + +@Controller +public class RegisterFormController { + + @GetMapping("/register") + public String showForm(Model model) { + model.addAttribute("user", new User()); + + return "register_form"; + } + + @PostMapping("/register") + public String submitForm(@Valid @ModelAttribute("user") User user, BindingResult bindingResult, Model model) { + if (bindingResult.hasErrors()) { + return "register_form"; + } + + model.addAttribute("message", "Пользователь успешно зарегистрирован"); + + return "register_form"; + } +} diff --git a/src/main/java/ru/lionarius/isdojplab/model/Product.java b/src/main/java/ru/lionarius/isdojplab/model/Product.java index 9480205..8c56076 100644 --- a/src/main/java/ru/lionarius/isdojplab/model/Product.java +++ b/src/main/java/ru/lionarius/isdojplab/model/Product.java @@ -3,18 +3,16 @@ package ru.lionarius.isdojplab.model; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; import lombok.Data; +import java.util.List; + @Data +@AllArgsConstructor public class Product { - - @NotBlank(message = "Название товара обязательно") private String name; - - @NotNull(message = "Цена товара обязательна") - @Min(value = 1, message = "Цена должна быть больше 0") private Double price; - - @NotBlank(message = "Описание товара обязательно") private String description; + private String imageUrl; } diff --git a/src/main/java/ru/lionarius/isdojplab/model/User.java b/src/main/java/ru/lionarius/isdojplab/model/User.java new file mode 100644 index 0000000..987a025 --- /dev/null +++ b/src/main/java/ru/lionarius/isdojplab/model/User.java @@ -0,0 +1,18 @@ +package ru.lionarius.isdojplab.model; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.Data; + +@Data +public class User { + @NotBlank(message = "Поле не может быть пустым") + private String name; + @NotBlank(message = "Поле не может быть пустым") + @Email(message = "Неверный формат электронной почты") + private String email; + @NotBlank(message = "Поле не может быть пустым") + @Size(min = 6, message = "Пароль должен состоять не менее 6 символов") + private String password; +} diff --git a/src/main/resources/static/css/styles.css b/src/main/resources/static/css/styles.css new file mode 100644 index 0000000..52ff4fb --- /dev/null +++ b/src/main/resources/static/css/styles.css @@ -0,0 +1,71 @@ +body { + font-family: Arial, sans-serif; + background-color: #f4f4f9; + color: #333; + margin: 0; + padding: 0; +} +header { + background-color: #007BFF; + color: white; + padding: 1rem; + text-align: center; +} +h1 { + font-size: 2.5rem; +} +.container { + margin: 2rem auto; + max-width: 1200px; + padding: 1rem; + text-align: center; +} +.catalog { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 1rem; + margin-top: 2rem; +} +.product { + background: white; + border-radius: 8px; + box-shadow: 0 4px 8px rgba(0,0,0,0.1); + padding: 1rem; + transition: transform 0.3s; +} +.product img { + width: 100%; + border-bottom: 1px solid #ddd; + padding-bottom: 1rem; + margin-bottom: 1rem; +} +.product:hover { + transform: scale(1.05); +} +.product h3 { + font-size: 1.5rem; + margin-bottom: 1rem; +} +.product p { + font-size: 1rem; + margin-bottom: 1rem; +} +.product button { + background-color: #007BFF; + color: white; + padding: 0.5rem 1rem; + border: none; + border-radius: 4px; + cursor: pointer; +} +.product button:hover { + background-color: #0056b3; +} +footer { + background-color: #333; + color: white; + text-align: center; + padding: 1rem; + bottom: 0; + width: 100%; +} diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html index 65b374b..ff314f0 100644 --- a/src/main/resources/templates/home.html +++ b/src/main/resources/templates/home.html @@ -1,10 +1,43 @@ - + + Магазин электротоваров + -

+ +
+

Магазин электротоваров

+

Все для вашего дома и офиса

+
+ +
+ + +

Каталог товаров

+ +
+
+ Product Image +

+

+

Цена:

+ +
+
+ + + + +
+ +
+

© 2024 Магазин электротоваров. Все права защищены.

+
+ - \ No newline at end of file + diff --git a/src/main/resources/templates/product_form.html b/src/main/resources/templates/product_form.html deleted file mode 100644 index e7f93c6..0000000 --- a/src/main/resources/templates/product_form.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - - Форма добавления товара - - -

Добавить новый товар

-
-

- - - Ошибка -

-

- - - Ошибка -

-

- - - Ошибка -

- -
- - \ No newline at end of file diff --git a/src/main/resources/templates/register_form.html b/src/main/resources/templates/register_form.html new file mode 100644 index 0000000..ca98b6e --- /dev/null +++ b/src/main/resources/templates/register_form.html @@ -0,0 +1,49 @@ + + + + + + Регистрация + + + + +
+

Регистрация нового пользователя

+
+ +
+
+
+ + +
+ +
+ +
+ + +
+ +
+ +
+ + +
+ +
+ + +
+ +

+
+ + + + + diff --git a/src/test/java/ru/lionarius/isdojplab/HomeControllerTest.java b/src/test/java/ru/lionarius/isdojplab/HomeControllerTest.java index e999996..fd46fc0 100644 --- a/src/test/java/ru/lionarius/isdojplab/HomeControllerTest.java +++ b/src/test/java/ru/lionarius/isdojplab/HomeControllerTest.java @@ -15,6 +15,12 @@ public class HomeControllerTest { @Autowired private MockMvc mockMvc; + @Test + public void testHomePageReturnsOkStatus() throws Exception { + mockMvc.perform(get("/")) + .andExpect(status().isOk()); + } + @Test public void testHomePageReturnsCorrectView() throws Exception { mockMvc.perform(get("/")) @@ -22,17 +28,11 @@ public class HomeControllerTest { .andExpect(view().name("home")); } - @Test - public void testHomePageContainsMessage() throws Exception { - mockMvc.perform(get("/")) - .andExpect(status().isOk()) - .andExpect(model().attribute("message", "Добро пожаловать в магазин электротоваров!")); - } - @Test public void testHomePageRendersCorrectHtml() throws Exception { mockMvc.perform(get("/")) .andExpect(status().isOk()) - .andExpect(content().string(org.hamcrest.Matchers.containsString("Добро пожаловать в магазин электротоваров!"))); + .andExpect(content().contentType("text/html;charset=UTF-8")) + .andExpect(model().attribute("message", "Добро пожаловать в магазин электротоваров!")); } }