Skip to content

Commit 3406b73

Browse files
committed
Added Category and Tag models
1 parent b48d87a commit 3406b73

19 files changed

Lines changed: 843 additions & 149 deletions
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.sopromadze.blogapi.controller;
2+
3+
import javax.validation.Valid;
4+
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.http.ResponseEntity;
7+
import org.springframework.security.access.prepost.PreAuthorize;
8+
import org.springframework.web.bind.annotation.DeleteMapping;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.PathVariable;
11+
import org.springframework.web.bind.annotation.PostMapping;
12+
import org.springframework.web.bind.annotation.PutMapping;
13+
import org.springframework.web.bind.annotation.RequestBody;
14+
import org.springframework.web.bind.annotation.RequestMapping;
15+
import org.springframework.web.bind.annotation.RequestParam;
16+
import org.springframework.web.bind.annotation.RestController;
17+
18+
import com.sopromadze.blogapi.model.category.Category;
19+
import com.sopromadze.blogapi.payload.PagedResponse;
20+
import com.sopromadze.blogapi.security.CurrentUser;
21+
import com.sopromadze.blogapi.security.UserPrincipal;
22+
import com.sopromadze.blogapi.service.CategoryService;
23+
import com.sopromadze.blogapi.util.AppConstants;
24+
25+
@RestController
26+
@RequestMapping("/api/categories")
27+
public class CategoryController {
28+
private final CategoryService categoryService;
29+
30+
@Autowired
31+
public CategoryController(CategoryService categoryService) {
32+
this.categoryService = categoryService;
33+
}
34+
35+
@GetMapping
36+
public PagedResponse<?> getAllCategories(
37+
@RequestParam(name = "page", required = false, defaultValue = AppConstants.DEFAULT_PAGE_NUMBER) Integer page,
38+
@RequestParam(name = "size", required = false, defaultValue = AppConstants.DEFAULT_PAGE_SIZE) Integer size){
39+
return categoryService.getAllCategories(page, size);
40+
}
41+
42+
@PostMapping
43+
@PreAuthorize("hasRole('USER')")
44+
public ResponseEntity<?> addCategory(@Valid @RequestBody Category category, @CurrentUser UserPrincipal currentUser){
45+
return categoryService.addCategory(category, currentUser);
46+
}
47+
48+
@GetMapping("/{id}")
49+
public ResponseEntity<?> getCategory(@PathVariable(name = "id") Long id){
50+
return categoryService.getCategory(id);
51+
}
52+
53+
@PutMapping("/{id}")
54+
@PreAuthorize("hasRole('USER') or hasRole('ADMIN')")
55+
public ResponseEntity<?> updateCategory(@PathVariable(name = "id") Long id, @Valid @RequestBody Category category, @CurrentUser UserPrincipal currentUser){
56+
return categoryService.updateCategory(id, category, currentUser);
57+
}
58+
59+
@DeleteMapping("/{id}")
60+
@PreAuthorize("hasRole('USER') or hasRole('ADMIN')")
61+
public ResponseEntity<?> deleteCategory(@PathVariable(name = "id") Long id, @CurrentUser UserPrincipal currentUser){
62+
return categoryService.deleteCategory(id, currentUser);
63+
}
64+
65+
}

src/main/java/com/sopromadze/blogapi/controller/CommentController.java

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,26 @@
11
package com.sopromadze.blogapi.controller;
22

