From 982eaa2916ea4046fda73cc32fa67278b293ae8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9D=D0=B8=D0=BA=D0=BE=D0=BB=D0=B0=D0=B9?= Date: Wed, 19 Apr 2023 03:42:32 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=20=D1=81=D0=B8=D1=85=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=80=20=D0=BD=D0=B5=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D0=BE=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=84=D0=BE=D1=82=D0=BE.=20=D0=94=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B7=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=20=D1=83=20?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=8F=20=D0=BD=D0=B5=D0=B3=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D0=B2=D0=BD=D1=8B=D0=B5=20=D1=8D=D0=BC=D0=BE=D1=86=D0=B8=D0=B8?= =?UTF-8?q?.=20=D0=BD=D0=B0=D0=B4=D0=B5=D1=8E=D1=81=D1=8C=20=D1=8F=20?= =?UTF-8?q?=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B5=20=D0=BD=D0=B8=D0=BA=D0=BE?= =?UTF-8?q?=D0=B3=D0=B4=D0=B0=20=D1=81=20=D1=82=D0=B0=D0=BA=D0=B8=D0=BC=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D1=81=D1=82=D0=BE=D0=BB=D0=BA=D0=BD=D1=83=D1=81?= =?UTF-8?q?=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + front/index.html | 2 +- front/src/Main/Catalog.jsx | 2 +- front/src/Main/CreatorAction.jsx | 2 +- front/src/Main/MangaPage.jsx | 2 +- front/src/Main/ReaderAction.jsx | 2 +- front/src/MainS/Creator.jsx | 2 +- front/src/MainS/Manga.jsx | 2 +- front/src/MainS/Reader.jsx | 2 +- settings.gradle | 1 + .../CreatorActionMvcController.java | 87 +++++++++++++++++++ .../controller/CreatorController.java | 4 +- .../app/MangaStore/model/Default/Manga.java | 5 +- .../model/Dto/SupportDto/MangaDto.java | 13 +++ .../model/Dto/SupportDto/ReaderDto.java | 8 ++ .../app/MangaStore/service/MangaService.java | 7 +- src/main/resources/application.properties | 2 +- src/main/resources/public/favicon.svg | 41 ++++++++- .../templates/creatorAction-edit.html | 36 ++++++++ .../resources/templates/creatorAction.html | 83 ++++++++++++++++++ src/main/resources/templates/default.html | 10 +-- .../java/com/LabWork/app/ReMangaTest.java | 52 +++++------ 22 files changed, 314 insertions(+), 52 deletions(-) create mode 100644 src/main/java/com/LabWork/app/MangaStore/controller/CreatorActionMvcController.java create mode 100644 src/main/resources/templates/creatorAction-edit.html create mode 100644 src/main/resources/templates/creatorAction.html diff --git a/build.gradle b/build.gradle index ae49364..24b5599 100644 --- a/build.gradle +++ b/build.gradle @@ -15,6 +15,7 @@ jar { enabled = false } dependencies { + implementation(project(':front')) implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-devtools' diff --git a/front/index.html b/front/index.html index 8074465..aa2d814 100644 --- a/front/index.html +++ b/front/index.html @@ -10,7 +10,7 @@ ReManga -
+
diff --git a/front/src/Main/Catalog.jsx b/front/src/Main/Catalog.jsx index 7d30052..2d4efc2 100644 --- a/front/src/Main/Catalog.jsx +++ b/front/src/Main/Catalog.jsx @@ -6,7 +6,7 @@ import MangaDto from "../Dto/Manga-Dto"; export default function Catalog() { - const host = "http://localhost:8080"; + const host = "http://localhost:8080/api"; const [mangs, setMangs] = useState([]); diff --git a/front/src/Main/CreatorAction.jsx b/front/src/Main/CreatorAction.jsx index a861aa9..b51b3f9 100644 --- a/front/src/Main/CreatorAction.jsx +++ b/front/src/Main/CreatorAction.jsx @@ -8,7 +8,7 @@ import EditMangaModal from "../components/Modal/EditMangaModal"; export default function CreatorAction() { - const host = "http://localhost:8080"; + const host = "http://localhost:8080/api"; const [creatorData, setCreatorData] = useState([]); diff --git a/front/src/Main/MangaPage.jsx b/front/src/Main/MangaPage.jsx index 8e29062..7c41ab8 100644 --- a/front/src/Main/MangaPage.jsx +++ b/front/src/Main/MangaPage.jsx @@ -8,7 +8,7 @@ export default function MangaPage() { const [readerData, setReaderData] = useState([]); - const host = "http://localhost:8080"; + const host = "http://localhost:8080/api"; useEffect(() => { const quryString = window.location.search; diff --git a/front/src/Main/ReaderAction.jsx b/front/src/Main/ReaderAction.jsx index 09427fc..2c0bb39 100644 --- a/front/src/Main/ReaderAction.jsx +++ b/front/src/Main/ReaderAction.jsx @@ -6,7 +6,7 @@ import AddMangaReaderModal from "../components/Modal/AddMangaReaderModal"; export default function ReaderAction() { - const host = "http://localhost:8080"; + const host = "http://localhost:8080/api"; const [mangaData, setMangaData] = useState([]); diff --git a/front/src/MainS/Creator.jsx b/front/src/MainS/Creator.jsx index 3fade27..dad9cb8 100644 --- a/front/src/MainS/Creator.jsx +++ b/front/src/MainS/Creator.jsx @@ -4,7 +4,7 @@ import MangaDto from '../Dto/Manga-Dto'; export default function Creator() { - const host = "http://localhost:8080"; + const host = "http://localhost:8080/api"; const [creatorId, setCreatorId] = useState(0); diff --git a/front/src/MainS/Manga.jsx b/front/src/MainS/Manga.jsx index a8684b0..1c010dc 100644 --- a/front/src/MainS/Manga.jsx +++ b/front/src/MainS/Manga.jsx @@ -3,7 +3,7 @@ import TableManga from '../components/Table/TableManga'; export default function Manga() { - const host = "http://localhost:8080"; + const host = "http://localhost:8080/api"; const [creatorId, setCreatorId] = useState(0); diff --git a/front/src/MainS/Reader.jsx b/front/src/MainS/Reader.jsx index 96df9fb..cef7947 100644 --- a/front/src/MainS/Reader.jsx +++ b/front/src/MainS/Reader.jsx @@ -5,7 +5,7 @@ import EditReaderForm from "../components/Form/EditReaderForm"; export default function ReaderS() { - const host = "http://localhost:8080"; + const host = "http://localhost:8080/api"; const [readerId, setReaderId] = useState(0); diff --git a/settings.gradle b/settings.gradle index 0cdaa80..0eaa5e2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,2 @@ rootProject.name = 'app' +include 'front' diff --git a/src/main/java/com/LabWork/app/MangaStore/controller/CreatorActionMvcController.java b/src/main/java/com/LabWork/app/MangaStore/controller/CreatorActionMvcController.java new file mode 100644 index 0000000..4fcc1cc --- /dev/null +++ b/src/main/java/com/LabWork/app/MangaStore/controller/CreatorActionMvcController.java @@ -0,0 +1,87 @@ +package com.LabWork.app.MangaStore.controller; + +import com.LabWork.app.MangaStore.model.Dto.CreatorMangaDto; +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.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.util.StringUtils; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +@Controller +@RequestMapping("/creatorAction") +public class CreatorActionMvcController { + private final CreatorService creatorService; + private static final Logger log = LoggerFactory.getLogger(CreatorActionMvcController.class); + private final MangaService mangaService; + + public CreatorActionMvcController(CreatorService creatorService, MangaService mangaService) { + this.creatorService = creatorService; + this.mangaService = mangaService; + } + + @GetMapping + public String getCreators(Model model) { + model.addAttribute("creators", + creatorService.findAllCreators().stream() + .map(CreatorMangaDto::new) + .toList()); + model.addAttribute("creatorId", 0); + return "creatorAction"; + } + + @GetMapping("/{id}") + public String getCreator(@PathVariable Long id, Model model) { + model.addAttribute("creator", new CreatorMangaDto(creatorService.findCreator(id))); + return "creatorAction"; + } + + @GetMapping("/edit/{id}") + public String editManga(@PathVariable(required = false) Long id, Model model) { + model.addAttribute("mangaId", id); + model.addAttribute("MangaDto", new MangaDto(mangaService.findManga(id))); + return "creatorAction-edit"; + } + + @GetMapping("/create/{id}") + public String createManga(@PathVariable(required = false) Long id, Model model) { + model.addAttribute("creatorId", id); + model.addAttribute("MangaDto", new MangaDto()); + return "creatorAction-edit"; + } + + @PostMapping(value = {"/{creatorId}/manga/", "/{creatorId}/manga/{mangaId}"}) + public String saveManga(@PathVariable Long creatorId, @PathVariable(value = "mangaId", required = false) Long mangaId, @RequestParam("image") MultipartFile multipartFile, + @ModelAttribute @Valid MangaDto MangaDto, + BindingResult bindingResult, + Model model) throws IOException { +/* if (bindingResult.hasErrors()) { + model.addAttribute("errors", bindingResult.getAllErrors()); + return "creatorAction-edit"; + }*/ + String fileName = StringUtils.cleanPath(multipartFile.getOriginalFilename()); + MangaDto.setImage(new String(multipartFile.getBytes())); + log.info(MangaDto.getMangaName()); + MangaDto.setCreatorId(creatorId); + if (mangaId == null || mangaId <= 0) { + mangaService.addManga(MangaDto); + } else { + mangaService.updateManga(mangaId, MangaDto.getChapterCount(), MangaDto.getImage()); + } + return "redirect:/creatorAction/1"; + } + + @PostMapping("/delete/{id}") + public String deleteCreator(@PathVariable Long id) { + mangaService.deleteManga(id); + return "redirect:/creatorAction/1"; + } +} diff --git a/src/main/java/com/LabWork/app/MangaStore/controller/CreatorController.java b/src/main/java/com/LabWork/app/MangaStore/controller/CreatorController.java index 2aa5371..3858449 100644 --- a/src/main/java/com/LabWork/app/MangaStore/controller/CreatorController.java +++ b/src/main/java/com/LabWork/app/MangaStore/controller/CreatorController.java @@ -21,12 +21,12 @@ public class CreatorController { return new CreatorMangaDto(creatorService.findCreator(id)); } -/* @GetMapping + @GetMapping public List getCreators() { return creatorService.findAllCreators().stream() .map(CreatorMangaDto::new) .toList(); - }*/ + } @PostMapping public CreatorMangaDto createCreator(@RequestParam("creatorName") String creatorName, diff --git a/src/main/java/com/LabWork/app/MangaStore/model/Default/Manga.java b/src/main/java/com/LabWork/app/MangaStore/model/Default/Manga.java index 44a4dd6..34807fc 100644 --- a/src/main/java/com/LabWork/app/MangaStore/model/Default/Manga.java +++ b/src/main/java/com/LabWork/app/MangaStore/model/Default/Manga.java @@ -32,12 +32,11 @@ public class Manga { public Manga() { } - public Manga(Creator creator, String mangaName, Integer chapterCount) { + public Manga(Creator creator, String mangaName, Integer chapterCount, String image) { this.creator = creator; - this.creatorId = creatorId; this.mangaName = mangaName; this.chapterCount = chapterCount; - this.image = image; + this.image = image.getBytes(); } public Manga(Creator creator, MangaDto mangaDto) { diff --git a/src/main/java/com/LabWork/app/MangaStore/model/Dto/SupportDto/MangaDto.java b/src/main/java/com/LabWork/app/MangaStore/model/Dto/SupportDto/MangaDto.java index 929b201..11cce14 100644 --- a/src/main/java/com/LabWork/app/MangaStore/model/Dto/SupportDto/MangaDto.java +++ b/src/main/java/com/LabWork/app/MangaStore/model/Dto/SupportDto/MangaDto.java @@ -44,4 +44,17 @@ public class MangaDto { return image; } + public void setrMangaName(String mangaName) { + this.mangaName = mangaName; + } + + public void setChapterCount(Integer chapterCount) { + this.chapterCount = chapterCount; + } + + public void setCreatorId(Long creatorId) { + this.creatorId = creatorId; + } + + public void setImage(String image) {this.image = image;} } diff --git a/src/main/java/com/LabWork/app/MangaStore/model/Dto/SupportDto/ReaderDto.java b/src/main/java/com/LabWork/app/MangaStore/model/Dto/SupportDto/ReaderDto.java index 1e9539e..cb29868 100644 --- a/src/main/java/com/LabWork/app/MangaStore/model/Dto/SupportDto/ReaderDto.java +++ b/src/main/java/com/LabWork/app/MangaStore/model/Dto/SupportDto/ReaderDto.java @@ -24,4 +24,12 @@ public class ReaderDto { public String getReaderName() { return readerName; } public String getHashedPassword() { return hashedPassword; } + + public void setrRaderName(String readerName) { + this.readerName = readerName; + } + + public void setHashedPassword(String hashedPassword) { + this.hashedPassword = hashedPassword; + } } 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..f2d5d87 100644 --- a/src/main/java/com/LabWork/app/MangaStore/service/MangaService.java +++ b/src/main/java/com/LabWork/app/MangaStore/service/MangaService.java @@ -56,9 +56,9 @@ public class MangaService { } @Transactional - public Manga addManga(Long creatorId, Integer chapterCount, String mangaName) { + public Manga addManga(Long creatorId, Integer chapterCount, String mangaName, String Image) { final Creator currentCreator = findCreator(creatorId); - final Manga manga = new Manga(currentCreator, mangaName, chapterCount); + final Manga manga = new Manga(currentCreator, mangaName, chapterCount, Image); validatorUtil.validate(manga); return mangaRepository.save(manga); } @@ -72,9 +72,10 @@ public class MangaService { } @Transactional - public Manga updateManga(Long id, Integer chapterCount) { + public Manga updateManga(Long id, Integer chapterCount, String Image) { final Manga currentManga = findManga(id); currentManga.setChapterCount(chapterCount); + currentManga.setImage(Image.getBytes()); validatorUtil.validate(currentManga); return currentManga; } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index eb910e4..e06079d 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,5 +1,5 @@ spring.main.banner-mode=off -server.port=8079 +server.port=8080 spring.datasource.url=jdbc:h2:file:./data spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa diff --git a/src/main/resources/public/favicon.svg b/src/main/resources/public/favicon.svg index c2e8ab2..b525425 100644 --- a/src/main/resources/public/favicon.svg +++ b/src/main/resources/public/favicon.svg @@ -1,4 +1,37 @@ - - - \ No newline at end of file + + + + +Created by potrace 1.15, written by Peter Selinger 2001-2017 + + + + + + diff --git a/src/main/resources/templates/creatorAction-edit.html b/src/main/resources/templates/creatorAction-edit.html new file mode 100644 index 0000000..d91d98d --- /dev/null +++ b/src/main/resources/templates/creatorAction-edit.html @@ -0,0 +1,36 @@ + + + + + +
+
+
+
+ + +
+
+ + +
+
+ + + +
+
+ + + Назад + +
+
+
+ + \ No newline at end of file diff --git a/src/main/resources/templates/creatorAction.html b/src/main/resources/templates/creatorAction.html new file mode 100644 index 0000000..3fa042f --- /dev/null +++ b/src/main/resources/templates/creatorAction.html @@ -0,0 +1,83 @@ + + + + + +
+
+

Creator

+
+ +
+
+
+
+ +
+
+
+

Название манги:

+

+ Количество глав: + +

+
+
+ + + + + + + +
+ +
+ +
+
+
+
+
+
+ + + \ No newline at end of file diff --git a/src/main/resources/templates/default.html b/src/main/resources/templates/default.html index 7940c84..b95cd07 100644 --- a/src/main/resources/templates/default.html +++ b/src/main/resources/templates/default.html @@ -4,10 +4,10 @@ xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> - IP Example + ReManga - + @@ -16,8 +16,8 @@