Try to add topic pages
This commit is contained in:
1 parent
58e927cc87
commit
fd9d9579b0
10 files changed
+120
-55
No files matched your search
@@ -11,7 +11,6 @@ import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
@ComponentScan(basePackages = {"site.easystartup.easystartupcore"})
|
||||
public class AppConfig {
|
||||
|
||||
|
||||
@Bean
|
||||
public PasswordEncoder passwordEncoder() {
|
||||
return new BCryptPasswordEncoder();
|
||||
|
||||
+47
-5
@@ -8,33 +8,75 @@ import org.springframework.security.core.userdetails.User;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import site.easystartup.easystartupcore.forum.filter.FilterService;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import site.easystartup.easystartupcore.forum.domain.Topic;
|
||||
import site.easystartup.easystartupcore.forum.filter.ForumFilterService;
|
||||
import site.easystartup.easystartupcore.forum.repo.TopicRepo;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Controller
|
||||
@RequiredArgsConstructor(onConstructor_ = @Autowired)
|
||||
public class ForumController {
|
||||
private final TopicRepo topicRepo;
|
||||
|
||||
private final FilterService filterService;
|
||||
private final ForumFilterService forumFilterService;
|
||||
|
||||
@GetMapping("/forum")
|
||||
public String forumMain(Model model) {
|
||||
val topic = topicRepo.findAll();
|
||||
model.addAttribute("topics", topic);
|
||||
return "forum";
|
||||
return "/forum";
|
||||
}
|
||||
|
||||
@GetMapping("/forum/my")
|
||||
public String forumMy(Model model) {
|
||||
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
||||
val discussions = filterService.getDiscussionsByAuthor(user.getUsername());
|
||||
val discussions = forumFilterService.getDiscussionsByAuthor(user.getUsername());
|
||||
model.addAttribute("discussions", discussions);
|
||||
return "my-discussions";
|
||||
return "/my-discussions";
|
||||
}
|
||||
|
||||
@GetMapping("/forum/new")
|
||||
public String forumNew() {
|
||||
return "topic-new";
|
||||
}
|
||||
|
||||
@PostMapping("/forum/new")
|
||||
public String forumNewTopic(@RequestParam String title,
|
||||
@RequestParam String description) {
|
||||
description = description == null ? "" : description;
|
||||
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
||||
Topic topic = new Topic();
|
||||
topic.setTitle(title);
|
||||
topic.setDescription(description);
|
||||
topic.setAuthor(user.getUsername());
|
||||
topic.setLast_update(new Date());
|
||||
topic.setSize(0);
|
||||
topicRepo.save(topic);
|
||||
return "/forum";
|
||||
}
|
||||
|
||||
@GetMapping("/forum/{topic_id}")
|
||||
public String topicFirstPage(@PathVariable(value = "topic_id") long topic_id,
|
||||
Model model) {
|
||||
val pinned_discussions = forumFilterService.getPinnedDiscussionsByTopicId(topic_id);
|
||||
model.addAttribute("pinned_discussions", pinned_discussions);
|
||||
val discussions = forumFilterService.getSortedDiscussionsByTopicId(topic_id).subList(0, 15);
|
||||
model.addAttribute("discussions", discussions);
|
||||
return "topic-first";
|
||||
}
|
||||
|
||||
@GetMapping("/forum/{topic_id}/page/{page_index}")
|
||||
public String topicPage(@PathVariable(value = "topic_id") long topic_id,
|
||||
@PathVariable(value = "topic_id") long page_index,
|
||||
Model model) {
|
||||
val pinned_discussions = forumFilterService.getPinnedDiscussionsByTopicId(topic_id);
|
||||
model.addAttribute("pinned_discussions", pinned_discussions);
|
||||
val discussions = forumFilterService.getSortedDiscussionsByTopicId(topic_id).subList(0, 15);
|
||||
model.addAttribute("discussions", discussions);
|
||||
return "topic-first";
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ import java.util.Objects;
|
||||
@ToString
|
||||
@RequiredArgsConstructor
|
||||
@Entity
|
||||
public class Discussion {
|
||||
public class Discussion implements Comparable<Discussion>{
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.AUTO)
|
||||
private long id;
|
||||
@@ -21,6 +21,9 @@ public class Discussion {
|
||||
private String author;
|
||||
private Date date;
|
||||
private Date last_update;
|
||||
private boolean pinned;
|
||||
private DiscussionStatus status;
|
||||
private long topic;
|
||||
|
||||
@ElementCollection(targetClass = Long.class, fetch = FetchType.EAGER)
|
||||
@CollectionTable(name = "discussion_messages", joinColumns = @JoinColumn(name = "discussion_id"))
|
||||
@@ -38,4 +41,11 @@ public class Discussion {
|
||||
public int hashCode() {
|
||||
return getClass().hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Discussion o) {
|
||||
if (getLast_update() == null || o.getLast_update() == null)
|
||||
return 0;
|
||||
return getLast_update().compareTo(o.getLast_update());
|
||||
}
|
||||
}
|
||||
+16
-1
@@ -9,11 +9,12 @@ import site.easystartup.easystartupcore.forum.domain.DiscussionMessage;
|
||||
import site.easystartup.easystartupcore.forum.repo.DiscussionMessageRepo;
|
||||
import site.easystartup.easystartupcore.forum.repo.DiscussionRepo;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
@RequiredArgsConstructor(onConstructor_ = @Autowired)
|
||||
public class FilterService {
|
||||
public class ForumFilterService {
|
||||
private final DiscussionMessageRepo discussionMessageRepo;
|
||||
|
||||
private final DiscussionRepo discussionRepo;
|
||||
@@ -33,4 +34,18 @@ public class FilterService {
|
||||
.filter(d -> getMessagesByDiscussionId(d.getId()).stream()
|
||||
.anyMatch(m -> m.getSender().equals(member))).toList();
|
||||
}
|
||||
|
||||
public List<Discussion> getPinnedDiscussionsByTopicId(long topic_id) {
|
||||
return Lists.newArrayList(discussionRepo.findAll()).stream()
|
||||
.filter(Discussion::isPinned)
|
||||
.filter(d -> d.getTopic() == topic_id).toList();
|
||||
}
|
||||
|
||||
public List<Discussion> getSortedDiscussionsByTopicId(long topic_id) {
|
||||
List<Discussion> result = Lists.newArrayList(discussionRepo.findAll()).stream()
|
||||
.filter(d -> !d.isPinned())
|
||||
.filter(d -> d.getTopic() == topic_id).toList();
|
||||
Collections.sort(result, Discussion::compareTo);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user