3-
import com.sopromadze.blogapi.exception.ResourceNotFoundException;
4-
import com.sopromadze.blogapi.model.comment.Comment;
5-
import com.sopromadze.blogapi.model.post.Post;
3+
import javax.validation.Valid;
4+
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.http.ResponseEntity;
7+
import org.springframework.security.access.prepost.PreAuthorize;
8+
import org.springframework.web.bind.annotation.DeleteMapping;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.PathVariable;
11+
import org.springframework.web.bind.annotation.PostMapping;
12+
import org.springframework.web.bind.annotation.PutMapping;
13+
import org.springframework.web.bind.annotation.RequestBody;
14+
import org.springframework.web.bind.annotation.RequestMapping;
15+
import org.springframework.web.bind.annotation.RequestParam;
16+
import org.springframework.web.bind.annotation.RestController;
17+
618
import com.sopromadze.blogapi.payload.CommentRequest;
719
import com.sopromadze.blogapi.payload.PagedResponse;
8-
import com.sopromadze.blogapi.repository.CommentRepository;
9-
import com.sopromadze.blogapi.repository.PostRepository;
1020
import com.sopromadze.blogapi.security.CurrentUser;
1121
import com.sopromadze.blogapi.security.UserPrincipal;
1222
import com.sopromadze.blogapi.service.CommentService;
1323
import com.sopromadze.blogapi.util.AppConstants;
14-
import org.springframework.beans.factory.annotation.Autowired;
15-
import org.springframework.http.ResponseEntity;
16-
import org.springframework.security.access.prepost.PreAuthorize;
17-
import org.springframework.web.bind.annotation.*;
18-
19-
import javax.validation.Valid;
20-
import java.util.List;
2124

2225
@RestController
2326
@RequestMapping("/api/posts/{postId}/comments")

src/main/java/com/sopromadze/blogapi/controller/PhotoController.java

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
11
package com.sopromadze.blogapi.controller;
22

3-
import com.sopromadze.blogapi.exception.ResourceNotFoundException;
4-
import com.sopromadze.blogapi.model.album.Album;
5-
import com.sopromadze.blogapi.model.photo.Photo;
3+
import javax.validation.Valid;
4+
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.http.ResponseEntity;
7+
import org.springframework.security.access.prepost.PreAuthorize;
8+
import org.springframework.web.bind.annotation.DeleteMapping;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.PathVariable;
11+
import org.springframework.web.bind.annotation.PostMapping;
12+
import org.springframework.web.bind.annotation.PutMapping;
13+
import org.springframework.web.bind.annotation.RequestBody;
14+
import org.springframework.web.bind.annotation.RequestMapping;
15+
import org.springframework.web.bind.annotation.RequestParam;
16+
import org.springframework.web.bind.annotation.RestController;
17+
618
import com.sopromadze.blogapi.payload.PagedResponse;
719
import com.sopromadze.blogapi.payload.PhotoRequest;
820
import com.sopromadze.blogapi.payload.PhotoResponse;
9-
import com.sopromadze.blogapi.repository.AlbumRepository;
10-
import com.sopromadze.blogapi.repository.PhotoRepository;
1121
import com.sopromadze.blogapi.security.CurrentUser;
1222
import com.sopromadze.blogapi.security.UserPrincipal;
1323
import com.sopromadze.blogapi.service.PhotoService;
1424
import com.sopromadze.blogapi.util.AppConstants;
15-
import org.springframework.beans.factory.annotation.Autowired;
16-
import org.springframework.http.ResponseEntity;
17-
import org.springframework.security.access.prepost.PreAuthorize;
18-
import org.springframework.web.bind.annotation.*;
19-
20-
import javax.validation.Valid;
21-
import java.util.ArrayList;
22-
import java.util.List;
2325

2426
@RestController
2527
@RequestMapping("/api/photos")

