Skip to content

Commit d9eba58

Browse files
committed
display posts by tag
1 parent 4542dde commit d9eba58

9 files changed

Lines changed: 89 additions & 39 deletions

File tree

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ dependencies {
9898
compile 'com.google.guava:guava:+'
9999
compile 'org.modelmapper:modelmapper:0.7.5'
100100
compile 'org.projectlombok:lombok:1.16.6'
101+
//compile 'com.qiniu:qiniu-java-sdk:7.0.+'
101102

102103
// static resources, ref. http://www.webjars.org/
103104
compile 'org.webjars:jquery:2.1.4'

src/main/java/com/raysmond/blog/controllers/HomeController.java

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

33
import com.raysmond.blog.Constants;
44
import com.raysmond.blog.models.Post;
5-
import com.raysmond.blog.models.support.PostType;
6-
import com.raysmond.blog.repositories.PostRepository;
75
import com.raysmond.blog.services.AppSetting;
86
import com.raysmond.blog.services.PostService;
97
import org.springframework.beans.factory.annotation.Autowired;
@@ -12,6 +10,8 @@
1210
import org.springframework.ui.Model;
1311
import org.springframework.web.bind.annotation.*;
1412

13+
import static org.springframework.web.bind.annotation.RequestMethod.*;
14+
1515
@Controller
1616
public class HomeController {
1717

@@ -21,18 +21,19 @@ public class HomeController {
2121
@Autowired
2222
private AppSetting appSetting;
2323

24-
@RequestMapping("")
24+
@RequestMapping(value = "", method = GET)
2525
public String index(@RequestParam(defaultValue = "1") int page, Model model) {
26-
Page<Post> posts = postService.getAllPublishedPostsByPage(page < 0 ? 1 : page - 1, appSetting.getPageSize());
26+
page = page < 1 ? 0 : page - 1;
27+
Page<Post> posts = postService.getAllPublishedPostsByPage(page, appSetting.getPageSize());
2728

2829
model.addAttribute("totalPages", posts.getTotalPages());
2930
model.addAttribute("posts", posts);
30-
model.addAttribute("page", page);
31+
model.addAttribute("page", page + 1);
3132

3233
return "home/index";
3334
}
3435

35-
@RequestMapping("about")
36+
@RequestMapping(value = "about", method = GET)
3637
public String about(Model model) {
3738
Post post = postService.getPublishedPostByPermalink(Constants.ABOUT_PAGE_PERMALINK);
3839

Lines changed: 41 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,22 @@
11
package com.raysmond.blog.controllers;
22

3+
import com.raysmond.blog.error.NotFoundException;
4+
import com.raysmond.blog.models.Post;
35
import com.raysmond.blog.models.Tag;
6+
import com.raysmond.blog.services.AppSetting;
7+
import com.raysmond.blog.services.PostService;
48
import com.raysmond.blog.services.TagService;
59
import org.springframework.beans.factory.annotation.Autowired;
10+
import org.springframework.data.domain.Page;
611
import org.springframework.stereotype.Controller;
712
import org.springframework.ui.Model;
813
import org.springframework.web.bind.annotation.PathVariable;
914
import org.springframework.web.bind.annotation.RequestMapping;
15+
import static org.springframework.web.bind.annotation.RequestMethod.*;
16+
import org.springframework.web.bind.annotation.RequestParam;
17+
18+
import java.util.ArrayList;
19+
import java.util.List;
1020

1121
/**
1222
* @author Raysmond<i@raysmond.com>.
@@ -17,9 +27,35 @@ public class TagController {
1727
@Autowired
1828
private TagService tagService;
1929

20-
// @RequestMapping("{tagName}")
21-
// public String showTag(@PathVariable String tagName, Model model){
22-
// Tag tag = tagService.getTag(tagName);
23-
// return "tags/show";
24-
// }
30+
@Autowired
31+
private PostService postService;
32+
33+
@Autowired
34+
private AppSetting appSetting;
35+
36+
@RequestMapping(value = "", method = GET)
37+
public String index(){
38+
// TODO show all tags
39+
40+
return "tags/index";
41+
}
42+
43+
@RequestMapping(value = "{tagName}", method = GET)
44+
public String showTag(@PathVariable String tagName, @RequestParam(defaultValue = "1") int page, Model model) {
45+
Tag tag = tagService.getTag(tagName);
46+
47+
if (tag == null) {
48+
throw new NotFoundException("Tag " + tagName + " is not found.");
49+
}
50+
51+
page = page < 1 ? 0 : page - 1;
52+
Page<Post> posts = postService.findPostsByTag(tagName, page, appSetting.getPageSize());
53+
54+
model.addAttribute("tag", tag);
55+
model.addAttribute("posts", posts);
56+
model.addAttribute("page", page + 1);
57+
model.addAttribute("totalPages", posts.getTotalPages());
58+
59+
return "tags/show";
60+
}
2561
}

src/main/java/com/raysmond/blog/models/Tag.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import javax.persistence.*;
77
import java.util.ArrayList;
88
import java.util.Collection;
9+
import java.util.List;
910

1011
/**
1112
* @author Raysmond<i@raysmond.com>.
@@ -19,7 +20,7 @@ public class Tag extends BaseModel {
1920
private String name;
2021

2122
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "tags")
22-
private Collection<Post> posts = new ArrayList<>();
23+
private List<Post> posts = new ArrayList<>();
2324

2425
public Tag(){
2526

src/main/java/com/raysmond/blog/repositories/PostRepository.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,28 @@
66
import org.springframework.data.domain.Page;
77
import org.springframework.data.domain.Pageable;
88
import org.springframework.data.jpa.repository.JpaRepository;
9+
import org.springframework.data.jpa.repository.Query;
910
import org.springframework.data.repository.CrudRepository;
1011
import org.springframework.data.repository.PagingAndSortingRepository;
12+
import org.springframework.data.repository.query.Param;
1113
import org.springframework.stereotype.Repository;
1214
import org.springframework.transaction.annotation.Transactional;
1315

16+
import java.util.List;
17+
1418
/**
1519
* @author Raysmond<i@raysmond.com>
1620
*/
1721
@Repository
1822
@Transactional
1923
public interface PostRepository extends JpaRepository<Post, Long> {
20-
Post findByTitle(String title);
21-
22-
Post findByTitleAndPostType(String title, PostType postType);
23-
24-
Post findByPostStatus(PostStatus postStatus);
25-
2624
Post findByPermalinkAndPostStatus(String permalink, PostStatus postStatus);
2725

2826
Page<Post> findAllByPostType(PostType postType, Pageable pageRequest);
2927

3028
Page<Post> findAllByPostTypeAndPostStatus(PostType postType, PostStatus postStatus, Pageable pageRequest);
29+
30+
@Query("SELECT p FROM Post p INNER JOIN p.tags t WHERE t.name = :tag")
31+
Page<Post> findByTag(@Param("tag") String tag, Pageable pageable);
3132
}
3233

src/main/java/com/raysmond/blog/services/PostService.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@
2020
import org.springframework.data.domain.Sort;
2121
import org.springframework.stereotype.Service;
2222

23-
import java.util.ArrayList;
24-
import java.util.HashSet;
25-
import java.util.List;
26-
import java.util.Set;
23+
import java.util.*;
2724

2825
/**
2926
* @author Raysmond<i@raysmond.com>.
@@ -195,4 +192,8 @@ public String getTagNames(Set<Tag> tags){
195192

196193
return names.toString();
197194
}
195+
196+
public Page<Post> findPostsByTag(String tagName, int page, int pageSize){
197+
return postRepository.findByTag(tagName, new PageRequest(page, pageSize, Sort.Direction.DESC, "createdAt"));
198+
}
198199
}

src/main/resources/templates/home/index.jade

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,4 @@ block title
88
= App.getSiteName()
99

1010
block content
11-
include ../posts/index
12-
13-
.load-more
14-
nav
15-
ul.pager
16-
if totalPages > page
17-
li.previous
18-
a.btn(href="/?page=#{page+1}")
19-
span(aria-hidden="true) &larr;
20-
| Older posts
21-
22-
if page > 1
23-
li.next
24-
a.btn(href="/?page=#{page-1}")
25-
|Newer posts
26-
span(aria-hidden="true) &rarr;
27-
11+
include ../posts/index

src/main/resources/templates/posts/index.jade

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,18 @@
1212
!{post.getRenderedContent()}
1313

1414
hr
15+
16+
.load-more
17+
nav
18+
ul.pager
19+
if totalPages > page
20+
li.previous
21+
a.btn(href="?page=#{page+1}")
22+
span(aria-hidden="true) &larr;
23+
| Older posts
24+
25+
if page > 1
26+
li.next
27+
a.btn(href="?page=#{page-1}")
28+
|Newer posts
29+
span(aria-hidden="true) &rarr;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
extends ../layout/app
2+
3+
block title
4+
= viewHelper.metaTitle(tag.getName())
5+
6+
block page_title
7+
h1 Tag #{tag.getName()}
8+
9+
block content
10+
include ../posts/index

0 commit comments

Comments
 (0)