Added FilterService.java and my-discussions page
This commit is contained in:
1 parent
e6ce921af1
commit
c5df48f563
6 files changed
+82
-40
No files matched your search
+1
-1
@@ -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>
|
||||||
Reference in new issue
Block a user