src/main/java/com/sopromadze/blogapi/controller/PostController.java

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.sopromadze.blogapi.model.post.Post;
44
import com.sopromadze.blogapi.payload.PagedResponse;
5+
import com.sopromadze.blogapi.payload.PostRequest;
56
import com.sopromadze.blogapi.security.CurrentUser;
67
import com.sopromadze.blogapi.security.UserPrincipal;
78
import com.sopromadze.blogapi.service.PostService;
@@ -30,11 +31,29 @@ public PagedResponse<Post> getAllPosts(
3031
@RequestParam(value = "size", required = false, defaultValue = AppConstants.DEFAULT_PAGE_SIZE) Integer size){
3132
return postService.getAllPosts(page, size);
3233
}
34+
35+
@GetMapping("/category/{id}")
36+
public PagedResponse<Post> getPostsByCategory(
37+
@RequestParam(value = "page", required = false, defaultValue = AppConstants.DEFAULT_PAGE_NUMBER) Integer page,
38+
@RequestParam(value = "size", required = false, defaultValue = AppConstants.DEFAULT_PAGE_SIZE) Integer size,
39+
@PathVariable(name = "id") Long id
40+
){
41+
return postService.getPostsByCategory(id, page, size);
42+
}
43+
44+
@GetMapping("/tag/{id}")
45+
public PagedResponse<Post> getPostsByTag(
46+
@RequestParam(value = "page", required = false, defaultValue = AppConstants.DEFAULT_PAGE_NUMBER) Integer page,
47+
@RequestParam(value = "size", required = false, defaultValue = AppConstants.DEFAULT_PAGE_SIZE) Integer size,
48+
@PathVariable(name = "id") Long id
49+
){
50+
return postService.getPostsByTag(id, page, size);
51+
}
3352

