diff --git a/src/main/java/com/example/demo/models/BlogPost.java b/src/main/java/com/example/demo/models/BlogPost.java index 0a3190aec..9c2c736d1 100644 --- a/src/main/java/com/example/demo/models/BlogPost.java +++ b/src/main/java/com/example/demo/models/BlogPost.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import javax.persistence.*; +import java.util.List; @Entity public class BlogPost { @@ -18,16 +19,19 @@ public class BlogPost { @ManyToOne(cascade = CascadeType.ALL) @JsonIgnore private User user; + @ManyToMany(cascade = CascadeType.ALL) + private List tags; public BlogPost() { } - public BlogPost(Long id, String title, String imageUrl, Recipe recipe, User user) { + public BlogPost(Long id, String title, String imageUrl, Recipe recipe, User user, List tags) { this.id = id; this.title = title; this.imageUrl = imageUrl; this.recipe = recipe; this.user = user; + this.tags = tags; } public Long getId() { @@ -61,4 +65,12 @@ public void setImageUrl(String imageUrl) { public User getUser() { return user; } public void setUser(User user) { this.user = user; } + + public List getTags() { + return tags; + } + + public void setTags(List tags) { + this.tags = tags; + } } diff --git a/src/main/java/com/example/demo/models/Recipe.java b/src/main/java/com/example/demo/models/Recipe.java index 13dc5187d..96cd3acb9 100644 --- a/src/main/java/com/example/demo/models/Recipe.java +++ b/src/main/java/com/example/demo/models/Recipe.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import javax.persistence.*; +import java.util.List; @Entity public class Recipe { @@ -63,4 +64,5 @@ public void setInstructions(String instructions) { public BlogPost getBlogPost() { return blogPost; } public void setBlogPost(BlogPost blogPost) { this.blogPost = blogPost; } + } diff --git a/src/main/java/com/example/demo/models/Tag.java b/src/main/java/com/example/demo/models/Tag.java index ffb6c278e..1c1adcc3d 100644 --- a/src/main/java/com/example/demo/models/Tag.java +++ b/src/main/java/com/example/demo/models/Tag.java @@ -1,9 +1,7 @@ package com.example.demo.models; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import javax.persistence.*; +import java.util.List; @Entity public class Tag { @@ -11,13 +9,16 @@ public class Tag { @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; String name; + @ManyToMany(cascade = CascadeType.ALL) + List blogPosts; public Tag() { } - public Tag(Long id, String name) { + public Tag(Long id, String name, List blogPosts) { this.id = id; this.name = name; + this.blogPosts = blogPosts; } public Long getId() { @@ -35,6 +36,10 @@ public String getName() { public void setName(String name) { this.name = name; } + + public List getBlogPosts() { return blogPosts; } + + public void setBlogPosts(List blogPosts) { this.blogPosts = blogPosts; } } diff --git a/src/main/java/com/example/demo/repository/BlogPostRepository.java b/src/main/java/com/example/demo/repository/BlogPostRepository.java index 3f64ea582..758641077 100644 --- a/src/main/java/com/example/demo/repository/BlogPostRepository.java +++ b/src/main/java/com/example/demo/repository/BlogPostRepository.java @@ -1,6 +1,7 @@ package com.example.demo.repository; import com.example.demo.models.BlogPost; +import com.example.demo.models.Tag; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; @@ -13,4 +14,7 @@ public interface BlogPostRepository extends CrudRepository { @Query(value = "SELECT * FROM blog_post b WHERE b.user_id = :userId", nativeQuery = true) List findByUser(@Param("userId") Long userId); + + @Query(value = "SELECT * FROM blog_post WHERE tag_id = :tagId", nativeQuery = true) + List findByTag(@Param("tagId") Long tagId); } diff --git a/src/main/java/com/example/demo/repository/TagRepository.java b/src/main/java/com/example/demo/repository/TagRepository.java index a523dd6e8..bf5017027 100644 --- a/src/main/java/com/example/demo/repository/TagRepository.java +++ b/src/main/java/com/example/demo/repository/TagRepository.java @@ -1,9 +1,18 @@ package com.example.demo.repository; +import com.example.demo.models.BlogPost; +import com.example.demo.models.Recipe; import com.example.demo.models.Tag; +import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository public interface TagRepository extends CrudRepository { + + @Query(value = "SELECT * FROM tag WHERE tag.blog_post_id = :postId", nativeQuery = true) + List findByBlogPost(@Param("postId") Long blogPostId); } diff --git a/src/main/java/com/example/demo/service/BlogPostService.java b/src/main/java/com/example/demo/service/BlogPostService.java index 99fb80535..8ce76fc3f 100644 --- a/src/main/java/com/example/demo/service/BlogPostService.java +++ b/src/main/java/com/example/demo/service/BlogPostService.java @@ -1,7 +1,9 @@ package com.example.demo.service; import com.example.demo.models.BlogPost; +import com.example.demo.models.User; import com.example.demo.repository.BlogPostRepository; +import com.example.demo.repository.TagRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -12,15 +14,24 @@ public class BlogPostService { @Autowired BlogPostRepository repository; + @Autowired + TagRepository tagRepository; public BlogPost create(BlogPost blogPost){return repository.save(blogPost);} - public BlogPost read(Long id){ return repository.findById(id).get();} + public BlogPost read(Long id){ + BlogPost blogPost = repository.findById(id).get(); + blogPost.setTags(tagRepository.findByBlogPost(id)); + return blogPost; + } public List readAll(){ Iterable blogPostsIterable = repository.findAll(); List result = new ArrayList<>(); blogPostsIterable.forEach(result::add); + for(BlogPost blogPost : result) { + blogPost.setTags(tagRepository.findByBlogPost(blogPost.getId())); + } return result; } diff --git a/src/main/java/com/example/demo/service/TagService.java b/src/main/java/com/example/demo/service/TagService.java index dd611efbf..e81a6a0a6 100644 --- a/src/main/java/com/example/demo/service/TagService.java +++ b/src/main/java/com/example/demo/service/TagService.java @@ -1,6 +1,8 @@ package com.example.demo.service; +import com.example.demo.models.BlogPost; import com.example.demo.models.Tag; +import com.example.demo.repository.BlogPostRepository; import com.example.demo.repository.TagRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -12,15 +14,24 @@ public class TagService { @Autowired private TagRepository repository; + @Autowired + private BlogPostRepository blogPostRepository; public Tag create(Tag tag){ return repository.save(tag); } - public Tag read(Long id){ return repository.findById(id).get(); } + public Tag read(Long id){ + Tag tag = repository.findById(id).get(); + tag.setBlogPosts(blogPostRepository.findByTag(id)); + return tag; + } public List readAll(){ Iterable tagIterable = repository.findAll(); List result = new ArrayList<>(); tagIterable.forEach(result::add); + for(Tag tag : result) { + tag.setBlogPosts(blogPostRepository.findByTag(tag.getId())); + } return result; } diff --git a/target/classes/com/example/demo/models/BlogPost.class b/target/classes/com/example/demo/models/BlogPost.class index 984807a0a..bc386c794 100644 Binary files a/target/classes/com/example/demo/models/BlogPost.class and b/target/classes/com/example/demo/models/BlogPost.class differ diff --git a/target/classes/com/example/demo/models/Recipe.class b/target/classes/com/example/demo/models/Recipe.class index 4dc23e441..92c49a6dd 100644 Binary files a/target/classes/com/example/demo/models/Recipe.class and b/target/classes/com/example/demo/models/Recipe.class differ diff --git a/target/classes/com/example/demo/models/Tag.class b/target/classes/com/example/demo/models/Tag.class index b4ba8298d..28b81151a 100644 Binary files a/target/classes/com/example/demo/models/Tag.class and b/target/classes/com/example/demo/models/Tag.class differ diff --git a/target/classes/com/example/demo/repository/BlogPostRepository.class b/target/classes/com/example/demo/repository/BlogPostRepository.class index e99dc3a2b..da0b8e2c2 100644 Binary files a/target/classes/com/example/demo/repository/BlogPostRepository.class and b/target/classes/com/example/demo/repository/BlogPostRepository.class differ diff --git a/target/classes/com/example/demo/repository/TagRepository.class b/target/classes/com/example/demo/repository/TagRepository.class index 652319bc0..232e8a173 100644 Binary files a/target/classes/com/example/demo/repository/TagRepository.class and b/target/classes/com/example/demo/repository/TagRepository.class differ diff --git a/target/classes/com/example/demo/service/BlogPostService.class b/target/classes/com/example/demo/service/BlogPostService.class index 82b9b46fb..7e67c07b0 100644 Binary files a/target/classes/com/example/demo/service/BlogPostService.class and b/target/classes/com/example/demo/service/BlogPostService.class differ diff --git a/target/classes/com/example/demo/service/TagService.class b/target/classes/com/example/demo/service/TagService.class index 9860638c9..0ff05ad86 100644 Binary files a/target/classes/com/example/demo/service/TagService.class and b/target/classes/com/example/demo/service/TagService.class differ