diff --git a/build.gradle b/build.gradle index 50a7a80..7084371 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 { @@ -43,3 +43,4 @@ dependencies { tasks.named('test') { useJUnitPlatform() } +targetCompatibility = JavaVersion.VERSION_16 diff --git a/src/main/java/site/easystartup/easystartupcore/forum/controller/ForumController.java b/src/main/java/site/easystartup/easystartupcore/forum/controller/ForumController.java deleted file mode 100644 index 70b3157..0000000 --- a/src/main/java/site/easystartup/easystartupcore/forum/controller/ForumController.java +++ /dev/null @@ -1,40 +0,0 @@ -package site.easystartup.easystartupcore.forum.controller; - -import lombok.RequiredArgsConstructor; -import lombok.val; -import org.springframework.beans.factory.annotation.Autowired; -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.forum.filter.FilterService; -import site.easystartup.easystartupcore.forum.repo.TopicRepo; - -@Controller -@RequiredArgsConstructor(onConstructor_ = @Autowired) -public class ForumController { - private final TopicRepo topicRepo; - - private final FilterService filterService; - - @GetMapping("/forum") - public String forumMain(Model model) { - val topic = topicRepo.findAll(); - model.addAttribute("topics", topic); - return "forum"; - } - - @GetMapping("/forum/my") - public String forumMy(Model model) { - User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - val discussions = filterService.getDiscussionsByAuthor(user.getUsername()); - model.addAttribute("discussions", discussions); - return "my-discussions"; - } - - @GetMapping("/forum/new") - public String forumNew() { - return "topic-new"; - } -} diff --git a/src/main/java/site/easystartup/easystartupcore/forum/domain/DiscussionStatus.java b/src/main/java/site/easystartup/easystartupcore/forum/domain/DiscussionStatus.java deleted file mode 100644 index 3eaa997..0000000 --- a/src/main/java/site/easystartup/easystartupcore/forum/domain/DiscussionStatus.java +++ /dev/null @@ -1,5 +0,0 @@ -package site.easystartup.easystartupcore.forum.domain; - -public enum DiscussionStatus { - OPEN, CLOSED; -} diff --git a/src/main/java/site/easystartup/easystartupcore/project/service/ProjectService.java b/src/main/java/site/easystartup/easystartupcore/project/service/ProjectService.java deleted file mode 100644 index 77ccff9..0000000 --- a/src/main/java/site/easystartup/easystartupcore/project/service/ProjectService.java +++ /dev/null @@ -1,65 +0,0 @@ -package site.easystartup.easystartupcore.project.service; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import site.easystartup.easystartupcore.project.domain.model.Project; -import site.easystartup.easystartupcore.project.repo.ProjectRepo; -import site.easystartup.easystartupcore.service.UserService; - -import java.security.Principal; -import java.util.Arrays; -import java.util.Set; - -@Service -@RequiredArgsConstructor -public class ProjectService { - private final ProjectRepo projectRepo; - private final UserService userService; - - - public Project createProject(Project project, Principal principal) { - - project.setTechnology(technologyToString(project.getTechnology())); - project.setOwner(userService.getUserByPrincipal(principal)); - - return projectRepo.save(project); - } -// -// public Project updateProject(Project map, Long projectId, Principal principal) { -// } -// -// public void deleteProject(Long projectId, Principal principal) { -// } -// -// public Project getProjectById(Long projectId) { -// } -// -// public Set getAllProjectsForUser(Long userId) { -// -// -// } -// -// public Set getAllProjectsWithTechnology(String technology) { -// } -// -// public Set getAllProjectsForCurrentUser(Principal principal) { -// } -// -// public Set getAllProjectsWithPosition(String nameOfPosition) { -// } -// -// public Object applayOnProject(Long projectId, Principal principal) { -// } -// -// public Object confirmParticipant(Long projectId, Long participantId, Principal principal) { -// } - - - - - private String technologyToString(String technology) { - StringBuilder technologyResult = new StringBuilder(); - Arrays.stream(technology.split(",")).forEach(tech -> technologyResult.append(tech.trim() + " ")); - return technologyResult.toString(); - } -} diff --git a/src/main/java/site/easystartup/easystartupcore/service/UserService.java b/src/main/java/site/easystartup/easystartupcore/service/UserService.java deleted file mode 100644 index b01d713..0000000 --- a/src/main/java/site/easystartup/easystartupcore/service/UserService.java +++ /dev/null @@ -1,20 +0,0 @@ -package site.easystartup.easystartupcore.service; - -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import site.easystartup.easystartupcore.domain.User; -import site.easystartup.easystartupcore.repo.UserRepo; - -import java.security.Principal; - -@Service -@RequiredArgsConstructor -public class UserService { - private final UserRepo userRepo; - - - - public User getUserByPrincipal(Principal principal) { - return userRepo.findByUsername(principal.getName()); - } -} diff --git a/src/main/java/site/easystartup/easystartupcore/EasyStartupApplication.java b/src/main/java/site/easystartup/web/EasyStartupApplication.java similarity index 56% rename from src/main/java/site/easystartup/easystartupcore/EasyStartupApplication.java rename to src/main/java/site/easystartup/web/EasyStartupApplication.java index cc79914..9046c6f 100644 --- a/src/main/java/site/easystartup/easystartupcore/EasyStartupApplication.java +++ b/src/main/java/site/easystartup/web/EasyStartupApplication.java @@ -1,15 +1,9 @@ -package site.easystartup.easystartupcore; +package site.easystartup.web; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; -import java.util.Collections; -import java.util.Map; - @RestController @SpringBootApplication public class EasyStartupApplication { diff --git a/src/main/java/site/easystartup/easystartupcore/ServletInitializer.java b/src/main/java/site/easystartup/web/ServletInitializer.java similarity index 90% rename from src/main/java/site/easystartup/easystartupcore/ServletInitializer.java rename to src/main/java/site/easystartup/web/ServletInitializer.java index 9f4aab7..9d8eb9d 100644 --- a/src/main/java/site/easystartup/easystartupcore/ServletInitializer.java +++ b/src/main/java/site/easystartup/web/ServletInitializer.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore; +package site.easystartup.web; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; diff --git a/src/main/java/site/easystartup/easystartupcore/auth/config/LoginMvcConfig.java b/src/main/java/site/easystartup/web/auth/config/LoginMvcConfig.java similarity index 88% rename from src/main/java/site/easystartup/easystartupcore/auth/config/LoginMvcConfig.java rename to src/main/java/site/easystartup/web/auth/config/LoginMvcConfig.java index b032536..e2d8782 100644 --- a/src/main/java/site/easystartup/easystartupcore/auth/config/LoginMvcConfig.java +++ b/src/main/java/site/easystartup/web/auth/config/LoginMvcConfig.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.auth.config; +package site.easystartup.web.auth.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; diff --git a/src/main/java/site/easystartup/easystartupcore/auth/config/WebSecurityConfig.java b/src/main/java/site/easystartup/web/auth/config/WebSecurityConfig.java similarity index 97% rename from src/main/java/site/easystartup/easystartupcore/auth/config/WebSecurityConfig.java rename to src/main/java/site/easystartup/web/auth/config/WebSecurityConfig.java index ecfb0a1..4c59848 100644 --- a/src/main/java/site/easystartup/easystartupcore/auth/config/WebSecurityConfig.java +++ b/src/main/java/site/easystartup/web/auth/config/WebSecurityConfig.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.auth.config; +package site.easystartup.web.auth.config; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; diff --git a/src/main/java/site/easystartup/easystartupcore/auth/controller/RegistrationController.java b/src/main/java/site/easystartup/web/auth/controller/RegistrationController.java similarity index 85% rename from src/main/java/site/easystartup/easystartupcore/auth/controller/RegistrationController.java rename to src/main/java/site/easystartup/web/auth/controller/RegistrationController.java index a097a07..662aed5 100644 --- a/src/main/java/site/easystartup/easystartupcore/auth/controller/RegistrationController.java +++ b/src/main/java/site/easystartup/web/auth/controller/RegistrationController.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.auth.controller; +package site.easystartup.web.auth.controller; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; @@ -7,9 +7,9 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; -import site.easystartup.easystartupcore.domain.Role; -import site.easystartup.easystartupcore.domain.User; -import site.easystartup.easystartupcore.repo.UserRepo; +import site.easystartup.web.domain.Role; +import site.easystartup.web.domain.User; +import site.easystartup.web.repo.UserRepo; import java.util.Collections; diff --git a/src/main/java/site/easystartup/easystartupcore/config/AppConfig.java b/src/main/java/site/easystartup/web/config/AppConfig.java similarity index 77% rename from src/main/java/site/easystartup/easystartupcore/config/AppConfig.java rename to src/main/java/site/easystartup/web/config/AppConfig.java index c2925ce..3316413 100644 --- a/src/main/java/site/easystartup/easystartupcore/config/AppConfig.java +++ b/src/main/java/site/easystartup/web/config/AppConfig.java @@ -1,18 +1,16 @@ -package site.easystartup.easystartupcore.config; +package site.easystartup.web.config; import org.modelmapper.ModelMapper; 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"}) +@ComponentScan(basePackages = {"site.easystartup.web"}) public class AppConfig { - @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); diff --git a/src/main/java/site/easystartup/easystartupcore/controller/MainController.java b/src/main/java/site/easystartup/web/controller/MainController.java similarity index 77% rename from src/main/java/site/easystartup/easystartupcore/controller/MainController.java rename to src/main/java/site/easystartup/web/controller/MainController.java index 3569212..389d69b 100644 --- a/src/main/java/site/easystartup/easystartupcore/controller/MainController.java +++ b/src/main/java/site/easystartup/web/controller/MainController.java @@ -1,7 +1,6 @@ -package site.easystartup.easystartupcore.controller; +package site.easystartup.web.controller; import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; @Controller diff --git a/src/main/java/site/easystartup/easystartupcore/domain/Role.java b/src/main/java/site/easystartup/web/domain/Role.java similarity index 52% rename from src/main/java/site/easystartup/easystartupcore/domain/Role.java rename to src/main/java/site/easystartup/web/domain/Role.java index 1f8a7ef..f76beae 100644 --- a/src/main/java/site/easystartup/easystartupcore/domain/Role.java +++ b/src/main/java/site/easystartup/web/domain/Role.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.domain; +package site.easystartup.web.domain; public enum Role { USER, PREMIUM, MODER, ADMIN; diff --git a/src/main/java/site/easystartup/easystartupcore/domain/User.java b/src/main/java/site/easystartup/web/domain/User.java similarity index 97% rename from src/main/java/site/easystartup/easystartupcore/domain/User.java rename to src/main/java/site/easystartup/web/domain/User.java index 4b79ad7..91e252a 100644 --- a/src/main/java/site/easystartup/easystartupcore/domain/User.java +++ b/src/main/java/site/easystartup/web/domain/User.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.domain; +package site.easystartup.web.domain; import lombok.*; import org.hibernate.Hibernate; diff --git a/src/main/java/site/easystartup/web/forum/controller/ForumController.java b/src/main/java/site/easystartup/web/forum/controller/ForumController.java new file mode 100644 index 0000000..7350e4e --- /dev/null +++ b/src/main/java/site/easystartup/web/forum/controller/ForumController.java @@ -0,0 +1,82 @@ +package site.easystartup.web.forum.controller; + +import lombok.RequiredArgsConstructor; +import lombok.val; +import org.springframework.beans.factory.annotation.Autowired; +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 org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import site.easystartup.web.forum.domain.Topic; +import site.easystartup.web.forum.filter.ForumFilterService; +import site.easystartup.web.forum.repo.TopicRepo; + +import java.util.Date; + +@Controller +@RequiredArgsConstructor(onConstructor_ = @Autowired) +public class ForumController { + private final TopicRepo topicRepo; + + private final ForumFilterService forumFilterService; + + @GetMapping("/forum") + public String forumMain(Model model) { + val topic = topicRepo.findAll(); + model.addAttribute("topics", topic); + return "/forum"; + } + + @GetMapping("/forum/my") + public String forumMy(Model model) { + User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + val discussions = forumFilterService.getDiscussionsByAuthor(user.getUsername()); + model.addAttribute("discussions", 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/web/forum/domain/Discussion.java similarity index 70% rename from src/main/java/site/easystartup/easystartupcore/forum/domain/Discussion.java rename to src/main/java/site/easystartup/web/forum/domain/Discussion.java index b901943..bd5bb25 100644 --- a/src/main/java/site/easystartup/easystartupcore/forum/domain/Discussion.java +++ b/src/main/java/site/easystartup/web/forum/domain/Discussion.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.forum.domain; +package site.easystartup.web.forum.domain; import lombok.*; import org.hibernate.Hibernate; @@ -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/domain/DiscussionMessage.java b/src/main/java/site/easystartup/web/forum/domain/DiscussionMessage.java similarity index 93% rename from src/main/java/site/easystartup/easystartupcore/forum/domain/DiscussionMessage.java rename to src/main/java/site/easystartup/web/forum/domain/DiscussionMessage.java index 99c93d3..bac887f 100644 --- a/src/main/java/site/easystartup/easystartupcore/forum/domain/DiscussionMessage.java +++ b/src/main/java/site/easystartup/web/forum/domain/DiscussionMessage.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.forum.domain; +package site.easystartup.web.forum.domain; import lombok.*; import org.hibernate.Hibernate; diff --git a/src/main/java/site/easystartup/web/forum/domain/DiscussionStatus.java b/src/main/java/site/easystartup/web/forum/domain/DiscussionStatus.java new file mode 100644 index 0000000..df9dfa5 --- /dev/null +++ b/src/main/java/site/easystartup/web/forum/domain/DiscussionStatus.java @@ -0,0 +1,5 @@ +package site.easystartup.web.forum.domain; + +public enum DiscussionStatus { + OPEN, CLOSED; +} diff --git a/src/main/java/site/easystartup/easystartupcore/forum/domain/Topic.java b/src/main/java/site/easystartup/web/forum/domain/Topic.java similarity index 94% rename from src/main/java/site/easystartup/easystartupcore/forum/domain/Topic.java rename to src/main/java/site/easystartup/web/forum/domain/Topic.java index 59cad8e..f564bb7 100644 --- a/src/main/java/site/easystartup/easystartupcore/forum/domain/Topic.java +++ b/src/main/java/site/easystartup/web/forum/domain/Topic.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.forum.domain; +package site.easystartup.web.forum.domain; import lombok.*; import org.hibernate.Hibernate; diff --git a/src/main/java/site/easystartup/easystartupcore/forum/filter/FilterService.java b/src/main/java/site/easystartup/web/forum/filter/ForumFilterService.java similarity index 54% rename from src/main/java/site/easystartup/easystartupcore/forum/filter/FilterService.java rename to src/main/java/site/easystartup/web/forum/filter/ForumFilterService.java index f027ecd..eda3a7c 100644 --- a/src/main/java/site/easystartup/easystartupcore/forum/filter/FilterService.java +++ b/src/main/java/site/easystartup/web/forum/filter/ForumFilterService.java @@ -1,19 +1,20 @@ -package site.easystartup.easystartupcore.forum.filter; +package site.easystartup.web.forum.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.forum.domain.Discussion; -import site.easystartup.easystartupcore.forum.domain.DiscussionMessage; -import site.easystartup.easystartupcore.forum.repo.DiscussionMessageRepo; -import site.easystartup.easystartupcore.forum.repo.DiscussionRepo; +import site.easystartup.web.forum.domain.Discussion; +import site.easystartup.web.forum.domain.DiscussionMessage; +import site.easystartup.web.forum.repo.DiscussionMessageRepo; +import site.easystartup.web.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/java/site/easystartup/easystartupcore/forum/repo/DiscussionMessageRepo.java b/src/main/java/site/easystartup/web/forum/repo/DiscussionMessageRepo.java similarity index 54% rename from src/main/java/site/easystartup/easystartupcore/forum/repo/DiscussionMessageRepo.java rename to src/main/java/site/easystartup/web/forum/repo/DiscussionMessageRepo.java index 36d17b0..352ae9c 100644 --- a/src/main/java/site/easystartup/easystartupcore/forum/repo/DiscussionMessageRepo.java +++ b/src/main/java/site/easystartup/web/forum/repo/DiscussionMessageRepo.java @@ -1,7 +1,7 @@ -package site.easystartup.easystartupcore.forum.repo; +package site.easystartup.web.forum.repo; import org.springframework.data.repository.CrudRepository; -import site.easystartup.easystartupcore.forum.domain.DiscussionMessage; +import site.easystartup.web.forum.domain.DiscussionMessage; public interface DiscussionMessageRepo extends CrudRepository { } diff --git a/src/main/java/site/easystartup/easystartupcore/forum/repo/DiscussionRepo.java b/src/main/java/site/easystartup/web/forum/repo/DiscussionRepo.java similarity index 53% rename from src/main/java/site/easystartup/easystartupcore/forum/repo/DiscussionRepo.java rename to src/main/java/site/easystartup/web/forum/repo/DiscussionRepo.java index 7fe0ba0..5585360 100644 --- a/src/main/java/site/easystartup/easystartupcore/forum/repo/DiscussionRepo.java +++ b/src/main/java/site/easystartup/web/forum/repo/DiscussionRepo.java @@ -1,7 +1,7 @@ -package site.easystartup.easystartupcore.forum.repo; +package site.easystartup.web.forum.repo; import org.springframework.data.repository.CrudRepository; -import site.easystartup.easystartupcore.forum.domain.Discussion; +import site.easystartup.web.forum.domain.Discussion; public interface DiscussionRepo extends CrudRepository { } diff --git a/src/main/java/site/easystartup/easystartupcore/forum/repo/TopicRepo.java b/src/main/java/site/easystartup/web/forum/repo/TopicRepo.java similarity index 53% rename from src/main/java/site/easystartup/easystartupcore/forum/repo/TopicRepo.java rename to src/main/java/site/easystartup/web/forum/repo/TopicRepo.java index 75fc36b..5cb6d89 100644 --- a/src/main/java/site/easystartup/easystartupcore/forum/repo/TopicRepo.java +++ b/src/main/java/site/easystartup/web/forum/repo/TopicRepo.java @@ -1,7 +1,7 @@ -package site.easystartup.easystartupcore.forum.repo; +package site.easystartup.web.forum.repo; import org.springframework.data.repository.CrudRepository; -import site.easystartup.easystartupcore.forum.domain.Topic; +import site.easystartup.web.forum.domain.Topic; public interface TopicRepo extends CrudRepository { } diff --git a/src/main/java/site/easystartup/easystartupcore/project/controller/ProjectController.java b/src/main/java/site/easystartup/web/project/controller/ProjectController.java similarity index 91% rename from src/main/java/site/easystartup/easystartupcore/project/controller/ProjectController.java rename to src/main/java/site/easystartup/web/project/controller/ProjectController.java index 2e224b6..242ea30 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/controller/ProjectController.java +++ b/src/main/java/site/easystartup/web/project/controller/ProjectController.java @@ -1,17 +1,15 @@ -package site.easystartup.easystartupcore.project.controller; +package site.easystartup.web.project.controller; import lombok.RequiredArgsConstructor; import org.modelmapper.ModelMapper; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; -import site.easystartup.easystartupcore.project.domain.model.Project; -import site.easystartup.easystartupcore.project.domain.payload.response.ResponseMessage; -import site.easystartup.easystartupcore.project.domain.validation.ResponseErrorValidation; -import site.easystartup.easystartupcore.project.dto.ProjectDto; -import site.easystartup.easystartupcore.project.service.ProjectService; +import site.easystartup.web.project.domain.model.Project; +import site.easystartup.web.project.domain.validation.ResponseErrorValidation; +import site.easystartup.web.project.dto.ProjectDto; +import site.easystartup.web.project.service.ProjectService; import java.security.Principal; import java.util.Map; diff --git a/src/main/java/site/easystartup/easystartupcore/project/domain/model/Participant.java b/src/main/java/site/easystartup/web/project/domain/model/Participant.java similarity index 85% rename from src/main/java/site/easystartup/easystartupcore/project/domain/model/Participant.java rename to src/main/java/site/easystartup/web/project/domain/model/Participant.java index efd7f75..9c20657 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/domain/model/Participant.java +++ b/src/main/java/site/easystartup/web/project/domain/model/Participant.java @@ -1,7 +1,7 @@ -package site.easystartup.easystartupcore.project.domain.model; +package site.easystartup.web.project.domain.model; import lombok.Data; -import site.easystartup.easystartupcore.domain.User; +import site.easystartup.web.domain.User; import javax.persistence.*; import javax.validation.constraints.NotNull; diff --git a/src/main/java/site/easystartup/easystartupcore/project/domain/model/Project.java b/src/main/java/site/easystartup/web/project/domain/model/Project.java similarity index 92% rename from src/main/java/site/easystartup/easystartupcore/project/domain/model/Project.java rename to src/main/java/site/easystartup/web/project/domain/model/Project.java index c8a6fa6..7dddb39 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/domain/model/Project.java +++ b/src/main/java/site/easystartup/web/project/domain/model/Project.java @@ -1,8 +1,8 @@ -package site.easystartup.easystartupcore.project.domain.model; +package site.easystartup.web.project.domain.model; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; -import site.easystartup.easystartupcore.domain.User; +import site.easystartup.web.domain.User; import javax.persistence.*; import javax.validation.constraints.NotNull; diff --git a/src/main/java/site/easystartup/easystartupcore/project/domain/payload/response/ResponseMessage.java b/src/main/java/site/easystartup/web/project/domain/payload/response/ResponseMessage.java similarity index 70% rename from src/main/java/site/easystartup/easystartupcore/project/domain/payload/response/ResponseMessage.java rename to src/main/java/site/easystartup/web/project/domain/payload/response/ResponseMessage.java index 4ba6cff..023f4f3 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/domain/payload/response/ResponseMessage.java +++ b/src/main/java/site/easystartup/web/project/domain/payload/response/ResponseMessage.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.project.domain.payload.response; +package site.easystartup.web.project.domain.payload.response; import lombok.Data; diff --git a/src/main/java/site/easystartup/easystartupcore/project/domain/validation/ResponseErrorValidation.java b/src/main/java/site/easystartup/web/project/domain/validation/ResponseErrorValidation.java similarity index 93% rename from src/main/java/site/easystartup/easystartupcore/project/domain/validation/ResponseErrorValidation.java rename to src/main/java/site/easystartup/web/project/domain/validation/ResponseErrorValidation.java index 9cc04e8..7dbe77f 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/domain/validation/ResponseErrorValidation.java +++ b/src/main/java/site/easystartup/web/project/domain/validation/ResponseErrorValidation.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.project.domain.validation; +package site.easystartup.web.project.domain.validation; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; diff --git a/src/main/java/site/easystartup/easystartupcore/project/dto/ParticipantDto.java b/src/main/java/site/easystartup/web/project/dto/ParticipantDto.java similarity index 87% rename from src/main/java/site/easystartup/easystartupcore/project/dto/ParticipantDto.java rename to src/main/java/site/easystartup/web/project/dto/ParticipantDto.java index ab1d020..12b5759 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/dto/ParticipantDto.java +++ b/src/main/java/site/easystartup/web/project/dto/ParticipantDto.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.project.dto; +package site.easystartup.web.project.dto; import lombok.Data; diff --git a/src/main/java/site/easystartup/easystartupcore/project/dto/ProjectDto.java b/src/main/java/site/easystartup/web/project/dto/ProjectDto.java similarity index 93% rename from src/main/java/site/easystartup/easystartupcore/project/dto/ProjectDto.java rename to src/main/java/site/easystartup/web/project/dto/ProjectDto.java index fad3467..e20c6b1 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/dto/ProjectDto.java +++ b/src/main/java/site/easystartup/web/project/dto/ProjectDto.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.project.dto; +package site.easystartup.web.project.dto; import lombok.Data; diff --git a/src/main/java/site/easystartup/easystartupcore/project/dto/UserDto.java b/src/main/java/site/easystartup/web/project/dto/UserDto.java similarity index 83% rename from src/main/java/site/easystartup/easystartupcore/project/dto/UserDto.java rename to src/main/java/site/easystartup/web/project/dto/UserDto.java index 200c7a3..6677658 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/dto/UserDto.java +++ b/src/main/java/site/easystartup/web/project/dto/UserDto.java @@ -1,7 +1,7 @@ -package site.easystartup.easystartupcore.project.dto; +package site.easystartup.web.project.dto; import lombok.Data; -import site.easystartup.easystartupcore.domain.Role; +import site.easystartup.web.domain.Role; import java.io.Serializable; import java.util.Set; diff --git a/src/main/java/site/easystartup/easystartupcore/project/repo/ProjectRepo.java b/src/main/java/site/easystartup/web/project/repo/ProjectRepo.java similarity index 61% rename from src/main/java/site/easystartup/easystartupcore/project/repo/ProjectRepo.java rename to src/main/java/site/easystartup/web/project/repo/ProjectRepo.java index fcceee5..da92bfa 100644 --- a/src/main/java/site/easystartup/easystartupcore/project/repo/ProjectRepo.java +++ b/src/main/java/site/easystartup/web/project/repo/ProjectRepo.java @@ -1,8 +1,8 @@ -package site.easystartup.easystartupcore.project.repo; +package site.easystartup.web.project.repo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; -import site.easystartup.easystartupcore.project.domain.model.Project; +import site.easystartup.web.project.domain.model.Project; @Repository public interface ProjectRepo extends JpaRepository { diff --git a/src/main/java/site/easystartup/web/project/service/ProjectService.java b/src/main/java/site/easystartup/web/project/service/ProjectService.java new file mode 100644 index 0000000..d96c074 --- /dev/null +++ b/src/main/java/site/easystartup/web/project/service/ProjectService.java @@ -0,0 +1,49 @@ +package site.easystartup.web.project.service; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import site.easystartup.web.project.domain.model.Project; +import site.easystartup.web.project.repo.ProjectRepo; + +import java.security.Principal; +import java.util.Set; + +@Service +@RequiredArgsConstructor +public class ProjectService { + private final ProjectRepo projectRepo; + + + public Project createProject(Project project, Principal principal) { + return null; + } + + public Project updateProject(Project map, Long projectId, Principal principal) { + } + + public void deleteProject(Long projectId, Principal principal) { + } + + public Project getProjectById(Long projectId) { + } + + public Set getAllProjectsForUser(Long userId) { + + + } + + public Set getAllProjectsWithTechnology(String technology) { + } + + public Set getAllProjectsForCurrentUser(Principal principal) { + } + + public Set getAllProjectsWithPosition(String nameOfPosition) { + } + + public Object applayOnProject(Long projectId, Principal principal) { + } + + public Object confirmParticipant(Long projectId, Long participantId, Principal principal) { + } +} diff --git a/src/main/java/site/easystartup/easystartupcore/repo/UserRepo.java b/src/main/java/site/easystartup/web/repo/UserRepo.java similarity index 62% rename from src/main/java/site/easystartup/easystartupcore/repo/UserRepo.java rename to src/main/java/site/easystartup/web/repo/UserRepo.java index 977f8e3..cefee76 100644 --- a/src/main/java/site/easystartup/easystartupcore/repo/UserRepo.java +++ b/src/main/java/site/easystartup/web/repo/UserRepo.java @@ -1,7 +1,7 @@ -package site.easystartup.easystartupcore.repo; +package site.easystartup.web.repo; import org.springframework.data.jpa.repository.JpaRepository; -import site.easystartup.easystartupcore.domain.User; +import site.easystartup.web.domain.User; public interface UserRepo extends JpaRepository { User findByUsername(String username); diff --git a/src/main/java/site/easystartup/easystartupcore/storag/config/FileConfig.java b/src/main/java/site/easystartup/web/storage/config/FileConfig.java similarity index 62% rename from src/main/java/site/easystartup/easystartupcore/storag/config/FileConfig.java rename to src/main/java/site/easystartup/web/storage/config/FileConfig.java index 7447a0e..e9e9f6a 100644 --- a/src/main/java/site/easystartup/easystartupcore/storag/config/FileConfig.java +++ b/src/main/java/site/easystartup/web/storage/config/FileConfig.java @@ -1,10 +1,10 @@ -package site.easystartup.easystartupcore.storag.config; +package site.easystartup.web.storage.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Scope; -import site.easystartup.easystartupcore.storag.service.FileLocalStorageService; -import site.easystartup.easystartupcore.storag.service.StorageService; +import site.easystartup.web.storage.service.FileLocalStorageService; +import site.easystartup.web.storage.service.StorageService; @Configuration public class FileConfig { diff --git a/src/main/java/site/easystartup/web/storage/controller/FileUploadController.java b/src/main/java/site/easystartup/web/storage/controller/FileUploadController.java new file mode 100644 index 0000000..4534288 --- /dev/null +++ b/src/main/java/site/easystartup/web/storage/controller/FileUploadController.java @@ -0,0 +1,70 @@ +package site.easystartup.web.storage.controller; + +import lombok.SneakyThrows; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.Resource; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder; +import site.easystartup.web.storage.service.StorageFileNotFoundException; +import site.easystartup.web.storage.service.StorageService; + +import java.util.stream.Collectors; + +@Controller +public class FileUploadController { + + private final StorageService storageService; + + @Autowired + public FileUploadController(StorageService storageService) { + this.storageService = storageService; + } + + @GetMapping("/upload") + public String listUploadedFiles(Model model) { + if(storageService.loadAll() == null) { + model.addAttribute("message", + "Storage is emptiy"); + return "upload"; + } + model.addAttribute("files", storageService.loadAll().map( + path -> MvcUriComponentsBuilder.fromMethodName(FileUploadController.class, + "serveFile", path.getFileName().toString()).build().toUri().toString()) + .collect(Collectors.toList())); + + return "upload"; + } + + @SneakyThrows + @GetMapping("/files/{filename:.+}") + @ResponseBody + public ResponseEntity serveFile(@PathVariable String filename) { + Resource file = storageService.load(filename); + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getFilename() + "\"").body(file); + } + + @PostMapping("/upload") + public String handleFileUpload(@RequestParam("file") MultipartFile file, + Model model) { + storageService.save(file); + model.addAttribute("message", + "You successfully uploaded " + file.getOriginalFilename() + "!"); + + return "upload"; + } + + + @ExceptionHandler(StorageFileNotFoundException.class) + public ResponseEntity handleStorageFileNotFound(StorageFileNotFoundException exc) { + return ResponseEntity.notFound().build(); + } + + + +} \ No newline at end of file diff --git a/src/main/java/site/easystartup/easystartupcore/storag/service/FileLocalStorageService.java b/src/main/java/site/easystartup/web/storage/service/FileLocalStorageService.java similarity index 97% rename from src/main/java/site/easystartup/easystartupcore/storag/service/FileLocalStorageService.java rename to src/main/java/site/easystartup/web/storage/service/FileLocalStorageService.java index ad17b32..f331aee 100644 --- a/src/main/java/site/easystartup/easystartupcore/storag/service/FileLocalStorageService.java +++ b/src/main/java/site/easystartup/web/storage/service/FileLocalStorageService.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.storag.service; +package site.easystartup.web.storage.service; import lombok.SneakyThrows; import org.springframework.core.io.Resource; diff --git a/src/main/java/site/easystartup/easystartupcore/storag/service/StorageFileNotFoundException.java b/src/main/java/site/easystartup/web/storage/service/StorageFileNotFoundException.java similarity index 77% rename from src/main/java/site/easystartup/easystartupcore/storag/service/StorageFileNotFoundException.java rename to src/main/java/site/easystartup/web/storage/service/StorageFileNotFoundException.java index 786b8ee..4f8e7da 100644 --- a/src/main/java/site/easystartup/easystartupcore/storag/service/StorageFileNotFoundException.java +++ b/src/main/java/site/easystartup/web/storage/service/StorageFileNotFoundException.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.storag.service; +package site.easystartup.web.storage.service; public class StorageFileNotFoundException extends RuntimeException { public StorageFileNotFoundException(String filename) { diff --git a/src/main/java/site/easystartup/easystartupcore/storag/service/StorageService.java b/src/main/java/site/easystartup/web/storage/service/StorageService.java similarity index 87% rename from src/main/java/site/easystartup/easystartupcore/storag/service/StorageService.java rename to src/main/java/site/easystartup/web/storage/service/StorageService.java index 1dcf094..e1ca5c5 100644 --- a/src/main/java/site/easystartup/easystartupcore/storag/service/StorageService.java +++ b/src/main/java/site/easystartup/web/storage/service/StorageService.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore.storag.service; +package site.easystartup.web.storage.service; import org.springframework.core.io.Resource; import org.springframework.web.multipart.MultipartFile; diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index dd54a6b..96ccdf5 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -8,5 +8,4 @@ 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 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

diff --git a/src/main/resources/templates/upload.html b/src/main/resources/templates/upload.html new file mode 100644 index 0000000..911332d --- /dev/null +++ b/src/main/resources/templates/upload.html @@ -0,0 +1,27 @@ + + + +
+

+

+ +
+
+ + + +
File to upload:
+ +
+
+ + + + + \ No newline at end of file diff --git a/src/test/java/site/easystartup/easystartupcore/EasyStartupApplicationTests.java b/src/test/java/site/easystartup/web/EasyStartupApplicationTests.java similarity index 81% rename from src/test/java/site/easystartup/easystartupcore/EasyStartupApplicationTests.java rename to src/test/java/site/easystartup/web/EasyStartupApplicationTests.java index f9fc8b9..e646733 100644 --- a/src/test/java/site/easystartup/easystartupcore/EasyStartupApplicationTests.java +++ b/src/test/java/site/easystartup/web/EasyStartupApplicationTests.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore; +package site.easystartup.web; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; diff --git a/src/test/java/site/easystartup/easystartupcore/FileUploadTests.java b/src/test/java/site/easystartup/web/FileUploadTests.java similarity index 92% rename from src/test/java/site/easystartup/easystartupcore/FileUploadTests.java rename to src/test/java/site/easystartup/web/FileUploadTests.java index b35cd6b..4d6e5b7 100644 --- a/src/test/java/site/easystartup/easystartupcore/FileUploadTests.java +++ b/src/test/java/site/easystartup/web/FileUploadTests.java @@ -1,4 +1,4 @@ -package site.easystartup.easystartupcore; +package site.easystartup.web; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; @@ -10,8 +10,8 @@ import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; import org.springframework.mock.web.MockMultipartFile; import org.springframework.test.web.servlet.MockMvc; -import site.easystartup.easystartupcore.storag.service.StorageFileNotFoundException; -import site.easystartup.easystartupcore.storag.service.StorageService; +import site.easystartup.web.storage.service.StorageFileNotFoundException; +import site.easystartup.web.storage.service.StorageService; import java.nio.file.Files; import java.nio.file.Path;