3453
@PostMapping
3554
@PreAuthorize("hasRole('USER')")
36-
public ResponseEntity<?> addPost(@Valid @RequestBody Post post, @CurrentUser UserPrincipal currentUser){
37-
return postService.addPost(post, currentUser);
55+
public ResponseEntity<?> addPost(@Valid @RequestBody PostRequest postRequest, @CurrentUser UserPrincipal currentUser){
56+
return postService.addPost(postRequest, currentUser);
3857
}
3958

4059
@GetMapping("/{id}")
@@ -44,8 +63,8 @@ public ResponseEntity<?> getPost(@PathVariable(name = "id") Long id){
4463

4564
@PutMapping("/{id}")
4665
@PreAuthorize("hasRole('USER') or hasRole('ADMIN')")
47-
public ResponseEntity<?> updatePost(@PathVariable(name = "id") Long id, @Valid @RequestBody Post newPost, @CurrentUser UserPrincipal currentUser){
48-
return postService.updatePost(id, newPost, currentUser);
66+
public ResponseEntity<?> updatePost(@PathVariable(name = "id") Long id, @Valid @RequestBody PostRequest newPostRequest, @CurrentUser UserPrincipal currentUser){
67+
return postService.updatePost(id, newPostRequest, currentUser);
4968
}
5069

5170
@DeleteMapping("/{id}")
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.sopromadze.blogapi.controller;
2+
3+
import javax.validation.Valid;
4+
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.http.ResponseEntity;
7+
import org.springframework.security.access.prepost.PreAuthorize;
8+
import org.springframework.web.bind.annotation.DeleteMapping;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.PathVariable;
11+
import org.springframework.web.bind.annotation.PostMapping;
12+
import org.springframework.web.bind.annotation.PutMapping;
13+
import org.springframework.web.bind.annotation.RequestBody;
14+
import org.springframework.web.bind.annotation.RequestMapping;
15+
import org.springframework.web.bind.annotation.RequestParam;
16+
import org.springframework.web.bind.annotation.RestController;
17+
18+
import com.sopromadze.blogapi.model.category.Category;
19+
import com.sopromadze.blogapi.model.tag.Tag;
20+
import com.sopromadze.blogapi.payload.PagedResponse;
21+
import com.sopromadze.blogapi.security.CurrentUser;
22+
import com.sopromadze.blogapi.security.UserPrincipal;
23+
import com.sopromadze.blogapi.service.CategoryService;
24+
import com.sopromadze.blogapi.service.TagService;
25+
import com.sopromadze.blogapi.util.AppConstants;
26+
27+
@RestController
28+
@RequestMapping("/api/tags")
29+
public class TagController {
30+
private final TagService tagService;
31+
32+
@Autowired
33+
public TagController(TagService tagService) {
34+
this.tagService = tagService;
35+
}
36+
37+
@GetMapping
38+
public PagedResponse<?> getAllTags(
39+
@RequestParam(name = "page", required = false, defaultValue = AppConstants.DEFAULT_PAGE_NUMBER) Integer page,
40+
@RequestParam(name = "size", required = false, defaultValue = AppConstants.DEFAULT_PAGE_SIZE) Integer size){
41+
return tagService.getAllTags(page, size);
42+
}
43+
44+
@PostMapping
45+
@PreAuthorize("hasRole('USER')")
46+
public ResponseEntity<?> addTag(@Valid @RequestBody Tag tag, @CurrentUser UserPrincipal currentUser){
47+
return tagService.addTag(tag, currentUser);
48+
}
49+
50+
@GetMapping("/{id}")
51+
public ResponseEntity<?> getTag(@PathVariable(name = "id") Long id){
52+
return tagService.getTag(id);
53+
}
54+
55+
@PutMapping("/{id}")
56+
@PreAuthorize("hasRole('USER') or hasRole('ADMIN')")
57+
public ResponseEntity<?> updateTag(@PathVariable(name = "id") Long id, @Valid @RequestBody Tag tag, @CurrentUser UserPrincipal currentUser){
58+
return tagService.updateTag(id, tag, currentUser);
59+
}
60+
61+
@DeleteMapping("/{id}")
62+
@PreAuthorize("hasRole('USER') or hasRole('ADMIN')")
63+
public ResponseEntity<?> deleteTag(@PathVariable(name = "id") Long id, @CurrentUser UserPrincipal currentUser){
64+
return tagService.deleteTag(id, currentUser);
65+
}
66+
67+
}

src/main/java/com/sopromadze/blogapi/controller/UserController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public PagedResponse<Post> getPostsCreatedBy(
5757
@PathVariable(value = "username") String username,
5858
@RequestParam(value = "page", required = false, defaultValue = AppConstants.DEFAULT_PAGE_NUMBER) Integer page,
5959
@RequestParam(value = "size", required = false, defaultValue = AppConstants.DEFAULT_PAGE_SIZE) Integer size){
60-
return postService.getPostsCreatedBy(username, page, size);
60+
return postService.getPostsByCreatedBy(username, page, size);
6161
}
6262

6363
@GetMapping("/{username}/albums")
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.sopromadze.blogapi.model.category;
2+
3+
import java.util.List;
4+
5+
import javax.persistence.CascadeType;
6+
import javax.persistence.Column;
7+
import javax.persistence.Entity;
8+
import javax.persistence.GeneratedValue;
9+
import javax.persistence.GenerationType;
10+
import javax.persistence.Id;
11+
import javax.persistence.OneToMany;
12+
import javax.persistence.Table;
13+
14+
import com.fasterxml.jackson.annotation.JsonBackReference;
15+
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
16+
import com.fasterxml.jackson.annotation.JsonIgnore;
17+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
18+
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
19+
import com.sopromadze.blogapi.model.audit.UserDateAudit;
20+
import com.sopromadze.blogapi.model.post.Post;
21+
22+
@Entity
23+
@Table(name = "categories")
24+
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
25+
public class Category extends UserDateAudit{
26+
27+
/**
28+
*
29+
*/
30+
private static final long serialVersionUID = 2244218247298262703L;
31+
32+
@Id
33+
@GeneratedValue(strategy = GenerationType.IDENTITY)
34+
private Long id;
35+
36+
@Column(name = "name")
37+
private String name;
38+
39+
@OneToMany(mappedBy = "category", cascade = CascadeType.ALL, orphanRemoval = true)
40+
private List<Post> posts;
41+
42+
public Category() {
43+
44+
}
45+
46+
public Category(String name) {
47+
super();
48+
this.name = name;
49+
}
50+
51+
public Long getId() {
52+
return id;
53+
}
54+
55+
public void setId(Long id) {
56+
this.id = id;
57+
}
58+
59+
public String getName() {
60+
return name;
61+
}
62+
63+
public void setName(String name) {
64+
this.name = name;
65+
}
66+
67+
public List<Post> getPosts() {
68+
return posts;
69+
}
70+
71+
public void setPosts(List<Post> posts) {
72+
this.posts = posts;
73+
}
74+
75+
}

0 commit comments

Comments
 (0)