From fd9d9579b0cb65e583916d66e3eda600c0aa3928 Mon Sep 17 00:00:00 2001 From: iRedTea Date: Mon, 29 Aug 2022 14:46:27 +0300 Subject: [PATCH] Try to add topic pages --- build.gradle | 3 +- .../easystartupcore/config/AppConfig.java | 1 - .../forum/controller/ForumController.java | 52 +++++++++++++++++-- .../forum/domain/Discussion.java | 12 ++++- ...erService.java => ForumFilterService.java} | 17 +++++- src/main/resources/application.properties | 3 +- src/main/resources/templates/login.html | 2 +- .../resources/templates/my-discussions.html | 14 +---- src/main/resources/templates/topic-first.html | 35 +++++++++++++ src/main/resources/templates/topic-new.html | 36 +++---------- 10 files changed, 120 insertions(+), 55 deletions(-) rename src/main/java/site/easystartup/easystartupcore/forum/filter/{FilterService.java => ForumFilterService.java} (68%) create mode 100644 src/main/resources/templates/topic-first.html diff --git a/build.gradle b/build.gradle index f7dfd69..0b3b6a7 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ plugins { group = 'site.easy-startup' version = '0.0.1-SNAPSHOT' -sourceCompatibility = '8' +sourceCompatibility = "16" configurations { compileOnly { @@ -42,3 +42,4 @@ dependencies { tasks.named('test') { useJUnitPlatform() } +targetCompatibility = JavaVersion.VERSION_16 diff --git a/src/main/java/site/easystartup/easystartupcore/config/AppConfig.java b/src/main/java/site/easystartup/easystartupcore/config/AppConfig.java index cc55bf2..b2e653a 100644 --- a/src/main/java/site/easystartup/easystartupcore/config/AppConfig.java +++ b/src/main/java/site/easystartup/easystartupcore/config/AppConfig.java @@ -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(); diff --git a/src/main/java/site/easystartup/easystartupcore/forum/controller/ForumController.java b/src/main/java/site/easystartup/easystartupcore/forum/controller/ForumController.java index 70b3157..134a378 100644 --- a/src/main/java/site/easystartup/easystartupcore/forum/controller/ForumController.java +++ b/src/main/java/site/easystartup/easystartupcore/forum/controller/ForumController.java @@ -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"; + } } diff --git a/src/main/java/site/easystartup/easystartupcore/forum/domain/Discussion.java b/src/main/java/site/easystartup/easystartupcore/forum/domain/Discussion.java index b901943..15ebbee 100644 --- a/src/main/java/site/easystartup/easystartupcore/forum/domain/Discussion.java +++ b/src/main/java/site/easystartup/easystartupcore/forum/domain/Discussion.java @@ -13,7 +13,7 @@ import java.util.Objects; @ToString @RequiredArgsConstructor @Entity -public class Discussion { +public class Discussion implements Comparable{ @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()); + } } diff --git a/src/main/java/site/easystartup/easystartupcore/forum/filter/FilterService.java b/src/main/java/site/easystartup/easystartupcore/forum/filter/ForumFilterService.java similarity index 68% rename from src/main/java/site/easystartup/easystartupcore/forum/filter/FilterService.java rename to src/main/java/site/easystartup/easystartupcore/forum/filter/ForumFilterService.java index f027ecd..bf8d86f 100644 --- a/src/main/java/site/easystartup/easystartupcore/forum/filter/FilterService.java +++ b/src/main/java/site/easystartup/easystartupcore/forum/filter/ForumFilterService.java @@ -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 getPinnedDiscussionsByTopicId(long topic_id) { + return Lists.newArrayList(discussionRepo.findAll()).stream() + .filter(Discussion::isPinned) + .filter(d -> d.getTopic() == topic_id).toList(); + } + + public List getSortedDiscussionsByTopicId(long topic_id) { + List result = Lists.newArrayList(discussionRepo.findAll()).stream() + .filter(d -> !d.isPinned()) + .filter(d -> d.getTopic() == topic_id).toList(); + Collections.sort(result, Discussion::compareTo); + return result; + } } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 15705f3..96ccdf5 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -7,6 +7,5 @@ spring.sql.init.mode=always spring.sql.init.platform=postgres spring.datasource.url=jdbc:postgresql://localhost:5432/testdb spring.datasource.username=postgres -#spring.datasource.password=root -spring.datasource.password=postgres +spring.datasource.password=root diff --git a/src/main/resources/templates/login.html b/src/main/resources/templates/login.html index 5a87c97..80164aa 100644 --- a/src/main/resources/templates/login.html +++ b/src/main/resources/templates/login.html @@ -29,7 +29,7 @@

Пожалуйста, войдите

- +
diff --git a/src/main/resources/templates/my-discussions.html b/src/main/resources/templates/my-discussions.html index 3b33faa..d48b712 100644 --- a/src/main/resources/templates/my-discussions.html +++ b/src/main/resources/templates/my-discussions.html @@ -6,18 +6,6 @@ Вход - @@ -28,7 +16,7 @@

Мои обсуждения

-

+

diff --git a/src/main/resources/templates/topic-first.html b/src/main/resources/templates/topic-first.html new file mode 100644 index 0000000..8f31a26 --- /dev/null +++ b/src/main/resources/templates/topic-first.html @@ -0,0 +1,35 @@ + + + + + + Вход + + + + + +
+

Закреплённые сообщения

+
+

+

+

+

+

+

Остальные сообщения

+
+

+

+

+

+

+
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/topic-new.html b/src/main/resources/templates/topic-new.html index df8e7b8..a624d5b 100644 --- a/src/main/resources/templates/topic-new.html +++ b/src/main/resources/templates/topic-new.html @@ -3,20 +3,8 @@ xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3"> - Вход + Новая тема - @@ -29,28 +17,16 @@

Пожалуйста, введите данные новой темы

- - + +
- - + +
-
- -
+ - - -
- Неправильный логин или пароль. -
-
- Вы вышли из аккаунта. -

© 2022