Начало сущности news

This commit is contained in:
DyCTaTOR 2024-05-18 01:35:26 +04:00
parent 16114c71a5
commit f12e9dfad5
9 changed files with 89 additions and 40 deletions

View File

@ -35,6 +35,7 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-devtools' implementation 'org.springframework.boot:spring-boot-devtools'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:3.3.0'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'org.webjars.npm:bootstrap:5.3.3' runtimeOnly 'org.webjars.npm:bootstrap:5.3.3'
implementation 'com.h2database:h2:2.2.224' implementation 'com.h2database:h2:2.2.224'

Binary file not shown.

View File

@ -7,6 +7,8 @@ public class Constants {
public static final String DEFAULT_PAGE_SIZE = "5"; public static final String DEFAULT_PAGE_SIZE = "5";
public static final String REDIRECT_VIEW = "redirect:";
private Constants() { private Constants() {
} }
} }

View File

@ -1,20 +1,18 @@
package com.example.demo.news.api; package com.example.demo.news.api;
import java.util.List;
import org.modelmapper.ModelMapper; import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import com.example.demo.core.configuration.Constants;
import com.example.demo.department.service.DepartmentService; import com.example.demo.department.service.DepartmentService;
import com.example.demo.news.service.NewsService;
import com.example.demo.news.model.NewsEntity; import com.example.demo.news.model.NewsEntity;
import com.example.demo.news.service.NewsService;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@ -23,8 +21,8 @@ import jakarta.validation.Valid;
public class NewsController { public class NewsController {
public static final String URL = "/news"; public static final String URL = "/news";
private static final String NEWS_VIEW = "news"; private static final String NEWS_VIEW = "news";
private static final String NEWS_VIEW_EDIT_VIEW = "new-edit"; private static final String NEWS_EDIT_VIEW = "new-edit";
private static final String NEWS_VIEW_ATTRIBUTE = "news"; private static final String NEWS_ATTRIBUTE = "news";
private final NewsService newsService; private final NewsService newsService;
private final ModelMapper modelMapper; private final ModelMapper modelMapper;
private final DepartmentService departmentService; private final DepartmentService departmentService;
@ -53,7 +51,7 @@ public class NewsController {
@GetMapping @GetMapping
public String getAll(Model model) { public String getAll(Model model) {
model.addAttribute(NEWS_VIEW_ATTRIBUTE, model.addAttribute(NEWS_ATTRIBUTE,
newsService.getAll().stream().map(this::toDto).toList()); newsService.getAll().stream().map(this::toDto).toList());
return NEWS_VIEW; return NEWS_VIEW;
} }
@ -68,6 +66,24 @@ public class NewsController {
return toDto(newsService.create(toEntity(dto))); return toDto(newsService.create(toEntity(dto)));
} }
@PostMapping("/delete/{id}")
public String delete(
@PathVariable(name = "id") Long id) {
newsService.delete(id);
return Constants.REDIRECT_VIEW + URL;
}
@GetMapping("/edit/{id}")
public String update(
@PathVariable(name = "id") Long id,
Model model) {
if (id <= 0) {
throw new IllegalArgumentException();
}
model.addAttribute(NEWS_ATTRIBUTE, toDto(newsService.get(id)));
return NEWS_EDIT_VIEW;
}
// @PutMapping("/{id}") // @PutMapping("/{id}")
// public NewsDto update(@PathVariable(name = "id") Long id, @RequestBody // public NewsDto update(@PathVariable(name = "id") Long id, @RequestBody
// NewsDto dto) { // NewsDto dto) {

View File

@ -65,15 +65,19 @@ td form {
.cart-item { .cart-item {
height: auto; height: auto;
} }
.headStyle { .headStyle {
color: #FFFFFF color: #FFFFFF
} }
.headStyleNavBar { .headStyleNavBar {
background-color: #454545; background-color: #454545;
} }
.headStyleNavBar2 { .headStyleNavBar2 {
background-color: #575757 background-color: #575757
} }
.stsp { .stsp {
font-size: 30px; font-size: 30px;
color: #333333; color: #333333;
@ -94,6 +98,7 @@ td form {
background-color: #FFFFFF; background-color: #FFFFFF;
opacity: 0.8; opacity: 0.8;
} }
.rectPage4 { .rectPage4 {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
@ -104,6 +109,7 @@ td form {
background-color: #7c7474; background-color: #7c7474;
opacity: 0.8; opacity: 0.8;
} }
.rectPage5 { .rectPage5 {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
@ -115,6 +121,7 @@ td form {
background-color: #FFFFFF; background-color: #FFFFFF;
opacity: 0.7; opacity: 0.7;
} }
.rectNews { .rectNews {
width: 310px; width: 310px;
height: 200px; height: 200px;
@ -124,18 +131,22 @@ td form {
margin-top: 9px; margin-top: 9px;
margin-bottom: 25px; margin-bottom: 25px;
} }
.stylePage2 { .stylePage2 {
float: center; float: center;
margin-right: 7; margin-right: 7;
color: #063638; color: #063638;
font-size: 18px font-size: 18px
} }
.styleParagraph { .styleParagraph {
border-top: 2px solid #000000; border-top: 2px solid #000000;
} }
.styleBlack { .styleBlack {
color: #000000; color: #000000;
} }
.stylePage2LargeSymbol { .stylePage2LargeSymbol {
float: left; float: left;
margin-right: 7; margin-right: 7;
@ -143,6 +154,7 @@ td form {
font-size: 50px; font-size: 50px;
line-height: 52px line-height: 52px
} }
.rectNewsTextBox { .rectNewsTextBox {
width: 310px; width: 310px;
min-height: 50px; min-height: 50px;
@ -152,7 +164,11 @@ td form {
border-radius: 10% / 40%; border-radius: 10% / 40%;
margin-top: 5px; margin-top: 5px;
} }
.rectNewsText { .rectNewsText {
color: #000000; color: #000000;
font-size: 15px; font-size: 15px;
display: flex;
align-items: center;
padding: 3px;
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -4,10 +4,12 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" href="/images/logo.png" type="image/x-icon">
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script type="text/javascript" src="/webjars/bootstrap/5.3.3/dist/js/bootstrap.bundle.min.js"></script> <script type="text/javascript" src="/webjars/bootstrap/5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<link rel="stylesheet" href="/webjars/bootstrap/5.3.3/dist/css/bootstrap.min.css" /> <link rel="stylesheet" href="/webjars/bootstrap/5.3.3/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="/webjars/bootstrap-icons/1.11.3/font/bootstrap-icons.min.css" /> <link rel="stylesheet" href="/webjars/bootstrap-icons/1.11.3/font/bootstrap-icons.min.css" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="/css/style.css" /> <link rel="stylesheet" href="/css/style.css" />
</head> </head>

View File

@ -4,15 +4,16 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="/css/style.css" />
<title>Новости</title> <title>Новости</title>
</head> </head>
<body> <body>
<main layout:fragment="content"> <main class="text-center" layout:fragment="content">
<h2>Типы заказов</h2> <span class="mainSt">
<b>Новости</b>
</span>
<div> <div>
<a href="/news/edit/" class="btn btn-primary">Добавить тип заказа</a> <a href="/news/edit/" class="btn btn-primary">Добавить новость</a>
</div> </div>
<div class="row"> <div class="row">
<div class="col mt-4" th:each="newItem : ${news}"> <div class="col mt-4" th:each="newItem : ${news}">
@ -21,6 +22,17 @@
<div class="rectNewsTextBox"> <div class="rectNewsTextBox">
<span class="rectNewsText"> <span class="rectNewsText">
<b scope="row" th:text="${newItem.description}"></b> <b scope="row" th:text="${newItem.description}"></b>
<form th:action="@{/news/edit/{id}(id=${newItem.id})}" method="get">
<button type="submit" class="btn btn-link button-link">
<i class="fa fa-edit"></i>
</button>
</form>
<form th:action="@{/news/delete/{id}(id=${newItem.id})}" method="post">
<button type="submit" class="btn btn-link button-link"
onclick="return confirm('Вы уверены?')">
<i class="fa fa-trash"></i>
</button>
</form>
</span> </span>
</div> </div>
</div> </div>