сдано
This commit is contained in:
parent
40b56f7a59
commit
60e6468423
BIN
data.mv.db
BIN
data.mv.db
Binary file not shown.
@ -1,6 +1,16 @@
|
||||
package com.example.demo.author.repository;
|
||||
|
||||
import com.example.demo.author.model.Author;
|
||||
import com.example.demo.film.model.Film;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface AuthorRepository extends JpaRepository<Author, Long> {
|
||||
@Query("SELECT a.films FROM Author a WHERE a.id = :id")
|
||||
List<Film> getFilmFromAuthor(Long id );
|
||||
|
||||
@Query("SELECT COUNT(g) FROM Author a join a.films f JOIN f.genres g WHERE a.id = :id")
|
||||
Long getCountGenreOfFilmFromAuthor(Long id);
|
||||
}
|
||||
|
@ -2,12 +2,15 @@ package com.example.demo.author.service;
|
||||
|
||||
import com.example.demo.author.model.Author;
|
||||
import com.example.demo.author.repository.AuthorRepository;
|
||||
import com.example.demo.film.model.Film;
|
||||
import com.example.demo.genre.model.Genre;
|
||||
import com.example.demo.util.validation.ValidatorUtil;
|
||||
import jakarta.persistence.EntityManager;
|
||||
import jakarta.persistence.PersistenceContext;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@ -57,6 +60,14 @@ public class AuthorService {
|
||||
return currentAuthor;
|
||||
}
|
||||
|
||||
public Long getCountGenreOfFilmFromAuthor(Long id) {
|
||||
return authorRepository.getCountGenreOfFilmFromAuthor(id);
|
||||
|
||||
}
|
||||
public List<Film> getFilmsFromAuthor(Long id){
|
||||
return authorRepository.getFilmFromAuthor(id);
|
||||
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void deleteAllAuthors() {
|
||||
|
@ -31,6 +31,9 @@ public class FilmMvcController {
|
||||
public String requestURI(final HttpServletRequest request) {
|
||||
return request.getRequestURI();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@GetMapping
|
||||
public String getFilms(@RequestParam(value = "authorId", required = false) Long authorId,
|
||||
@RequestParam(value = "genreId",required = false) Long genreId,
|
||||
@ -66,10 +69,7 @@ public class FilmMvcController {
|
||||
model.addAttribute("errors", bindingResult.getAllErrors());
|
||||
return "film-edit";
|
||||
}
|
||||
List<Genre> genres = new ArrayList<>();
|
||||
for (Long obj: film.getGenresId()) {
|
||||
genres.add(genreService.findGenre(obj));
|
||||
}
|
||||
List<Genre> genres = genreService.findGenresByListId(film.getGenresId());
|
||||
if (id == null || id <= 0) {
|
||||
filmService.addFilm(film.getName(), film.getDescription(), authorService.findAuthor(film.getAuthorId()),genres);
|
||||
}
|
||||
|
@ -50,6 +50,12 @@ public class Film {
|
||||
public List<Genre> getGenres() {
|
||||
return genres;
|
||||
}
|
||||
public String getNameGenres() {
|
||||
StringBuilder result = new StringBuilder();
|
||||
for(Genre g : genres)
|
||||
result.append(g.getName()).append(", ");
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
public void addGenre(Genre genre) {
|
||||
if (genres == null){
|
||||
|
@ -7,6 +7,7 @@ import com.example.demo.util.validation.ValidatorUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@ -32,6 +33,14 @@ public class GenreService {
|
||||
return genre.orElseThrow(() -> new GenreNotFoundException(id));
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public List<Genre> findGenresByListId(List<Long> ll){
|
||||
List<Genre> genres = new ArrayList<>();
|
||||
for (Long l: ll){
|
||||
genreRepository.findById(l).ifPresent(genres::add);
|
||||
}
|
||||
return genres;
|
||||
}
|
||||
@Transactional(readOnly = true)
|
||||
public List<Genre> findAllGenres() {
|
||||
return genreRepository.findAll();
|
||||
|
@ -1,10 +1,19 @@
|
||||
package com.example.demo.util;
|
||||
|
||||
import com.example.demo.author.controller.AuthorDto;
|
||||
import com.example.demo.author.service.AuthorService;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
@Controller
|
||||
public class StaticPagesMvcController {
|
||||
private final AuthorService authorService;
|
||||
public StaticPagesMvcController(AuthorService authorService) {
|
||||
this.authorService = authorService;
|
||||
}
|
||||
@RequestMapping("/")
|
||||
public String indexPage(){
|
||||
return "index";
|
||||
@ -17,4 +26,20 @@ public class StaticPagesMvcController {
|
||||
public String loginPage(){
|
||||
return "login";
|
||||
}
|
||||
// @RequestMapping("/request")
|
||||
// public String requestPage(){
|
||||
// return "request";
|
||||
// }
|
||||
@RequestMapping(value = {"/request", "/request/{id}"})
|
||||
public String editProduct(@PathVariable(required = false) Long id,
|
||||
@ModelAttribute AuthorDto componentDTO,
|
||||
Model model) {
|
||||
if (componentDTO != null && componentDTO.getId() != 0){
|
||||
model.addAttribute("count", authorService.getCountGenreOfFilmFromAuthor(componentDTO.getId()));
|
||||
model.addAttribute("filmList", authorService.getFilmsFromAuthor(componentDTO.getId()));
|
||||
}
|
||||
model.addAttribute("componentDto", new AuthorDto());
|
||||
model.addAttribute("components", authorService.findAllAuthors());
|
||||
return "request";
|
||||
}
|
||||
}
|
||||
|
@ -59,6 +59,9 @@
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/forum">Форум</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/request">Запрос</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<form class="w-100">
|
||||
|
70
src/main/resources/templates/request.html
Normal file
70
src/main/resources/templates/request.html
Normal file
@ -0,0 +1,70 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en"
|
||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
xmlns:th="http://www.thymeleaf.org"
|
||||
layout:decorate="~{default}">
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
<div layout:fragment="content">
|
||||
<div class="flex-shrink-0" style="background-color: RGB(255, 255, 255)">
|
||||
<div>
|
||||
<form
|
||||
action="#"
|
||||
th:action="@{/request}"
|
||||
th:object="${componentDto}"
|
||||
method="post"
|
||||
>
|
||||
<div class="mb-3">
|
||||
<label for="lang" class="form-label">Автор</label>
|
||||
<select id="lang" class="form-select" th:field="${componentDto.id}">
|
||||
<option
|
||||
th:each="value: ${components}"
|
||||
th:value="${value.getId()}"
|
||||
th:selected="true"
|
||||
th:text="${value.getSurname()}"
|
||||
></option>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<div>
|
||||
<button class="btn btn-success button-fixed" type="submit">
|
||||
получить
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">ID</th>
|
||||
<th scope="col">Название</th>
|
||||
<th scope="col">Жанры</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="film, iterator: ${filmList}">
|
||||
<th scope="row" th:text="${iterator.index} + 1"></th>
|
||||
<td th:text="${film.id}"></td>
|
||||
<td th:text="${film.name}" style="width: 60%"></td>
|
||||
<td th:text="${film.getNameGenres()}" style="width: 60%"></td>
|
||||
<td style="width: 10%">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="col"></th>
|
||||
<th scope="col"></th>
|
||||
<th scope="col" style="text-align: end">Итого: </th>
|
||||
<th th:if="${count != null}" th:text="${count}"></th>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</form>
|
||||
<br/>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user