Added FilterService.java and my-discussions page

This commit is contained in:
redtea committed 2022-08-29 13:15:51 +03:00
1 parent e6ce921af1
commit c5df48f563
6 files changed
+82 -40

No files matched your search

+1 -1
View File
@@ -20,7 +20,7 @@ repositories {
} }
dependencies { dependencies {
implementation 'org.springframework.boot:spring-boot-starter-validation:2.7.3' implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'com.google.guava:guava:31.1-jre' implementation 'com.google.guava:guava:31.1-jre'
implementation 'org.springframework.data:spring-data-jpa' implementation 'org.springframework.data:spring-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-security'
@@ -3,12 +3,15 @@ package site.easystartup.easystartupcore.config;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration @Configuration
@ComponentScan(basePackages = {"site.easystartup.easystartupcore"}) @ComponentScan(basePackages = {"site.easystartup.easystartupcore"})
public class AppConfig { public class AppConfig {
@Bean @Bean
public PasswordEncoder passwordEncoder() { public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(); return new BCryptPasswordEncoder();
@@ -4,11 +4,15 @@ import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.val; import lombok.val;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import site.easystartup.easystartupcore.domain.forum.Discussion; import site.easystartup.easystartupcore.domain.forum.Discussion;
import site.easystartup.easystartupcore.domain.forum.Topic; import site.easystartup.easystartupcore.domain.forum.Topic;
import site.easystartup.easystartupcore.filter.FilterService;
import site.easystartup.easystartupcore.repos.forum.TopicRepo; import site.easystartup.easystartupcore.repos.forum.TopicRepo;
import java.util.Collections; import java.util.Collections;
@@ -18,7 +22,7 @@ import java.util.Collections;
public class ForumController { public class ForumController {
private final TopicRepo topicRepo; private final TopicRepo topicRepo;
private final Discussion discussion; private final FilterService filterService;
@GetMapping("/forum") @GetMapping("/forum")
public String forumMain(Model model) { public String forumMain(Model model) {
@@ -29,8 +33,9 @@ public class ForumController {
@GetMapping("/forum/my") @GetMapping("/forum/my")
public String forumMy(Model model) { public String forumMy(Model model) {
val topic = Lists.newArrayList(topicRepo.findAll()); User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
model.addAttribute("topics", topic); val discussions = filterService.getDiscussionsByAuthor(user.getUsername());
return "forum"; model.addAttribute("discussions", discussions);
return "my-discussions";
} }
} }
@@ -1,14 +1,36 @@
package site.easystartup.easystartupcore.filter; package site.easystartup.easystartupcore.filter;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import site.easystartup.easystartupcore.domain.forum.Discussion; import site.easystartup.easystartupcore.domain.forum.Discussion;
import site.easystartup.easystartupcore.domain.forum.DiscussionMessage; import site.easystartup.easystartupcore.domain.forum.DiscussionMessage;
import site.easystartup.easystartupcore.repos.forum.DiscussionMessageRepo;
import site.easystartup.easystartupcore.repos.forum.DiscussionRepo;
import java.util.List; import java.util.List;
public interface FilterService { @Component
List<DiscussionMessage> getMessagesByDiscussionId(long discussionId); @RequiredArgsConstructor(onConstructor_ = @Autowired)
public class FilterService {
private final DiscussionMessageRepo discussionMessageRepo;
List<Discussion> getDiscussionByAuthor(String author); private final DiscussionRepo discussionRepo;
List<Discussion> getDiscussionByMember(String member); public List<DiscussionMessage> getMessagesByDiscussionId(long discussionId) {
return Lists.newArrayList(discussionMessageRepo.findAll()).stream()
.filter(m -> m.getId() == discussionId).toList();
}
public List<Discussion> getDiscussionsByAuthor(String author) {
return Lists.newArrayList(discussionRepo.findAll()).stream()
.filter(d -> d.getAuthor().equals(author)).toList();
}
public List<Discussion> getDiscussionsByMember(String member) {
return Lists.newArrayList(discussionRepo.findAll()).stream()
.filter(d -> getMessagesByDiscussionId(d.getId()).stream()
.anyMatch(m -> m.getSender().equals(member))).toList();
}
} }
@@ -1,31 +0,0 @@
package site.easystartup.easystartupcore.filter;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import site.easystartup.easystartupcore.domain.forum.Discussion;
import site.easystartup.easystartupcore.domain.forum.DiscussionMessage;
import site.easystartup.easystartupcore.repos.forum.DiscussionMessageRepo;
import java.util.List;
@RequiredArgsConstructor(onConstructor_ = @Autowired)
public class StreamFilterService implements FilterService {
private final DiscussionMessageRepo discussionMessageRepo;
@Override
public List<DiscussionMessage> getMessagesByDiscussionId(long discussionId) {
//Lists.newArrayList(discussionMessageRepo.findAll()).stream().filter()
return null;
}
@Override
public List<Discussion> getDiscussionByAuthor(String author) {
return null;
}
@Override
public List<Discussion> getDiscussionByMember(String member) {
return null;
}
}
@@ -0,0 +1,43 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="https://www.thymeleaf.org"
xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head>
<meta charset="utf-8">
<title>Вход</title>
<style>
div.error {
color: #ff5967;
font-weight: bold;
}
div.logout {
color: #2c84ec;
font-weight: bold;
}
</style>
</head>
<body>
<main>
<p>Мои обсуждения</p>
<div th:each="el : ${discussions}">
<h2 th:text="${el.title}"/>
<p th:text="'Автор: ' + ${el.title}"/>
<p th:text="'Дата создания: ' + ${#dates.format(el.date, 'hh:mm dd MMM yyyy')}"/>
<p th:text="'Последнее обновление: ' + ${#dates.format(el.last_update, 'hh:mm dd MMM yyyy')}"/>
</div>
</main>
</body>
</html>