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 {
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 'org.springframework.data:spring-data-jpa'
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.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
@ComponentScan(basePackages = {"site.easystartup.easystartupcore"})
public class AppConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
@@ -4,11 +4,15 @@ import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import lombok.val;
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.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import site.easystartup.easystartupcore.domain.forum.Discussion;
import site.easystartup.easystartupcore.domain.forum.Topic;
import site.easystartup.easystartupcore.filter.FilterService;
import site.easystartup.easystartupcore.repos.forum.TopicRepo;
import java.util.Collections;
@@ -18,7 +22,7 @@ import java.util.Collections;
public class ForumController {
private final TopicRepo topicRepo;
private final Discussion discussion;
private final FilterService filterService;
@GetMapping("/forum")
public String forumMain(Model model) {
@@ -29,8 +33,9 @@ public class ForumController {
@GetMapping("/forum/my")
public String forumMy(Model model) {
val topic = Lists.newArrayList(topicRepo.findAll());
model.addAttribute("topics", topic);
return "forum";
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
val discussions = filterService.getDiscussionsByAuthor(user.getUsername());
model.addAttribute("discussions", discussions);
return "my-discussions";
}
}
@@ -1,14 +1,36 @@
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.DiscussionMessage;
import site.easystartup.easystartupcore.repos.forum.DiscussionMessageRepo;
import site.easystartup.easystartupcore.repos.forum.DiscussionRepo;
import java.util.List;
public interface FilterService {
List<DiscussionMessage> getMessagesByDiscussionId(long discussionId);
@Component
@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>