ЛР5 начало
This commit is contained in:
parent
57596deb85
commit
9fb6531f82
@ -14,6 +14,13 @@ repositories {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||||
|
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
|
||||||
|
implementation 'org.springframework.boot:spring-boot-devtools'
|
||||||
|
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'
|
||||||
|
|
||||||
|
implementation 'org.webjars:bootstrap:5.1.3'
|
||||||
|
implementation 'org.webjars:jquery:3.6.0'
|
||||||
|
implementation 'org.webjars:font-awesome:6.1.0'
|
||||||
|
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
|
||||||
implementation 'com.h2database:h2:2.1.210'
|
implementation 'com.h2database:h2:2.1.210'
|
||||||
|
BIN
data.mv.db
BIN
data.mv.db
Binary file not shown.
@ -2,12 +2,13 @@ package ru.ulstu.is.lab1.DataBase.controller;
|
|||||||
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import ru.ulstu.is.lab1.DataBase.service.CollectionService;
|
import ru.ulstu.is.lab1.DataBase.service.CollectionService;
|
||||||
|
import ru.ulstu.is.lab1.WebConfiguration;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/collection")
|
@RequestMapping(WebConfiguration.REST_API + "/collection")
|
||||||
public class CollectionController {
|
public class CollectionController {
|
||||||
private final CollectionService collectionService;
|
private final CollectionService collectionService;
|
||||||
|
|
||||||
|
@ -0,0 +1,82 @@
|
|||||||
|
package ru.ulstu.is.lab1.DataBase.controller;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.Model;
|
||||||
|
import org.springframework.validation.BindingResult;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import ru.ulstu.is.lab1.DataBase.service.CollectionService;
|
||||||
|
import ru.ulstu.is.lab1.DataBase.service.FilmService;
|
||||||
|
import ru.ulstu.is.lab1.DataBase.service.GenreService;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/collection")
|
||||||
|
public class CollectionMvcController {
|
||||||
|
private final CollectionService collectionService;
|
||||||
|
private final FilmService filmService;
|
||||||
|
|
||||||
|
public CollectionMvcController(CollectionService collectionService, FilmService filmService)
|
||||||
|
{
|
||||||
|
this.collectionService = collectionService;
|
||||||
|
this.filmService = filmService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public String getCollections(Model model) {
|
||||||
|
model.addAttribute("collection",
|
||||||
|
collectionService.findAllCollections().stream()
|
||||||
|
.map(CollectionDTO::new)
|
||||||
|
.toList());
|
||||||
|
return "collection";
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping(value = {"/edit", "/edit/{id}"})
|
||||||
|
public String editCollection(@PathVariable(required = false) Long id,
|
||||||
|
Model model) {
|
||||||
|
if (id == null || id <= 0) {
|
||||||
|
model.addAttribute("collectionDTO", new CollectionDTO());
|
||||||
|
} else {
|
||||||
|
model.addAttribute("collectionId", id);
|
||||||
|
model.addAttribute("collectionDTO", new CollectionDTO(collectionService.findCollection(id)));
|
||||||
|
}
|
||||||
|
return "collection-edit";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = {"/", "/{id}"})
|
||||||
|
public String saveCollection(@PathVariable(required = false) Long id,
|
||||||
|
@ModelAttribute @Valid CollectionDTO collectionDTO,
|
||||||
|
BindingResult bindingResult,
|
||||||
|
Model model) {
|
||||||
|
if (bindingResult.hasErrors()) {
|
||||||
|
model.addAttribute("errors", bindingResult.getAllErrors());
|
||||||
|
return "collection-edit";
|
||||||
|
}
|
||||||
|
if (id == null || id <= 0) {
|
||||||
|
collectionService.addCollection(collectionDTO.getName());
|
||||||
|
} else {
|
||||||
|
collectionService.updateCollection(id, collectionDTO.getName());
|
||||||
|
}
|
||||||
|
return "redirect:/collection";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/delete/{id}")
|
||||||
|
public String deleteCollection(@PathVariable Long id) {
|
||||||
|
collectionService.deleteCollection(id);
|
||||||
|
return "redirect:/collection";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/add_film/{id}/{filmId}")
|
||||||
|
public String addFilm(@PathVariable(value = "id") Long id,
|
||||||
|
@PathVariable(value = "filmId") Long filmId) {
|
||||||
|
collectionService.addFilm(id, filmId);
|
||||||
|
return "redirect:/collection";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = "/del_film/{id}/{filmId}")
|
||||||
|
public String deleteFilm(@PathVariable(value = "id") Long id,
|
||||||
|
@PathVariable(value = "filmId") Long filmId) {
|
||||||
|
collectionService.deleteFilm(id, filmId);
|
||||||
|
return "redirect:/collection";
|
||||||
|
}
|
||||||
|
}
|
@ -2,12 +2,13 @@ package ru.ulstu.is.lab1.DataBase.controller;
|
|||||||
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import ru.ulstu.is.lab1.DataBase.service.FilmService;
|
import ru.ulstu.is.lab1.DataBase.service.FilmService;
|
||||||
|
import ru.ulstu.is.lab1.WebConfiguration;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/film")
|
@RequestMapping(WebConfiguration.REST_API + "/film")
|
||||||
public class FilmController {
|
public class FilmController {
|
||||||
private final FilmService filmService;
|
private final FilmService filmService;
|
||||||
|
|
||||||
|
@ -0,0 +1,79 @@
|
|||||||
|
package ru.ulstu.is.lab1.DataBase.controller;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.Model;
|
||||||
|
import org.springframework.validation.BindingResult;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import ru.ulstu.is.lab1.DataBase.service.FilmService;
|
||||||
|
import ru.ulstu.is.lab1.DataBase.service.GenreService;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/film")
|
||||||
|
public class FilmMvcController {
|
||||||
|
private final FilmService filmService;
|
||||||
|
private final GenreService genreService;
|
||||||
|
|
||||||
|
public FilmMvcController(FilmService filmService, GenreService genreService)
|
||||||
|
{
|
||||||
|
this.filmService = filmService;
|
||||||
|
this.genreService = genreService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public String getFilms(Model model) {
|
||||||
|
model.addAttribute("film",
|
||||||
|
filmService.findAllFilms().stream()
|
||||||
|
.map(FilmDTO::new)
|
||||||
|
.toList());
|
||||||
|
return "film";
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping(value = {"/edit", "/edit/{id}"})
|
||||||
|
public String editFilm(@PathVariable(required = false) Long id,
|
||||||
|
Model model) {
|
||||||
|
if (id == null || id <= 0) {
|
||||||
|
model.addAttribute("filmDTO", new FilmDTO());
|
||||||
|
} else {
|
||||||
|
model.addAttribute("filmId", id);
|
||||||
|
model.addAttribute("filmDTO", new FilmDTO(filmService.findFilm(id)));
|
||||||
|
}
|
||||||
|
return "film-edit";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = {"/", "/{id}"})
|
||||||
|
public String saveFilm(@PathVariable(required = false) Long id,
|
||||||
|
@ModelAttribute @Valid FilmDTO filmDTO,
|
||||||
|
BindingResult bindingResult,
|
||||||
|
Model model) {
|
||||||
|
if (bindingResult.hasErrors()) {
|
||||||
|
model.addAttribute("errors", bindingResult.getAllErrors());
|
||||||
|
return "film-edit";
|
||||||
|
}
|
||||||
|
if (id == null || id <= 0) {
|
||||||
|
filmService.addFilm(filmDTO.getName());
|
||||||
|
} else {
|
||||||
|
filmService.updateFilm(id, filmDTO.getName());
|
||||||
|
}
|
||||||
|
return "redirect:/film";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/delete/{id}")
|
||||||
|
public String deleteFilm(@PathVariable Long id) {
|
||||||
|
filmService.deleteFilm(id);
|
||||||
|
return "redirect:/film";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/add_genres/{id}")
|
||||||
|
public String addGenres(@PathVariable Long id,
|
||||||
|
@RequestParam("genreId") List<String> genreIds){
|
||||||
|
List<Long> genreIdsAsLong = genreIds.stream()
|
||||||
|
.map(Long::parseLong)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
filmService.addGenres(id, genreIdsAsLong);
|
||||||
|
return "redirect:/film";
|
||||||
|
}
|
||||||
|
}
|
@ -2,12 +2,13 @@ package ru.ulstu.is.lab1.DataBase.controller;
|
|||||||
|
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import ru.ulstu.is.lab1.DataBase.service.GenreService;
|
import ru.ulstu.is.lab1.DataBase.service.GenreService;
|
||||||
|
import ru.ulstu.is.lab1.WebConfiguration;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/genre")
|
@RequestMapping(WebConfiguration.REST_API + "/genre")
|
||||||
public class GenreController {
|
public class GenreController {
|
||||||
private final GenreService genreService;
|
private final GenreService genreService;
|
||||||
|
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
package ru.ulstu.is.lab1.DataBase.controller;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.ui.Model;
|
||||||
|
import org.springframework.validation.BindingResult;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import ru.ulstu.is.lab1.DataBase.service.GenreService;
|
||||||
|
|
||||||
|
import javax.validation.Valid;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping("/genre")
|
||||||
|
public class GenreMvcController {
|
||||||
|
private final GenreService genreService;
|
||||||
|
public GenreMvcController(GenreService genreService) {
|
||||||
|
this.genreService = genreService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping
|
||||||
|
public String getGenres(Model model) {
|
||||||
|
model.addAttribute("genre",
|
||||||
|
genreService.findAllGenres().stream()
|
||||||
|
.map(GenreDTO::new)
|
||||||
|
.toList());
|
||||||
|
return "genre";
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping(value = {"/edit", "/edit/{id}"})
|
||||||
|
public String editGenre(@PathVariable(required = false) Long id,
|
||||||
|
Model model) {
|
||||||
|
if (id == null || id <= 0) {
|
||||||
|
model.addAttribute("genreDTO", new GenreDTO());
|
||||||
|
} else {
|
||||||
|
model.addAttribute("genreId", id);
|
||||||
|
model.addAttribute("genreDTO", new GenreDTO(genreService.findGenre(id)));
|
||||||
|
}
|
||||||
|
return "genre-edit";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping(value = {"", "/{id}"})
|
||||||
|
public String saveGenre(@PathVariable(required = false) Long id,
|
||||||
|
@ModelAttribute @Valid GenreDTO genreDTO,
|
||||||
|
BindingResult bindingResult,
|
||||||
|
Model model) {
|
||||||
|
if (bindingResult.hasErrors()) {
|
||||||
|
model.addAttribute("errors", bindingResult.getAllErrors());
|
||||||
|
return "genre-edit";
|
||||||
|
}
|
||||||
|
if (id == null || id <= 0) {
|
||||||
|
genreService.addGenre(genreDTO.getName());
|
||||||
|
} else {
|
||||||
|
genreService.updateGenre(id, genreDTO.getName());
|
||||||
|
}
|
||||||
|
return "redirect:/genre";
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/delete/{id}")
|
||||||
|
public String deleteGenre(@PathVariable Long id) {
|
||||||
|
genreService.deleteGenre(id);
|
||||||
|
return "redirect:/genre";
|
||||||
|
}
|
||||||
|
}
|
@ -2,10 +2,17 @@ package ru.ulstu.is.lab1;
|
|||||||
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
||||||
|
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
class WebConfiguration implements WebMvcConfigurer {
|
public class WebConfiguration implements WebMvcConfigurer {
|
||||||
|
public static final String REST_API = "/api";
|
||||||
|
@Override
|
||||||
|
public void addViewControllers(ViewControllerRegistry registry) {
|
||||||
|
WebMvcConfigurer.super.addViewControllers(registry);
|
||||||
|
registry.addViewController("rest-test");
|
||||||
|
}
|
||||||
@Override
|
@Override
|
||||||
public void addCorsMappings(CorsRegistry registry){
|
public void addCorsMappings(CorsRegistry registry){
|
||||||
registry.addMapping("/**").allowedMethods("*");
|
registry.addMapping("/**").allowedMethods("*");
|
||||||
|
@ -3,7 +3,7 @@ package ru.ulstu.is.lab1.util.validation;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
public class ValidationException extends RuntimeException{
|
public class ValidationException extends RuntimeException{
|
||||||
public ValidationException(Set<String> errors) {
|
public <T> ValidationException(Set<String> errors) {
|
||||||
super(String.join("\n", errors));
|
super(String.join("\n", errors));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
10
src/main/resources/templates/index.html
Normal file
10
src/main/resources/templates/index.html
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>VIDEOFILMS</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Hello!</h1>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user