From 38b0f46f7f45c52b5a6bbe15134bf0291bc46c3b Mon Sep 17 00:00:00 2001 From: Guams Date: Mon, 9 Dec 2024 22:36:30 +0100 Subject: [PATCH] =?UTF-8?q?les=20publications=20marchent,=20plus=20qu'?= =?UTF-8?q?=C3=A0=20faire=20l'authent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/controller/AuthorController.java | 14 ++++++++++- .../review/controller/PostController.java | 2 +- .../guams/review/model/AuthorRepository.java | 24 +++++++++++++++++++ .../guams/review/model/PostRepository.java | 19 +++++++++++++++ .../review/{modele => model}/dao/Author.java | 2 +- .../review/{modele => model}/dao/Post.java | 2 +- .../guams/review/modele/AuthorRepository.java | 14 ----------- .../guams/review/modele/PostRepository.java | 12 ---------- .../guams/review/service/AuthorService.java | 22 +++++++++++++++-- .../com/guams/review/service/PostService.java | 5 ++-- .../guams/review/service/mapper/Mapper.java | 2 +- 11 files changed, 82 insertions(+), 36 deletions(-) create mode 100644 src/main/java/com/guams/review/model/AuthorRepository.java create mode 100644 src/main/java/com/guams/review/model/PostRepository.java rename src/main/java/com/guams/review/{modele => model}/dao/Author.java (93%) rename src/main/java/com/guams/review/{modele => model}/dao/Post.java (94%) delete mode 100644 src/main/java/com/guams/review/modele/AuthorRepository.java delete mode 100644 src/main/java/com/guams/review/modele/PostRepository.java diff --git a/src/main/java/com/guams/review/controller/AuthorController.java b/src/main/java/com/guams/review/controller/AuthorController.java index b20da7b..b8711b4 100644 --- a/src/main/java/com/guams/review/controller/AuthorController.java +++ b/src/main/java/com/guams/review/controller/AuthorController.java @@ -1,7 +1,8 @@ package com.guams.review.controller; import com.guams.review.exception.NotFoundException; -import com.guams.review.modele.dao.Author; +import com.guams.review.model.dao.Author; +import com.guams.review.model.dao.Post; import com.guams.review.service.AuthorService; import com.guams.review.service.mapper.Mapper; import com.guams.review.service.mapper.ReturnableAuthor; @@ -58,4 +59,15 @@ public class AuthorController { authorService.delete(authorToDelete); } + @PutMapping("/{id}/posts") + public void updateUserPosts(@PathVariable("id") UUID authorId, @RequestBody List postIds) { + Author author = authorService.findById(authorId).orElseThrow(() -> new NotFoundException("Author not found")); + authorService.insertPublications(author.getId(), postIds); + } + + @GetMapping("/{id}/posts") + public List getUserPosts(@PathVariable UUID id) { + Author author = authorService.findById(id).orElseThrow(() -> new NotFoundException("Author not found")); + return authorService.listPublicationOfAuthor(author.getId()); + } } diff --git a/src/main/java/com/guams/review/controller/PostController.java b/src/main/java/com/guams/review/controller/PostController.java index 9982f4f..a1499f7 100644 --- a/src/main/java/com/guams/review/controller/PostController.java +++ b/src/main/java/com/guams/review/controller/PostController.java @@ -1,7 +1,7 @@ package com.guams.review.controller; import com.guams.review.exception.NotFoundException; -import com.guams.review.modele.dao.Post; +import com.guams.review.model.dao.Post; import com.guams.review.service.PostService; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; diff --git a/src/main/java/com/guams/review/model/AuthorRepository.java b/src/main/java/com/guams/review/model/AuthorRepository.java new file mode 100644 index 0000000..feac87f --- /dev/null +++ b/src/main/java/com/guams/review/model/AuthorRepository.java @@ -0,0 +1,24 @@ +package com.guams.review.model; + +import com.guams.review.model.dao.Author; +import org.springframework.data.jdbc.repository.query.Modifying; +import org.springframework.data.jdbc.repository.query.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.UUID; + +@Repository +public interface AuthorRepository extends CrudRepository { + + @Modifying + @Query("insert into publication (author_fk, post_fk) values (:authorId, :postId)") + void insertPublication(UUID authorId, Long postId); + + @Modifying + @Query("delete from publication where author_fk=:authorId and post_fk=:postId") + void deletePublication(UUID authorId, Long postId); + + List findAll(); +} diff --git a/src/main/java/com/guams/review/model/PostRepository.java b/src/main/java/com/guams/review/model/PostRepository.java new file mode 100644 index 0000000..1d79211 --- /dev/null +++ b/src/main/java/com/guams/review/model/PostRepository.java @@ -0,0 +1,19 @@ +package com.guams.review.model; + +import com.guams.review.model.dao.Post; +import org.springframework.data.jdbc.repository.query.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.UUID; + +@Repository +public interface PostRepository extends CrudRepository { + + @Query("select id, description, illustration, title, body, category, publication_date " + + "from post join publication on post.id=publication.post_fk where publication.author_fk=:authorId") + List findPostsOfAuthor(UUID authorId); + + List findAll(); +} diff --git a/src/main/java/com/guams/review/modele/dao/Author.java b/src/main/java/com/guams/review/model/dao/Author.java similarity index 93% rename from src/main/java/com/guams/review/modele/dao/Author.java rename to src/main/java/com/guams/review/model/dao/Author.java index 82d9a2e..9ea00ce 100644 --- a/src/main/java/com/guams/review/modele/dao/Author.java +++ b/src/main/java/com/guams/review/model/dao/Author.java @@ -1,4 +1,4 @@ -package com.guams.review.modele.dao; +package com.guams.review.model.dao; import lombok.Getter; diff --git a/src/main/java/com/guams/review/modele/dao/Post.java b/src/main/java/com/guams/review/model/dao/Post.java similarity index 94% rename from src/main/java/com/guams/review/modele/dao/Post.java rename to src/main/java/com/guams/review/model/dao/Post.java index ed7d8a8..58a6e2d 100644 --- a/src/main/java/com/guams/review/modele/dao/Post.java +++ b/src/main/java/com/guams/review/model/dao/Post.java @@ -1,4 +1,4 @@ -package com.guams.review.modele.dao; +package com.guams.review.model.dao; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/guams/review/modele/AuthorRepository.java b/src/main/java/com/guams/review/modele/AuthorRepository.java deleted file mode 100644 index dc60777..0000000 --- a/src/main/java/com/guams/review/modele/AuthorRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.guams.review.modele; - -import com.guams.review.modele.dao.Author; -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -import java.util.List; -import java.util.UUID; - -@Repository -public interface AuthorRepository extends CrudRepository { - - List findAll(); -} diff --git a/src/main/java/com/guams/review/modele/PostRepository.java b/src/main/java/com/guams/review/modele/PostRepository.java deleted file mode 100644 index 491693c..0000000 --- a/src/main/java/com/guams/review/modele/PostRepository.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.guams.review.modele; - -import com.guams.review.modele.dao.Post; -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -import java.util.List; - -@Repository -public interface PostRepository extends CrudRepository { - List findAll(); -} diff --git a/src/main/java/com/guams/review/service/AuthorService.java b/src/main/java/com/guams/review/service/AuthorService.java index 0d728a8..bf1e8b9 100644 --- a/src/main/java/com/guams/review/service/AuthorService.java +++ b/src/main/java/com/guams/review/service/AuthorService.java @@ -1,11 +1,14 @@ package com.guams.review.service; -import com.guams.review.modele.AuthorRepository; -import com.guams.review.modele.dao.Author; +import com.guams.review.model.AuthorRepository; +import com.guams.review.model.PostRepository; +import com.guams.review.model.dao.Author; +import com.guams.review.model.dao.Post; import com.guams.review.service.mapper.Mapper; import com.guams.review.service.mapper.ReturnableAuthor; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Optional; @@ -17,6 +20,7 @@ public class AuthorService { private final Mapper mapper; private final AuthorRepository authorRepository; + private final PostRepository postRepository; public List list() { return authorRepository.findAll().stream() @@ -24,6 +28,10 @@ public class AuthorService .toList(); } + public List listPublicationOfAuthor(UUID authorId) { + return postRepository.findPostsOfAuthor(authorId); + } + public Optional findById(UUID id) { return authorRepository.findById(id); } @@ -32,6 +40,16 @@ public class AuthorService return mapper.mapAuthor(authorRepository.save(author)); } + @Transactional + public void insertPublications(UUID authorId, List postIds) { + for (Long postId : postIds) { + authorRepository.deletePublication(authorId, postId); + if (postRepository.findById(postId).isPresent()) { + authorRepository.insertPublication(authorId, postId); + } + } + } + public void delete(Author author) { authorRepository.delete(author); } diff --git a/src/main/java/com/guams/review/service/PostService.java b/src/main/java/com/guams/review/service/PostService.java index 92c5b9c..f0bb60b 100644 --- a/src/main/java/com/guams/review/service/PostService.java +++ b/src/main/java/com/guams/review/service/PostService.java @@ -1,9 +1,8 @@ package com.guams.review.service; -import com.guams.review.exception.NotFoundException; -import com.guams.review.modele.dao.Post; -import com.guams.review.modele.PostRepository; +import com.guams.review.model.dao.Post; +import com.guams.review.model.PostRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; diff --git a/src/main/java/com/guams/review/service/mapper/Mapper.java b/src/main/java/com/guams/review/service/mapper/Mapper.java index 6c0edf1..4fb0c1a 100644 --- a/src/main/java/com/guams/review/service/mapper/Mapper.java +++ b/src/main/java/com/guams/review/service/mapper/Mapper.java @@ -1,6 +1,6 @@ package com.guams.review.service.mapper; -import com.guams.review.modele.dao.Author; +import com.guams.review.model.dao.Author; import org.springframework.stereotype.Component; @Component