diff --git a/src/main/java/com/LabWork/app/MangaStore/controller/MangaController.java b/src/main/java/com/LabWork/app/MangaStore/controller/MangaController.java index 58f8724..e29305d 100644 --- a/src/main/java/com/LabWork/app/MangaStore/controller/MangaController.java +++ b/src/main/java/com/LabWork/app/MangaStore/controller/MangaController.java @@ -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}") diff --git a/src/main/java/com/LabWork/app/MangaStore/controller/ReaderController.java b/src/main/java/com/LabWork/app/MangaStore/controller/ReaderController.java index 2d393c3..ba8ad57 100644 --- a/src/main/java/com/LabWork/app/MangaStore/controller/ReaderController.java +++ b/src/main/java/com/LabWork/app/MangaStore/controller/ReaderController.java @@ -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}") diff --git a/src/main/java/com/LabWork/app/MangaStore/service/CreatorService.java b/src/main/java/com/LabWork/app/MangaStore/service/CreatorService.java index 999c20d..2e36d64 100644 --- a/src/main/java/com/LabWork/app/MangaStore/service/CreatorService.java +++ b/src/main/java/com/LabWork/app/MangaStore/service/CreatorService.java @@ -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); + } } diff --git a/src/main/java/com/LabWork/app/MangaStore/service/MangaService.java b/src/main/java/com/LabWork/app/MangaStore/service/MangaService.java index dd4a4de..d9e55a9 100644 --- a/src/main/java/com/LabWork/app/MangaStore/service/MangaService.java +++ b/src/main/java/com/LabWork/app/MangaStore/service/MangaService.java @@ -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 = 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; + } } diff --git a/src/main/java/com/LabWork/app/MangaStore/service/ReaderService.java b/src/main/java/com/LabWork/app/MangaStore/service/ReaderService.java index 753507d..eb221d1 100644 --- a/src/main/java/com/LabWork/app/MangaStore/service/ReaderService.java +++ b/src/main/java/com/LabWork/app/MangaStore/service/ReaderService.java @@ -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 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 = 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; - } } diff --git a/src/test/java/com/LabWork/app/ReMangaTest.java b/src/test/java/com/LabWork/app/ReMangaTest.java index 53aa6b9..50af214 100644 --- a/src/test/java/com/LabWork/app/ReMangaTest.java +++ b/src/test/java/com/LabWork/app/ReMangaTest.java @@ -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());