репозитории используются по минимуму, однако такой код мне нравится меньше

This commit is contained in:
Николай 2023-04-11 01:47:13 +04:00
parent e7fc79a52b
commit 6c6e8f96aa
6 changed files with 99 additions and 109 deletions

View File

@ -4,6 +4,7 @@ package com.LabWork.app.MangaStore.controller;
import com.LabWork.app.MangaStore.model.Dto.MangaReaderDto;
import com.LabWork.app.MangaStore.model.Dto.ReaderMangaDto;
import com.LabWork.app.MangaStore.model.Dto.SupportDto.MangaDto;
import com.LabWork.app.MangaStore.service.CreatorService;
import com.LabWork.app.MangaStore.service.MangaService;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.*;
@ -14,9 +15,11 @@ import java.util.List;
@RequestMapping("/manga")
public class MangaController {
private final MangaService mangaService;
public MangaController(MangaService mangaService) {
private final CreatorService creatorService;
public MangaController(MangaService mangaService,
CreatorService creatorService) {
this.mangaService = mangaService;
this.creatorService = creatorService;
}
@GetMapping("/{id}")
@ -58,7 +61,7 @@ public class MangaController {
@PostMapping
public MangaDto createManga(@RequestBody @Valid MangaDto mangaDto) {
return new MangaDto(mangaService.addManga(mangaDto));
return new MangaDto(creatorService.addManga(mangaDto));
}
@PutMapping("/{id}")

View File

@ -3,6 +3,8 @@ package com.LabWork.app.MangaStore.controller;
import com.LabWork.app.MangaStore.model.Dto.ReaderMangaDto;
import com.LabWork.app.MangaStore.model.Dto.SupportDto.MangaDto;
import com.LabWork.app.MangaStore.service.CreatorService;
import com.LabWork.app.MangaStore.service.MangaService;
import com.LabWork.app.MangaStore.service.ReaderService;
import org.springframework.web.bind.annotation.*;
@ -12,9 +14,12 @@ import java.util.List;
@RequestMapping("/reader")
public class ReaderController {
private final ReaderService readerService;
private final MangaService mangaService;
public ReaderController(ReaderService readerService) {
public ReaderController(ReaderService readerService,
MangaService mangaService) {
this.readerService = readerService;
this.mangaService = mangaService;
}
@GetMapping("/{id}")
@ -45,13 +50,13 @@ public class ReaderController {
@PutMapping("/{id}/addManga")
public MangaDto addManga(@PathVariable Long id,
@RequestParam("mangaId") Long mangaId) {
return new MangaDto(readerService.addManga(mangaId, id));
return new MangaDto(mangaService.addMangaToReader(mangaId, id));
}
@PutMapping("/{id}/removeManga")
public MangaDto removeManga(@PathVariable Long id,
@RequestParam("mangaId") Long mangaId) {
return new MangaDto(readerService.removeManga(mangaId, id));
return new MangaDto(mangaService.removeMangaToReader(mangaId, id));
}
@DeleteMapping("/{id}")

View File

@ -3,6 +3,7 @@ package com.LabWork.app.MangaStore.service;
import com.LabWork.app.MangaStore.model.Default.Creator;
import com.LabWork.app.MangaStore.model.Default.Manga;
import com.LabWork.app.MangaStore.model.Default.Reader;
import com.LabWork.app.MangaStore.model.Dto.SupportDto.MangaDto;
import com.LabWork.app.MangaStore.service.Exception.MangaNotFoundException;
import com.LabWork.app.MangaStore.service.Repository.CreatorRepository;
import com.LabWork.app.MangaStore.service.Exception.CreatorNotFoundException;
@ -18,13 +19,16 @@ import java.util.Optional;
public class CreatorService {
private final CreatorRepository creatorRepository;
private final MangaService mangaService;
private final MangaRepository mangaRepository;
private final ValidatorUtil validatorUtil;
public CreatorService(CreatorRepository creatorRepository,
MangaService mangaService,
ValidatorUtil validatorUtil) {
ValidatorUtil validatorUtil,
MangaRepository mangaRepository) {
this.creatorRepository = creatorRepository;
this.mangaService = mangaService;
this.mangaRepository = mangaRepository;
this.validatorUtil = validatorUtil;
}
@ -70,4 +74,20 @@ public class CreatorService {
public void deleteAllCreators() {
creatorRepository.deleteAll();
}
@Transactional
public Manga addManga(Long creatorId, Integer chapterCount, String mangaName) {
final Creator currentCreator = findCreator(creatorId);
final Manga manga = new Manga(currentCreator, mangaName, chapterCount);
validatorUtil.validate(manga);
return mangaRepository.save(manga);
}
@Transactional
public Manga addManga(MangaDto mangaDto) {
final Creator currentCreator = findCreator(mangaDto.getCreatorId());
final Manga manga = new Manga(currentCreator, mangaDto);
validatorUtil.validate(manga);
return mangaRepository.save(manga);
}
}

View File

@ -17,17 +17,14 @@ import java.util.Optional;
@Service
public class MangaService {
public final MangaRepository mangaRepository;
public final CreatorRepository creatorRepository;
public final ReaderService readerService;
private final ValidatorUtil validatorUtil;
public MangaService(MangaRepository mangaRepository,
CreatorRepository creatorRepository,
ReaderService readerService,
ValidatorUtil validatorUtil) {
this.mangaRepository = mangaRepository;
this.readerService = readerService;
this.creatorRepository = creatorRepository;
this.validatorUtil = validatorUtil;
}
@ -49,28 +46,6 @@ public class MangaService {
return mangaRepository.findAll();
}
@Transactional(readOnly = true)
public Creator findCreator(Long id) {
final Optional<Creator> creator = creatorRepository.findById(id);
return creator.orElseThrow(() -> new CreatorNotFoundException(id));
}
@Transactional
public Manga addManga(Long creatorId, Integer chapterCount, String mangaName) {
final Creator currentCreator = findCreator(creatorId);
final Manga manga = new Manga(currentCreator, mangaName, chapterCount);
validatorUtil.validate(manga);
return mangaRepository.save(manga);
}
@Transactional
public Manga addManga(MangaDto mangaDto) {
final Creator currentCreator = findCreator(mangaDto.getCreatorId());
final Manga manga = new Manga(currentCreator, mangaDto);
validatorUtil.validate(manga);
return mangaRepository.save(manga);
}
@Transactional
public Manga updateManga(Long id, Integer chapterCount) {
final Manga currentManga = findManga(id);
@ -103,4 +78,25 @@ public class MangaService {
public void deleteAllMangas() {
mangaRepository.deleteAll();
}
@Transactional
public Manga addMangaToReader(Long mangaId, Long readerId) {
final Manga manga = findManga(mangaId);
final Reader reader = readerService.findReader(readerId);
validatorUtil.validate(reader);
if (reader.getMangas().contains(manga))
{
return null;
}
reader.getMangas().add(manga);
return manga;
}
@Transactional
public Manga removeMangaToReader(Long mangaId, Long readerId) {
final Reader currentReader = readerService.findReader(readerId);
final Manga currentManga = findManga(mangaId);
currentReader.getMangas().remove(currentManga);
return currentManga;
}
}

View File

@ -16,14 +16,11 @@ import java.util.Optional;
@Service
public class ReaderService {
private final ReaderRepository readerRepository;
private final MangaRepository mangaRepository;
private final ValidatorUtil validatorUtil;
public ReaderService(ReaderRepository readerRepository,
ValidatorUtil validatorUtil,
MangaRepository mangaRepository) {
ValidatorUtil validatorUtil) {
this.readerRepository = readerRepository;
this.mangaRepository = mangaRepository;
this.validatorUtil = validatorUtil;
}
@ -54,10 +51,6 @@ public class ReaderService {
return currentReader;
}
public void addManga(Long readerId, List<Manga> mangas) {
readerRepository.findById(readerId).get().setMangas(mangas);
}
@Transactional
public Reader deleteReader(Long id) {
final Reader currentReader = findReader(id);
@ -70,31 +63,4 @@ public class ReaderService {
public void deleteAllReaders() {
readerRepository.deleteAll();
}
@Transactional(readOnly = true)
public Manga findManga(Long id) {
final Optional<Manga> manga = mangaRepository.findById(id);
return manga.orElseThrow(() -> new MangaNotFoundException(id));
}
@Transactional
public Manga addManga(Long mangaId, Long readerId) {
final Manga manga = findManga(mangaId);
final Reader reader = findReader(readerId);
validatorUtil.validate(reader);
if (reader.getMangas().contains(manga))
{
return null;
}
reader.getMangas().add(manga);
return manga;
}
@Transactional
public Manga removeManga(Long mangaId, Long readerId) {
final Reader currentReader = findReader(readerId);
final Manga currentManga = findManga(mangaId);
currentReader.getMangas().remove(currentManga);
return currentManga;
}
}

View File

@ -32,12 +32,12 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first_C", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = mangaService.addManga(c1.getId(), 10, "Berserk");
Manga m1 = creatorService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = creatorService.addManga(c1.getId(), 10, "Berserk");
Reader r1 = readerService.addReader("first_R", "1");
readerService.addManga(m1.getId(), r1.getId());
readerService.addManga(m2.getId(), r1.getId());
mangaService.addMangaToReader(m1.getId(), r1.getId());
mangaService.addMangaToReader(m2.getId(), r1.getId());
Reader r11 = readerService.findReader(r1.getId());
readerService.deleteReader(r11.getId());
@ -54,13 +54,13 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first_C", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "vagabond");
Manga m1 = creatorService.addManga(c1.getId(), 0, "vagabond");
Reader r1 = readerService.addReader("first_R", "1");
Reader r2 = readerService.addReader("2", "2");
Reader r3 = readerService.addReader("3", "3");
readerService.addManga(m1.getId(), r1.getId());
readerService.addManga(m1.getId(), r2.getId());
mangaService.addMangaToReader(m1.getId(), r1.getId());
mangaService.addMangaToReader(m1.getId(), r2.getId());
log.info(r1.getMangas().toString());
@ -93,9 +93,9 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = mangaService.addManga(c1.getId(), 10, "Berserk");
Manga m3 = mangaService.addManga(c1.getId(), 0, "Manga_3");
Manga m1 = creatorService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = creatorService.addManga(c1.getId(), 10, "Berserk");
Manga m3 = creatorService.addManga(c1.getId(), 0, "Manga_3");
Creator c2 = creatorService.findCreator(c1.getId());
Assertions.assertEquals(3, c2.getMangas().size());
readerService.deleteAllReaders();
@ -187,8 +187,8 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = mangaService.addManga(c1.getId(), 10, "Berserk");
Manga m1 = creatorService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = creatorService.addManga(c1.getId(), 10, "Berserk");
creatorService.deleteCreator(c1.getId());
log.info(mangaService.findAllMangas().toString());
Assertions.assertEquals(0, mangaService.findAllMangas().size());
@ -217,11 +217,11 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = mangaService.addManga(c1.getId(), 10, "Berserk");
Manga m1 = creatorService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = creatorService.addManga(c1.getId(), 10, "Berserk");
Reader r1 = readerService.addReader("1", "1");
readerService.addManga(m1.getId(), r1.getId());
readerService.addManga(m2.getId(), r1.getId());
mangaService.addMangaToReader(m1.getId(), r1.getId());
mangaService.addMangaToReader(m2.getId(), r1.getId());
creatorService.deleteCreator(c1.getId());
log.info(mangaService.findAllMangas().toString());
Assertions.assertEquals(0, mangaService.findAllMangas().size());
@ -236,8 +236,8 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = mangaService.addManga(c1.getId(), 10, "Berserk");
Manga m1 = creatorService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = creatorService.addManga(c1.getId(), 10, "Berserk");
c1 = creatorService.findCreator(c1.getId());
m1 = mangaService.findManga(m1.getId());
log.info(c1.getMangas().toString());
@ -254,7 +254,7 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "Vagabond");
Manga m1 = creatorService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = mangaService.updateManga(m1.getId(), 10);
m2 = mangaService.findManga(m2.getId());
c1 = creatorService.findCreator(c1.getId());
@ -274,12 +274,12 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = mangaService.addManga(c1.getId(), 10, "Berserk");
Manga m1 = creatorService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = creatorService.addManga(c1.getId(), 10, "Berserk");
Reader r1 = readerService.addReader("reader1", "password1");
readerService.addManga(m1.getId(), r1.getId());
readerService.addManga(m2.getId(), r1.getId());
mangaService.addMangaToReader(m1.getId(), r1.getId());
mangaService.addMangaToReader(m2.getId(), r1.getId());
mangaService.deleteManga(m1.getId());
r1 = readerService.findReader(r1.getId());
@ -299,8 +299,8 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = mangaService.addManga(c1.getId(), 10, "Berserk");
Manga m1 = creatorService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = creatorService.addManga(c1.getId(), 10, "Berserk");
mangaService.deleteAllMangas();
Assertions.assertEquals(0, mangaService.findAllMangas().size());
readerService.deleteAllReaders();
@ -314,12 +314,12 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first_C", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "vagabond");
Manga m2 = mangaService.addManga(c1.getId(), 10, "Berserk");
Manga m1 = creatorService.addManga(c1.getId(), 0, "vagabond");
Manga m2 = creatorService.addManga(c1.getId(), 10, "Berserk");
Reader r1 = readerService.addReader("first_R", "1");
readerService.addManga(m1.getId(), r1.getId());
readerService.addManga(m2.getId(), r1.getId());
mangaService.addMangaToReader(m1.getId(), r1.getId());
mangaService.addMangaToReader(m2.getId(), r1.getId());
log.info(r1.getMangas().toString());
@ -358,15 +358,15 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first_C", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = mangaService.addManga(c1.getId(), 10, "Berserk");
Manga m1 = creatorService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = creatorService.addManga(c1.getId(), 10, "Berserk");
Reader r1 = readerService.addReader("first_R", "1");
readerService.addManga(m1.getId(), r1.getId());
readerService.addManga(m2.getId(), r1.getId());
mangaService.addMangaToReader(m1.getId(), r1.getId());
mangaService.addMangaToReader(m2.getId(), r1.getId());
Reader r11 = readerService.findReader(r1.getId());
readerService.removeManga(m1.getId(), r11.getId());
mangaService.removeMangaToReader(m1.getId(), r11.getId());
Reader r12 = readerService.findReader(r11.getId());
Manga m11 = mangaService.findManga(m1.getId());
@ -384,13 +384,13 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first_C", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = mangaService.addManga(c1.getId(), 10, "Berserk");
Manga m1 = creatorService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = creatorService.addManga(c1.getId(), 10, "Berserk");
Reader r1 = readerService.addReader("first_R", "1");
Reader r2 = readerService.addReader("2_R", "2");
readerService.addManga(m1.getId(), r1.getId());
readerService.addManga(m2.getId(), r1.getId());
mangaService.addMangaToReader(m1.getId(), r1.getId());
mangaService.addMangaToReader(m2.getId(), r1.getId());
Reader r11 = readerService.findReader(r1.getId());
readerService.deleteReader(r11.getId());
@ -410,12 +410,12 @@ public class ReMangaTest {
mangaService.deleteAllMangas();
creatorService.deleteAllCreators();
Creator c1 = creatorService.addCreator("first_C", "1");
Manga m1 = mangaService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = mangaService.addManga(c1.getId(), 10, "Berserk");
Manga m1 = creatorService.addManga(c1.getId(), 0, "Vagabond");
Manga m2 = creatorService.addManga(c1.getId(), 10, "Berserk");
Reader r1 = readerService.addReader("first_R", "1");
readerService.addManga(m1.getId(), r1.getId());
readerService.addManga(m2.getId(), r1.getId());
mangaService.addMangaToReader(m1.getId(), r1.getId());
mangaService.addMangaToReader(m2.getId(), r1.getId());
Reader r11 = readerService.updateReader(r1.getId(), "reader", "password");
r11 = readerService.findReader(r11.getId());