теперь пользователь и создатель объедененны и можно использовать старый функционал
This commit is contained in:
parent
0463cef7fa
commit
ee2f2cd7df
@ -28,16 +28,27 @@ public class CreatorActionMvcController {
|
||||
this.mangaService = mangaService;
|
||||
}
|
||||
|
||||
@GetMapping()
|
||||
public String getCreator(@RequestParam(value = "creatorId", required = false) Long creatorId, Model model) {
|
||||
@GetMapping("/{user}")
|
||||
public String getCreator(@PathVariable String user, Model model) {
|
||||
model.addAttribute("creators",
|
||||
creatorService.findAllCreators().stream()
|
||||
.map(CreatorMangaDto::new)
|
||||
.toList());
|
||||
if(creatorId != null){
|
||||
model.addAttribute("currentCreator", new CreatorMangaDto(creatorService.findCreator(creatorId)));
|
||||
CreatorMangaDto currentCreator = new CreatorMangaDto(creatorService.findCreator(creatorService.findByLogin(user).getId()));
|
||||
model.addAttribute("currentCreator", currentCreator);
|
||||
model.addAttribute("creatorId", currentCreator.getId());
|
||||
return "creatorAction";
|
||||
}
|
||||
model.addAttribute("creatorId", creatorId);
|
||||
|
||||
@GetMapping()
|
||||
public String getCreator(@RequestParam("creatorId") Long creatorId, Model model) {
|
||||
model.addAttribute("creators",
|
||||
creatorService.findAllCreators().stream()
|
||||
.map(CreatorMangaDto::new)
|
||||
.toList());
|
||||
CreatorMangaDto currentCreator = new CreatorMangaDto(creatorService.findCreator(creatorId));
|
||||
model.addAttribute("currentCreator", currentCreator);
|
||||
model.addAttribute("creatorId", currentCreator.getId());
|
||||
return "creatorAction";
|
||||
}
|
||||
|
||||
|
@ -1,63 +0,0 @@
|
||||
package com.LabWork.app.MangaStore.controller.Creator;
|
||||
|
||||
import com.LabWork.app.MangaStore.model.Dto.CreatorMangaDto;
|
||||
import com.LabWork.app.MangaStore.service.CreatorService;
|
||||
import javax.validation.Valid;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.validation.BindingResult;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/creator")
|
||||
public class CreatorMvcController {
|
||||
private final CreatorService creatorService;
|
||||
|
||||
public CreatorMvcController(CreatorService creatorService) {
|
||||
this.creatorService = creatorService;
|
||||
}
|
||||
|
||||
@GetMapping
|
||||
public String getCreators(Model model) {
|
||||
model.addAttribute("creators",
|
||||
creatorService.findAllCreators().stream()
|
||||
.map(CreatorMangaDto::new)
|
||||
.toList());
|
||||
return "creator";
|
||||
}
|
||||
|
||||
@GetMapping(value = {"/edit", "/edit/{id}"})
|
||||
public String editCreator(@PathVariable(required = false) Long id,
|
||||
Model model) {
|
||||
if (id == null || id <= 0) {
|
||||
model.addAttribute("CreatorMangaDto", new CreatorMangaDto());
|
||||
} else {
|
||||
model.addAttribute("creatorId", id);
|
||||
model.addAttribute("CreatorMangaDto", new CreatorMangaDto(creatorService.findCreator(id)));
|
||||
}
|
||||
return "creator-edit";
|
||||
}
|
||||
|
||||
@PostMapping(value = {"", "/{id}"})
|
||||
public String saveCreator(@PathVariable(required = false) Long id,
|
||||
@ModelAttribute @Valid CreatorMangaDto creatorMangaDto,
|
||||
BindingResult bindingResult,
|
||||
Model model) {
|
||||
if (bindingResult.hasErrors()) {
|
||||
model.addAttribute("errors", bindingResult.getAllErrors());
|
||||
return "creator-edit";
|
||||
}
|
||||
if (id == null || id <= 0) {
|
||||
creatorService.addCreator(creatorMangaDto.getCreatorName(), creatorMangaDto.getHashedPassword());
|
||||
} else {
|
||||
creatorService.updateCreator(id, creatorMangaDto.getCreatorName(), creatorMangaDto.getHashedPassword());
|
||||
}
|
||||
return "redirect:/creator";
|
||||
}
|
||||
|
||||
@PostMapping("/delete/{id}")
|
||||
public String deleteCreator(@PathVariable Long id) {
|
||||
creatorService.deleteCreator(id);
|
||||
return "redirect:/creator";
|
||||
}
|
||||
}
|
@ -26,6 +26,13 @@ public class Creator {
|
||||
|
||||
public Creator(String creatorName, String hashedPassword) {
|
||||
this.user = user;
|
||||
this.id = user.getId();
|
||||
this.mangas = new ArrayList<>();
|
||||
}
|
||||
|
||||
public Creator(User user) {
|
||||
this.user = user;
|
||||
this.id = user.getId();
|
||||
this.mangas = new ArrayList<>();
|
||||
}
|
||||
|
||||
@ -60,8 +67,6 @@ public class Creator {
|
||||
public String toString() {
|
||||
return "Creator{" +
|
||||
"id=" + id +
|
||||
", creatorName='" + creatorName + '\'' +
|
||||
", hashedPassword='" + hashedPassword + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
@ -16,8 +16,8 @@ public class CreatorMangaDto {
|
||||
|
||||
public CreatorMangaDto(Creator creator) {
|
||||
this.id = creator.getId();
|
||||
this.creatorName = creator.getCreatorName();
|
||||
this.hashedPassword = creator.getHashedPassword();
|
||||
this.creatorName = creator.getUser().getLogin();
|
||||
this.hashedPassword = creator.getUser().getPassword();
|
||||
this.mangas = creator.getMangas().stream()
|
||||
.map(x -> new MangaDto(x))
|
||||
.toList();
|
||||
|
@ -5,6 +5,8 @@ import com.LabWork.app.MangaStore.model.Default.Manga;
|
||||
import com.LabWork.app.MangaStore.model.Default.Reader;
|
||||
import com.LabWork.app.MangaStore.service.Repository.CreatorRepository;
|
||||
import com.LabWork.app.MangaStore.service.Exception.CreatorNotFoundException;
|
||||
import com.LabWork.app.MangaStore.user.model.User;
|
||||
import com.LabWork.app.MangaStore.user.repository.UserRepository;
|
||||
import com.LabWork.app.MangaStore.util.validation.ValidatorUtil;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@ -14,13 +16,17 @@ import java.util.Optional;
|
||||
@Service
|
||||
public class CreatorService {
|
||||
private final CreatorRepository creatorRepository;
|
||||
|
||||
private final UserRepository userRepository;
|
||||
private final MangaService mangaService;
|
||||
private final ValidatorUtil validatorUtil;
|
||||
|
||||
public CreatorService(CreatorRepository creatorRepository,
|
||||
MangaService mangaService,
|
||||
ValidatorUtil validatorUtil) {
|
||||
ValidatorUtil validatorUtil,
|
||||
UserRepository userRepository) {
|
||||
this.creatorRepository = creatorRepository;
|
||||
this.userRepository = userRepository;
|
||||
this.mangaService = mangaService;
|
||||
this.validatorUtil = validatorUtil;
|
||||
}
|
||||
@ -30,6 +36,14 @@ public class CreatorService {
|
||||
final Optional<Creator> creator = creatorRepository.findById(id);
|
||||
return creator.orElseThrow(() -> new CreatorNotFoundException(id));
|
||||
}
|
||||
public User findByLogin(String login) {
|
||||
return userRepository.findOneByLoginIgnoreCase(login);
|
||||
}
|
||||
@Transactional(readOnly = true)
|
||||
public User findUser(Long id) {
|
||||
final Optional<User> user = userRepository.findById(id);
|
||||
return user.orElseThrow(() -> new CreatorNotFoundException(id));
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
public List<Creator> findAllCreators() { return creatorRepository.findAll(); }
|
||||
@ -43,11 +57,11 @@ public class CreatorService {
|
||||
|
||||
@Transactional
|
||||
public Creator updateCreator(Long id, String creatorName, String password) {
|
||||
final Creator currentCreator = findCreator(id);
|
||||
currentCreator.setCreatorName(creatorName);
|
||||
currentCreator.setHashedPassword(password);
|
||||
validatorUtil.validate(currentCreator);
|
||||
return currentCreator;
|
||||
final User currentUser = findUser(id);
|
||||
currentUser.setLogin(creatorName);
|
||||
currentUser.setPassword(password);
|
||||
validatorUtil.validate(currentUser);
|
||||
return findCreator(id);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.LabWork.app.MangaStore.service.Repository;
|
||||
|
||||
import com.LabWork.app.MangaStore.model.Default.Creator;
|
||||
import com.LabWork.app.MangaStore.user.model.User;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface CreatorRepository extends JpaRepository<Creator, Long> {
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.LabWork.app.MangaStore.user.service;
|
||||
|
||||
import com.LabWork.app.MangaStore.model.Default.Creator;
|
||||
import com.LabWork.app.MangaStore.service.Repository.CreatorRepository;
|
||||
import com.LabWork.app.MangaStore.user.model.UserRole;
|
||||
import com.LabWork.app.MangaStore.util.validation.ValidationException;
|
||||
import com.LabWork.app.MangaStore.util.validation.ValidatorUtil;
|
||||
@ -19,13 +21,16 @@ import java.util.Objects;
|
||||
@Service
|
||||
public class UserService implements UserDetailsService {
|
||||
private final UserRepository userRepository;
|
||||
private final CreatorRepository creatorRepository;
|
||||
private final PasswordEncoder passwordEncoder;
|
||||
private final ValidatorUtil validatorUtil;
|
||||
|
||||
public UserService(UserRepository userRepository,
|
||||
CreatorRepository creatorRepository,
|
||||
PasswordEncoder passwordEncoder,
|
||||
ValidatorUtil validatorUtil) {
|
||||
this.userRepository = userRepository;
|
||||
this.creatorRepository = creatorRepository;
|
||||
this.passwordEncoder = passwordEncoder;
|
||||
this.validatorUtil = validatorUtil;
|
||||
}
|
||||
@ -51,7 +56,10 @@ public class UserService implements UserDetailsService {
|
||||
if (!Objects.equals(password, passwordConfirm)) {
|
||||
throw new ValidationException("Passwords not equals");
|
||||
}
|
||||
return userRepository.save(user);
|
||||
userRepository.save(user);
|
||||
final Creator creator = new Creator(user);
|
||||
creatorRepository.save(creator);
|
||||
return user;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1,31 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en"
|
||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{default}">
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
<div layout:fragment="content">
|
||||
<div th:text="${errors}" class="margin-bottom alert-danger"></div>
|
||||
<form action="#" th:action="@{/creator/{id}(id=${id})}" th:object="${CreatorMangaDto}" method="post">
|
||||
<div class="mb-3">
|
||||
<label for="creatorName" class="form-label">creatorName</label>
|
||||
<input id="creatorName" type='text' class="form-control" th:field="${CreatorMangaDto.creatorName}" required="true"/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<label for="hashedPassword" class="form-label">hashedPassword</label>
|
||||
<input id="hashedPassword" type='text' class="form-control" th:field="${CreatorMangaDto.hashedPassword}" required="true"/>
|
||||
</div>
|
||||
<div class="mb-3">
|
||||
<button type="submit" class="btn btn-primary button-fixed">
|
||||
<span th:if="${id == null}">Добавить</span>
|
||||
<span th:if="${id != null}">Обновить</span>
|
||||
</button>
|
||||
<a class="btn btn-secondary button-fixed" th:href="@{/creator}">
|
||||
Назад
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -1,60 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en"
|
||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||
layout:decorate="~{default}">
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container" id="root-div" layout:fragment="content">
|
||||
<div class="content">
|
||||
<h1>Creator</h1>
|
||||
<a class="btn btn-success"
|
||||
th:href="@{/creator/edit}">
|
||||
<i class="fa-solid fa-plus"></i> Добавить
|
||||
</a>
|
||||
<div class="row table-responsive text-white">
|
||||
<table class="table mt-3 text-white">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">#</th>
|
||||
<th scope="col">CreatorName</th>
|
||||
<th scope="col">Password</th>
|
||||
<th scope="col">Mangas</th>
|
||||
<th scope="col"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr th:each="creator: ${creators}">
|
||||
<td th:text="${creator.id}"/>
|
||||
<td th:text="${creator.creatorName}"/>
|
||||
<td th:text="${creator.hashedPassword}"/>
|
||||
<td>
|
||||
<select className="form-select" aria-label="Default select example">
|
||||
<option th:each="manga, iterator: ${creator.mangas}" th:text="${manga.mangaName}"/>
|
||||
</select>
|
||||
</td>
|
||||
<td style="width: 10%">
|
||||
<div class="btn-group" role="group" aria-label="Basic example">
|
||||
<a class="btn btn-warning button-fixed button-sm"
|
||||
th:href="@{/creator/edit/{id}(id=${creator.id})}">
|
||||
<i class="fa fa-pencil" aria-hidden="true"></i> Изменить
|
||||
</a>
|
||||
<button type="button" class="btn btn-danger button-fixed button-sm"
|
||||
th:attr="onclick=|confirm('Удалить запись?') && document.getElementById('remove-${creator.id}').click()|">
|
||||
<i class="fa fa-trash" aria-hidden="true"></i> Удалить
|
||||
</button>
|
||||
</div>
|
||||
<form th:action="@{/creator/delete/{id}(id=${creator.id})}" method="post">
|
||||
<button th:id="'remove-' + ${creator.id}" type="submit" style="display: none">
|
||||
Удалить
|
||||
</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -28,13 +28,9 @@
|
||||
<ul class="navbar-nav" th:with="activeLink=${#request.requestURI}" sec:authorize="isAuthenticated()">
|
||||
<a class="nav-link" href="/"
|
||||
th:classappend="${#strings.equals(activeLink, '/')} ? 'active' : ''">Index</a>
|
||||
<a class="nav-link" href="/creator"
|
||||
th:classappend="${#strings.equals(activeLink, '/creator')} ? 'active' : ''">Creator</a>
|
||||
<a class="nav-link" href="/reader"
|
||||
th:classappend="${#strings.equals(activeLink, '/reader')} ? 'active' : ''">Reader</a>
|
||||
<a class="nav-link" href="/creatorAction"
|
||||
<a class="nav-link" th:href="@{/creatorAction/{login}(login=${#authentication.name})}"
|
||||
th:classappend="${#strings.equals(activeLink, '/creatorAction')} ? 'active' : ''">CreatorAction</a>
|
||||
<a class="nav-link" href="/readerAction"
|
||||
<a class="nav-link" href="/readerAction/"
|
||||
th:classappend="${#strings.equals(activeLink, '/readerAction')} ? 'active' : ''">ReaderAction</a>
|
||||
<a class="nav-link" href="/manga"
|
||||
th:classappend="${#strings.equals(activeLink, '/manga')} ? 'active' : ''">Catalog</a>
|
||||
|
Loading…
Reference in New Issue
Block a user