From 9f464fe8595a49ecbdf6ae9c2e2ca7583ac31090 Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 16 Mar 2020 13:56:05 +0100 Subject: [PATCH 01/24] init csv support --- build.gradle | 1 + .../gruppen2/controller/APIController.java | 12 ++++++---- .../mops/gruppen2/service/CsvService.java | 22 +++++++++++++++++++ 3 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 src/main/java/mops/gruppen2/service/CsvService.java diff --git a/build.gradle b/build.gradle index 35f2c5d..d5bc275 100644 --- a/build.gradle +++ b/build.gradle @@ -66,6 +66,7 @@ dependencies { implementation 'io.springfox:springfox-swagger2:2.9.2' implementation 'io.springfox:springfox-swagger-ui:2.9.2' implementation 'com.github.javafaker:javafaker:1.0.2' + implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.10.2' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index f4d18ef..33da9a3 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -7,12 +7,11 @@ import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; import mops.gruppen2.domain.event.Event; -import mops.gruppen2.service.APIFormatterService; -import mops.gruppen2.service.EventService; -import mops.gruppen2.service.GroupService; -import mops.gruppen2.service.SerializationService; +import mops.gruppen2.service.*; import org.springframework.web.bind.annotation.*; +import java.io.IOException; +import java.io.InputStream; import java.util.List; /** @@ -55,4 +54,9 @@ public class APIController { List groups = groupService.projectEventList(eventList); return groups.get(0); } + + @PostMapping(value = "/uploadcsv", consumes = "text/csv") + public void uploadCsv(@RequestBody InputStream body) throws IOException { + System.out.println(CsvService.read(body)); + } } diff --git a/src/main/java/mops/gruppen2/service/CsvService.java b/src/main/java/mops/gruppen2/service/CsvService.java new file mode 100644 index 0000000..da8293e --- /dev/null +++ b/src/main/java/mops/gruppen2/service/CsvService.java @@ -0,0 +1,22 @@ +package mops.gruppen2.service; + +import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.dataformat.csv.CsvMapper; +import com.fasterxml.jackson.dataformat.csv.CsvSchema; +import mops.gruppen2.domain.User; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +public class CsvService { + + public static List read(InputStream stream) throws IOException { + CsvMapper mapper = new CsvMapper(); + + CsvSchema schema = mapper.schemaFor(User.class).withHeader().withColumnReordering(true); + ObjectReader reader = mapper.readerFor(User.class).with(schema); + + return reader.readValues(stream).readAll(); + } +} From 2c3531657dbba47887e92319fe7bb5e41aacf3bd Mon Sep 17 00:00:00 2001 From: Christoph Date: Mon, 16 Mar 2020 14:09:30 +0100 Subject: [PATCH 02/24] csv proof of concept --- src/main/java/mops/gruppen2/controller/APIController.java | 6 ++++++ src/main/java/mops/gruppen2/domain/User.java | 5 +++-- src/main/resources/templates/create.html | 6 +++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index 33da9a3..d0c46ce 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -9,6 +9,7 @@ import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; import mops.gruppen2.domain.event.Event; import mops.gruppen2.service.*; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.io.InputStream; @@ -59,4 +60,9 @@ public class APIController { public void uploadCsv(@RequestBody InputStream body) throws IOException { System.out.println(CsvService.read(body)); } + + @PostMapping(value = "/uploadcsv", consumes = "multipart/form-data") + public void uploadMultipart(@RequestParam("file") MultipartFile file) throws IOException { + System.out.println(CsvService.read(file.getInputStream())); + } } diff --git a/src/main/java/mops/gruppen2/domain/User.java b/src/main/java/mops/gruppen2/domain/User.java index c929135..5e103ae 100644 --- a/src/main/java/mops/gruppen2/domain/User.java +++ b/src/main/java/mops/gruppen2/domain/User.java @@ -3,10 +3,11 @@ package mops.gruppen2.domain; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.Value; +import lombok.NoArgsConstructor; -@Value +@Data @AllArgsConstructor +@NoArgsConstructor @EqualsAndHashCode(exclude = {"givenname", "familyname", "email"}) public class User { String user_id; diff --git a/src/main/resources/templates/create.html b/src/main/resources/templates/create.html index 08c2b7e..627e534 100644 --- a/src/main/resources/templates/create.html +++ b/src/main/resources/templates/create.html @@ -57,7 +57,11 @@ +
+ + +
- \ No newline at end of file + From db11178ccde04fa567ac44e34e3296fd0871541d Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 17 Mar 2020 13:25:37 +0100 Subject: [PATCH 03/24] Add db table for invite links Co-authored-by: [Mahgs] Co-authored-by: Christoph --- src/main/resources/schema.sql | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 9a3fe1f..27cc591 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -10,3 +10,11 @@ CREATE TABLE event event_payload VARCHAR(255), visibility BOOLEAN ); + +DROP TABLE IF EXISTS invite; + +CREATE TABLE invite +( + group_id INT FOREIGN KEY REFERENCES event(group_id), + invite_link varchar(255) +) From e045dc54eef8c85756e1f7f6a20a83fa071d48d0 Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 17 Mar 2020 13:33:02 +0100 Subject: [PATCH 04/24] Add InviteLinkDTO + add dto folder Co-authored-by: [Mahgs] Co-authored-by: Christoph --- .../gruppen2/controller/Gruppen2Controller.java | 13 +++++-------- .../mops/gruppen2/domain/{ => dto}/EventDTO.java | 2 +- .../mops/gruppen2/domain/dto/InviteLinkDTO.java | 13 +++++++++++++ .../mops/gruppen2/repository/EventRepository.java | 2 +- .../mops/gruppen2/service/ControllerService.java | 9 ++++++--- .../java/mops/gruppen2/service/EventService.java | 2 +- .../java/mops/gruppen2/service/GroupService.java | 2 +- .../mops/gruppen2/service/SerializationService.java | 1 - .../mops/gruppen2/service/EventServiceTest.java | 6 +++--- 9 files changed, 31 insertions(+), 19 deletions(-) rename src/main/java/mops/gruppen2/domain/{ => dto}/EventDTO.java (89%) create mode 100644 src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 6999a81..11f8209 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -3,7 +3,6 @@ package mops.gruppen2.controller; import mops.gruppen2.config.Gruppen2Config; import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; - import mops.gruppen2.domain.User; import mops.gruppen2.security.Account; import mops.gruppen2.service.*; @@ -12,8 +11,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.client.RestTemplate; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.server.ResponseStatusException; import javax.annotation.security.RolesAllowed; @@ -86,11 +87,7 @@ public class Gruppen2Controller { @RequestParam(value = "visibility", required = false) Boolean visibility) { Account account = keyCloakService.createAccountFromPrincipal(token); - if (visibility == null) { - visibility = true; - }else{ - visibility = false; - } + visibility = visibility == null; controllerService.createGroup(account, title, beschreibung, visibility); return "redirect:/gruppen2/"; diff --git a/src/main/java/mops/gruppen2/domain/EventDTO.java b/src/main/java/mops/gruppen2/domain/dto/EventDTO.java similarity index 89% rename from src/main/java/mops/gruppen2/domain/EventDTO.java rename to src/main/java/mops/gruppen2/domain/dto/EventDTO.java index 764a454..e3f5462 100644 --- a/src/main/java/mops/gruppen2/domain/EventDTO.java +++ b/src/main/java/mops/gruppen2/domain/dto/EventDTO.java @@ -1,4 +1,4 @@ -package mops.gruppen2.domain; +package mops.gruppen2.domain.dto; import lombok.Data; import org.springframework.data.annotation.Id; diff --git a/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java b/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java new file mode 100644 index 0000000..14beb7d --- /dev/null +++ b/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java @@ -0,0 +1,13 @@ +package mops.gruppen2.domain.dto; + +import lombok.Data; +import org.springframework.data.annotation.Id; +import org.springframework.data.relational.core.mapping.Table; + +@Table("invite") +@Data +public class InviteLinkDTO { + @Id + private Long group_id; + private String invite_link; +} diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index 4bbd2d7..1cdfd01 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -1,6 +1,6 @@ package mops.gruppen2.repository; -import mops.gruppen2.domain.EventDTO; +import mops.gruppen2.domain.dto.EventDTO; import org.springframework.data.jdbc.repository.query.Query; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.query.Param; diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index 56173c1..2bd70c3 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -7,7 +7,10 @@ import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.event.*; import mops.gruppen2.security.Account; import org.springframework.stereotype.Service; -import java.util.*; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; @Service public class ControllerService { @@ -29,9 +32,9 @@ public class ControllerService { */ public void createGroup(Account account, String title, String description, Boolean visibility) { Visibility visibility1; - if (visibility){ + if (visibility) { visibility1 = Visibility.PUBLIC; - }else{ + } else { visibility1 = Visibility.PRIVATE; } List eventList = new ArrayList<>(); diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index d6fb3da..f545456 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -1,8 +1,8 @@ package mops.gruppen2.service; import com.fasterxml.jackson.core.JsonProcessingException; -import mops.gruppen2.domain.EventDTO; import mops.gruppen2.domain.Visibility; +import mops.gruppen2.domain.dto.EventDTO; import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.Event; import mops.gruppen2.repository.EventRepository; diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index 2faf17e..2b0ef3c 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -1,8 +1,8 @@ package mops.gruppen2.service; -import mops.gruppen2.domain.EventDTO; import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; +import mops.gruppen2.domain.dto.EventDTO; import mops.gruppen2.domain.event.Event; import mops.gruppen2.repository.EventRepository; import org.springframework.stereotype.Service; diff --git a/src/main/java/mops/gruppen2/service/SerializationService.java b/src/main/java/mops/gruppen2/service/SerializationService.java index 86b00ed..3c7f8ba 100644 --- a/src/main/java/mops/gruppen2/service/SerializationService.java +++ b/src/main/java/mops/gruppen2/service/SerializationService.java @@ -2,7 +2,6 @@ package mops.gruppen2.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import mops.gruppen2.domain.EventDTO; import mops.gruppen2.domain.event.Event; import mops.gruppen2.repository.EventRepository; import org.slf4j.Logger; diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index 4991baf..122e219 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -1,8 +1,8 @@ package mops.gruppen2.service; -import mops.gruppen2.domain.EventDTO; import mops.gruppen2.domain.GroupType; import mops.gruppen2.domain.Visibility; +import mops.gruppen2.domain.dto.EventDTO; import mops.gruppen2.domain.event.AddUserEvent; import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.repository.EventRepository; @@ -14,7 +14,7 @@ import org.mockito.junit.MockitoJUnitRunner; import java.util.ArrayList; import java.util.List; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -86,4 +86,4 @@ class EventServiceTest { assertEquals(eventDTO.isVisibility(), false); } -} \ No newline at end of file +} From 906585ce9aeaa4176da28557f2533cef9b5a81f6 Mon Sep 17 00:00:00 2001 From: "[Mahgs]" Date: Tue, 17 Mar 2020 13:42:35 +0100 Subject: [PATCH 05/24] added InviteLinkRepository Co-authored-by: Christoph --- .../gruppen2/repository/InviteLinkRepository.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/main/java/mops/gruppen2/repository/InviteLinkRepository.java diff --git a/src/main/java/mops/gruppen2/repository/InviteLinkRepository.java b/src/main/java/mops/gruppen2/repository/InviteLinkRepository.java new file mode 100644 index 0000000..ee70999 --- /dev/null +++ b/src/main/java/mops/gruppen2/repository/InviteLinkRepository.java @@ -0,0 +1,13 @@ +package mops.gruppen2.repository; + +import mops.gruppen2.domain.dto.InviteLinkDTO; +import org.springframework.data.jdbc.repository.query.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +@Repository +public interface InviteLinkRepository extends CrudRepository { + @Query("select invite_link from inviteLink where group_id =:id") + String findLinkByGroupID(@Param("id") Long GroupID); +} From 6e067d1b4740028ce6481ddb72215847fb20f1a4 Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 17 Mar 2020 16:16:58 +0100 Subject: [PATCH 06/24] Fix InviteLink DB Schema + Implement Frontend InviteLink Handling Co-authored-by: [Mahgs] Co-authored-by: Christoph --- .../controller/Gruppen2Controller.java | 36 ++++++++++++------- .../gruppen2/domain/dto/InviteLinkDTO.java | 7 ++-- .../gruppen2/repository/EventRepository.java | 2 +- .../repository/InviteLinkRepository.java | 10 ++++-- .../gruppen2/service/ControllerService.java | 27 +++++++++----- src/main/resources/application-dev.properties | 10 +++--- src/main/resources/schema.sql | 7 ++-- 7 files changed, 62 insertions(+), 37 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 11f8209..6eb18d4 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -11,10 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; 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 org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.*; import org.springframework.web.server.ResponseStatusException; import javax.annotation.security.RolesAllowed; @@ -33,13 +30,15 @@ public class Gruppen2Controller { private final GroupService groupService; private final UserService userService; private final ControllerService controllerService; + private final InviteLinkRepositoryService inviteLinkRepositoryService; - public Gruppen2Controller(KeyCloakService keyCloakService, EventService eventService, GroupService groupService, UserService userService, ControllerService controllerService) { + public Gruppen2Controller(KeyCloakService keyCloakService, EventService eventService, GroupService groupService, UserService userService, ControllerService controllerService, InviteLinkRepositoryService inviteLinkRepositoryService) { this.keyCloakService = keyCloakService; this.eventService = eventService; this.groupService = groupService; this.userService = userService; this.controllerService = controllerService; + this.inviteLinkRepositoryService = inviteLinkRepositoryService; } /** @@ -57,7 +56,7 @@ public class Gruppen2Controller { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); model.addAttribute("gruppen", userService.getUserGroups(user.getUser_id())); - model.addAttribute("user",user); + model.addAttribute("user", user); return "index"; } @@ -72,11 +71,11 @@ public class Gruppen2Controller { @GetMapping("/findGroup") public String findGroup(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "suchbegriff", required = false) String suchbegriff) throws EventException { List groupse = new ArrayList<>(); - if(suchbegriff!=null) { + if (suchbegriff != null) { groupse = groupService.findGroupWith(suchbegriff); } model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); - model.addAttribute("gruppen",groupse); + model.addAttribute("gruppen", groupse); return "search"; } @@ -95,12 +94,12 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @GetMapping("/details") - public String showGroupDetails(KeycloakAuthenticationToken token, Model model, @RequestParam (value="id") Long id) throws EventException, ResponseStatusException { + public String showGroupDetails(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "id") Long id) throws EventException, ResponseStatusException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); Group group = userService.getGroupById(id); - Account account = keyCloakService.createAccountFromPrincipal (token); + Account account = keyCloakService.createAccountFromPrincipal(token); User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); - if(group!= null) { + if (group != null) { model.addAttribute("group", group); model.addAttribute("role", group.getRoles().get(user.getUser_id())); return "detailsMember"; @@ -110,14 +109,25 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @GetMapping("/detailsSearch") - public String showGroupDetailsNoMember (KeycloakAuthenticationToken token, Model model, @RequestParam (value="id") Long id) throws EventException { + public String showGroupDetailsNoMember(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "id") Long id) throws EventException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); Group group = userService.getGroupById(id); - if (group!=null) { + if (group != null) { model.addAttribute("group", group); return "detailsNoMember"; } throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Group not found"); } + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @GetMapping("/acceptinvite/{link}") + public String acceptInvite(KeycloakAuthenticationToken token, Model model, @PathVariable String link) throws EventException { + model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); + Group group = userService.getGroupById(inviteLinkRepositoryService.findGroupIdByInvite(link)); + if (group != null) { + model.addAttribute("group", group); + return "redirect:/gruppen2/detailsSearch?id=" + group.getId(); + } + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Group not found"); + } } diff --git a/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java b/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java index 14beb7d..cac347a 100644 --- a/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java +++ b/src/main/java/mops/gruppen2/domain/dto/InviteLinkDTO.java @@ -1,13 +1,16 @@ package mops.gruppen2.domain.dto; +import lombok.AllArgsConstructor; import lombok.Data; import org.springframework.data.annotation.Id; import org.springframework.data.relational.core.mapping.Table; @Table("invite") @Data +@AllArgsConstructor public class InviteLinkDTO { @Id - private Long group_id; - private String invite_link; + Long link_id; + Long group_id; + String invite_link; } diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index 1cdfd01..5eb0139 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -19,7 +19,7 @@ public interface EventRepository extends CrudRepository { //@Query("SELECT * FROM event WHERE event_id > ?#{[0]}") //Iterable findNewEventSinceStatus(@Param("status") Long status); - @Query("select * from event where visibility =:vis") + @Query("select * from event where visibility =:vis") List findEventDTOByVisibility(@Param("vis") Boolean visibility); @Query("SELECT DISTINCT group_id FROM event WHERE event_id > :status") diff --git a/src/main/java/mops/gruppen2/repository/InviteLinkRepository.java b/src/main/java/mops/gruppen2/repository/InviteLinkRepository.java index ee70999..4cd5932 100644 --- a/src/main/java/mops/gruppen2/repository/InviteLinkRepository.java +++ b/src/main/java/mops/gruppen2/repository/InviteLinkRepository.java @@ -7,7 +7,11 @@ import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository -public interface InviteLinkRepository extends CrudRepository { - @Query("select invite_link from inviteLink where group_id =:id") - String findLinkByGroupID(@Param("id") Long GroupID); +public interface InviteLinkRepository extends CrudRepository { + + //@Query("SELECT invite_link FROM invite WHERE group_id = :id") + //String findLinkByGroupID(@Param("id") Long GroupID); + + @Query("SELECT group_id FROM invite WHERE invite_link = :link") + Long findGroupIdByLink(@Param("link") String link); } diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index 2bd70c3..e6dd3ef 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -11,14 +11,17 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.UUID; @Service public class ControllerService { private final EventService eventService; + private final InviteLinkRepositoryService inviteLinkRepositoryService; - public ControllerService(EventService eventService) { + public ControllerService(EventService eventService, InviteLinkRepositoryService inviteLinkRepositoryService) { this.eventService = eventService; + this.inviteLinkRepositoryService = inviteLinkRepositoryService; } /** @@ -31,25 +34,31 @@ public class ControllerService { * @param description Gruppenbeschreibung */ public void createGroup(Account account, String title, String description, Boolean visibility) { + Long groupID = eventService.checkGroup(); Visibility visibility1; if (visibility) { visibility1 = Visibility.PUBLIC; } else { visibility1 = Visibility.PRIVATE; + createInviteLink(groupID); } List eventList = new ArrayList<>(); - Collections.addAll(eventList, new CreateGroupEvent(eventService.checkGroup(), account.getName(), null , GroupType.LECTURE, visibility1), - new AddUserEvent(eventService.checkGroup(), account.getName(),account.getGivenname(),account.getFamilyname(),account.getEmail()), - new UpdateRoleEvent(eventService.checkGroup(), account.getName(), Role.ADMIN), - new UpdateGroupTitleEvent(eventService.checkGroup(), account.getName(), title), - new UpdateGroupDescriptionEvent(eventService.checkGroup(), account.getName(), description), - new UpdateRoleEvent(eventService.checkGroup(),account.getName(), Role.ADMIN)); + Collections.addAll(eventList, new CreateGroupEvent(groupID, account.getName(), null, GroupType.LECTURE, visibility1), + new AddUserEvent(groupID, account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()), + new UpdateRoleEvent(groupID, account.getName(), Role.ADMIN), + new UpdateGroupTitleEvent(groupID, account.getName(), title), + new UpdateGroupDescriptionEvent(groupID, account.getName(), description), + new UpdateRoleEvent(groupID, account.getName(), Role.ADMIN)); eventService.saveEventList(eventList); } - public void addUser(Account account, Group group){ - AddUserEvent addUserEvent = new AddUserEvent(eventService.checkGroup(),group.getId(),account.getName(),account.getGivenname(),account.getFamilyname(),account.getEmail()); + private void createInviteLink(Long group_id) { + inviteLinkRepositoryService.saveInvite(group_id, UUID.randomUUID()); + } + + public void addUser(Account account, Group group) { + AddUserEvent addUserEvent = new AddUserEvent(eventService.checkGroup(), group.getId(), account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); eventService.saveEvent(addUserEvent); } } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index 79a9404..ee53a97 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -1,23 +1,21 @@ server.port=8080 application.name=gruppen2 - logging.pattern.console=[${application.name}],%magenta(%-5level), %d{dd-MM-yyyy HH:mm:ss.SSS}, %highlight(%msg),%thread,%logger.%M%n - spring.datasource.url=jdbc:h2:mem:blogdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password= spring.jpa.database-platform=org.hibernate.dialect.H2Dialect - +spring.h2.console.enabled=true +logging.level.org.springframework.jdbc.core=DEBUG keycloak.principal-attribute=preferred_username keycloak.auth-server-url=https://keycloak.cs.hhu.de/auth keycloak.realm=MOPS - hhu_keycloak.token-uri=https://keycloak.cs.hhu.de/auth/realms/MOPS/protocol/openid-connect/token keycloak.resource=gruppenfindung -keycloak.credentials.secret= fc6ebf10-8c63-4e71-a667-4eae4e8209a1 +keycloak.credentials.secret=fc6ebf10-8c63-4e71-a667-4eae4e8209a1 keycloak.verify-token-audience=true keycloak.use-resource-role-mappings=true keycloak.autodetect-bearer-only=true -keycloak.confidential-port= 443 \ No newline at end of file +keycloak.confidential-port= 443 diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql index 27cc591..5ad3f09 100644 --- a/src/main/resources/schema.sql +++ b/src/main/resources/schema.sql @@ -15,6 +15,7 @@ DROP TABLE IF EXISTS invite; CREATE TABLE invite ( - group_id INT FOREIGN KEY REFERENCES event(group_id), - invite_link varchar(255) -) + link_id INT PRIMARY KEY AUTO_INCREMENT, + group_id INT NOT NULL, + invite_link varchar(255) NOT NULL +); From aa67bd2e8858b31b238b3adaf7a8eaef7457b3fa Mon Sep 17 00:00:00 2001 From: Christoph Date: Tue, 17 Mar 2020 16:55:32 +0100 Subject: [PATCH 07/24] Add missing service Co-authored-by: [Mahgs] Co-authored-by: Christoph --- .../service/InviteLinkRepositoryService.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/main/java/mops/gruppen2/service/InviteLinkRepositoryService.java diff --git a/src/main/java/mops/gruppen2/service/InviteLinkRepositoryService.java b/src/main/java/mops/gruppen2/service/InviteLinkRepositoryService.java new file mode 100644 index 0000000..4bc082d --- /dev/null +++ b/src/main/java/mops/gruppen2/service/InviteLinkRepositoryService.java @@ -0,0 +1,26 @@ +package mops.gruppen2.service; + +import mops.gruppen2.domain.dto.InviteLinkDTO; +import mops.gruppen2.repository.InviteLinkRepository; +import org.springframework.stereotype.Service; + +import java.util.UUID; + +@Service +public class InviteLinkRepositoryService { + + private final InviteLinkRepository inviteLinkRepository; + + public InviteLinkRepositoryService(InviteLinkRepository inviteLinkRepository) { + this.inviteLinkRepository = inviteLinkRepository; + } + + public long findGroupIdByInvite(String link) { + return inviteLinkRepository.findGroupIdByLink(link); + } + + public void saveInvite(Long group_id, UUID link) { + inviteLinkRepository.save(new InviteLinkDTO(null, group_id, link.toString())); + } + +} From 179062eed9d01e12e791f566842ed13006a44eb1 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Tue, 17 Mar 2020 17:07:30 +0100 Subject: [PATCH 08/24] Add createLecture for orga only Co-Authored-By: andibuls Co-Authored-By: tomvahl Co-Authored-By: Lukas Ettel --- .../mops/gruppen2/controller/Gruppen2Controller.java | 8 +++++++- src/main/resources/templates/createLecture.html | 10 ++++++++++ src/main/resources/templates/index.html | 4 ++++ 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/templates/createLecture.html diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 8ab6403..27ca179 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -57,13 +57,19 @@ public class Gruppen2Controller { public String index(KeycloakAuthenticationToken token, Model model) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); User user = new User(account.getName(), account.getGivenname(), account.getFamilyname(), account.getEmail()); - model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); model.addAttribute("gruppen", userService.getUserGroups(user)); model.addAttribute("user",user); return "index"; } + @RolesAllowed({"ROLE_orga", "ROLE_actuator)"}) + @GetMapping("/createLecture") + public String createLecture(KeycloakAuthenticationToken token, Model model) { + model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); + return "createLecture"; + } + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @GetMapping("/createGroup") public String createGroup(KeycloakAuthenticationToken token, Model model) { diff --git a/src/main/resources/templates/createLecture.html b/src/main/resources/templates/createLecture.html new file mode 100644 index 0000000..566549b --- /dev/null +++ b/src/main/resources/templates/createLecture.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + \ No newline at end of file diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 9b9ea12..6ebad4a 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -21,6 +21,10 @@
  • Suche
  • + +
  • + Veranstaltung +
  • From b431361eec0751f4f70c53ff709262c87d0fe43b Mon Sep 17 00:00:00 2001 From: "[Mahgs]" Date: Wed, 18 Mar 2020 13:19:19 +0100 Subject: [PATCH 09/24] merged with master --- src/main/java/mops/gruppen2/service/GroupService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index a4b034b..e6adcb3 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -1,6 +1,6 @@ package mops.gruppen2.service; -import mops.gruppen2.domain.EventDTO; +import mops.gruppen2.domain.dto.EventDTO; import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.Visibility; From eabbcc7e042dfb596a1dac62e496db91b47c9d15 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 13:35:41 +0100 Subject: [PATCH 10/24] Add jackson dependency Co-Authored-By: tomvahl Co-Authored-By: andibuls Co-Authored-By: Lukas Ettel --- build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle b/build.gradle index 647ef39..d3c5650 100644 --- a/build.gradle +++ b/build.gradle @@ -78,6 +78,8 @@ dependencies { compile group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: '2.4.0.RELEASE' + compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-csv:2.10.3' + testImplementation 'org.assertj:assertj-core:3.15.0' testImplementation('org.springframework.boot:spring-boot-starter-test') { exclude group: 'org.junit.vintage', module: 'junit-vintage-engine' From af573f2353c3f04d7bb5c0eefec4ce2b95ac50a8 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 13:36:22 +0100 Subject: [PATCH 11/24] Add list entry in html Co-Authored-By: tomvahl Co-Authored-By: andibuls Co-Authored-By: Lukas Ettel --- src/main/resources/templates/create.html | 3 +++ src/main/resources/templates/detailsMember.html | 3 +++ src/main/resources/templates/detailsNoMember.html | 3 +++ src/main/resources/templates/search.html | 3 +++ 4 files changed, 12 insertions(+) diff --git a/src/main/resources/templates/create.html b/src/main/resources/templates/create.html index f8604bb..c43add0 100644 --- a/src/main/resources/templates/create.html +++ b/src/main/resources/templates/create.html @@ -22,6 +22,9 @@
  • Suche
  • +
  • + Veranstaltung +
  • diff --git a/src/main/resources/templates/detailsMember.html b/src/main/resources/templates/detailsMember.html index 6086619..935d4d1 100644 --- a/src/main/resources/templates/detailsMember.html +++ b/src/main/resources/templates/detailsMember.html @@ -21,6 +21,9 @@
  • Suche
  • +
  • + Veranstaltung +
  • diff --git a/src/main/resources/templates/detailsNoMember.html b/src/main/resources/templates/detailsNoMember.html index 44f1dfd..eb8a506 100644 --- a/src/main/resources/templates/detailsNoMember.html +++ b/src/main/resources/templates/detailsNoMember.html @@ -21,6 +21,9 @@
  • Suche
  • +
  • + Veranstaltung +
  • diff --git a/src/main/resources/templates/search.html b/src/main/resources/templates/search.html index 624e933..b06443b 100644 --- a/src/main/resources/templates/search.html +++ b/src/main/resources/templates/search.html @@ -21,6 +21,9 @@
  • Suche
  • +
  • + Veranstaltung +
  • From 051196f7668ead36a4abcde7c2d8f8b9957679ad Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 13:36:57 +0100 Subject: [PATCH 12/24] Add CSV methods and createLecture.html Co-Authored-By: tomvahl Co-Authored-By: andibuls Co-Authored-By: Lukas Ettel --- .../gruppen2/controller/APIController.java | 5 +- .../controller/Gruppen2Controller.java | 12 ++++ .../resources/templates/createLecture.html | 64 +++++++++++++++++-- 3 files changed, 73 insertions(+), 8 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index 0963fbd..8024114 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -7,10 +7,7 @@ import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.apiWrapper.UpdatedGroupRequestMapper; import mops.gruppen2.domain.event.Event; -import mops.gruppen2.service.APIFormatterService; -import mops.gruppen2.service.EventService; -import mops.gruppen2.service.GroupService; -import mops.gruppen2.service.SerializationService; +import mops.gruppen2.service.*; import org.springframework.security.access.annotation.Secured; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 27ca179..f3ce681 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -5,6 +5,7 @@ import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.User; +import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.security.Account; import mops.gruppen2.service.*; @@ -70,6 +71,17 @@ public class Gruppen2Controller { return "createLecture"; } + @PostMapping("/createLecture") + public String pCreateLecture(KeycloakAuthenticationToken token, + @RequestParam(value = "title") String title, + @RequestParam(value = "beschreibung") String beschreibung) { + + Account account = keyCloakService.createAccountFromPrincipal(token); + controllerService.createGroup(account, title, beschreibung, true); + + return "redirect:/gruppen2/"; + } + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) @GetMapping("/createGroup") public String createGroup(KeycloakAuthenticationToken token, Model model) { diff --git a/src/main/resources/templates/createLecture.html b/src/main/resources/templates/createLecture.html index 566549b..88ff3c9 100644 --- a/src/main/resources/templates/createLecture.html +++ b/src/main/resources/templates/createLecture.html @@ -1,10 +1,66 @@ - + - - Title + + Gruppenerstellung + + + - +
    + +
    +
    +
    +
    +
    +

    Veranstaltung erstellen

    +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file From e2326d5f23589113445aa5e44f8a1567ff0a5df9 Mon Sep 17 00:00:00 2001 From: "[Mahgs]" Date: Wed, 18 Mar 2020 13:46:51 +0100 Subject: [PATCH 13/24] added a default route --- .../controller/Gruppen2Controller.java | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index af08948..ddedc06 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -49,7 +49,7 @@ public class Gruppen2Controller { * @param model tolles model * @return index.html */ - @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @GetMapping("") public String index(KeycloakAuthenticationToken token, Model model) throws EventException { Account account = keyCloakService.createAccountFromPrincipal(token); @@ -57,18 +57,18 @@ public class Gruppen2Controller { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); model.addAttribute("gruppen", userService.getUserGroups(user)); - model.addAttribute("user",user); + model.addAttribute("user", user); return "index"; } - @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @GetMapping("/createGroup") public String createGroup(KeycloakAuthenticationToken token, Model model) { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); return "create"; } - @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @GetMapping("/findGroup") public String findGroup(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "suchbegriff", required = false) String suchbegriff) throws EventException { List groupse = new ArrayList<>(); @@ -80,6 +80,7 @@ public class Gruppen2Controller { return "search"; } + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @PostMapping("/createGroup") public String pCreateGroup(KeycloakAuthenticationToken token, @RequestParam(value = "title") String title, @@ -93,7 +94,7 @@ public class Gruppen2Controller { return "redirect:/gruppen2/"; } - @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @GetMapping("/details") public String showGroupDetails(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "id") Long id) throws EventException, ResponseStatusException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); @@ -108,16 +109,16 @@ public class Gruppen2Controller { throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Group not found"); } - @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @PostMapping("/detailsBeitreten") public String joinGroup(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "id") Long id) throws EventException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); - Account account = keyCloakService.createAccountFromPrincipal (token); - controllerService.addUser(account,id); + Account account = keyCloakService.createAccountFromPrincipal(token); + controllerService.addUser(account, id); return "redirect:/gruppen2/"; } - @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @GetMapping("/detailsSearch") public String showGroupDetailsNoMember(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "id") Long id) throws EventException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); @@ -129,7 +130,7 @@ public class Gruppen2Controller { throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Group not found"); } - @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @GetMapping("/acceptinvite/{link}") public String acceptInvite(KeycloakAuthenticationToken token, Model model, @PathVariable String link) throws EventException { model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); @@ -140,11 +141,17 @@ public class Gruppen2Controller { } throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Group not found"); } - @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + + @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @PostMapping("/leaveGroup") - public String pLeaveGroup(KeycloakAuthenticationToken token, @RequestParam (value="group_id") Long id) { + public String pLeaveGroup(KeycloakAuthenticationToken token, @RequestParam(value = "group_id") Long id) { Account account = keyCloakService.createAccountFromPrincipal(token); controllerService.deleteUser(account, id); return "redirect:/gruppen2/"; } + + @GetMapping("*") + public String defaultLink() { + return "errorRenameLater"; + } } From 523d7d2ad9a431612e173ab4cab3390cb79b2f8f Mon Sep 17 00:00:00 2001 From: "[Mahgs]" Date: Wed, 18 Mar 2020 13:52:48 +0100 Subject: [PATCH 14/24] added a default route --- src/main/java/mops/gruppen2/controller/APIController.java | 6 +++--- src/main/java/mops/gruppen2/controller/MopsController.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index 12591a1..459e125 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -36,7 +36,7 @@ public class APIController { @GetMapping("/updateGroups/{status}") @Secured("ROLE_api_user") @ApiOperation(value = "Gibt alle Gruppen zurück in denen sich etwas geändert hat") - public UpdatedGroupRequestMapper updateGroup(@ApiParam("Letzter Status des Anfragestellers") @PathVariable Long status) throws EventException { + public UpdatedGroupRequestMapper updateGroup(@ApiParam("Letzter Status des Anfragestellers") @PathVariable Long status) throws EventException { List events = eventService.getNewEvents(status); UpdatedGroupRequestMapper updatedGroupRequestMapper = APIFormatterService.wrapp(eventService.getMaxEvent_id(), groupService.projectEventList(events)); @@ -46,14 +46,14 @@ public class APIController { @GetMapping("/getGroupIdsOfUser/{teilnehmer}") @Secured("ROLE_api_user") @ApiOperation(value = "Gibt alle Gruppen zurück in denen sich ein Teilnehmer befindet") - public List getGroupsOfUser(@ApiParam("Teilnehmer dessen groupIds zurückgegeben werden sollen") @PathVariable String teilnehmer) throws EventException { + public List getGroupsOfUser(@ApiParam("Teilnehmer dessen groupIds zurückgegeben werden sollen") @PathVariable String teilnehmer) throws EventException { return eventService.getGroupsOfUser(teilnehmer); } @GetMapping("/getGroup/{groupId}") @Secured("ROLE_api_user") @ApiOperation(value = "Gibt die Gruppe mit der als Parameter mitgegebenden groupId zurück") - public Group getGroupFromId(@ApiParam("GruppenId der gefordeten Gruppe") @PathVariable Long groupId) throws EventException{ + public Group getGroupFromId(@ApiParam("GruppenId der gefordeten Gruppe") @PathVariable Long groupId) throws EventException { List eventList = eventService.getEventsOfGroup(groupId); List groups = groupService.projectEventList(eventList); diff --git a/src/main/java/mops/gruppen2/controller/MopsController.java b/src/main/java/mops/gruppen2/controller/MopsController.java index 1c62f56..3e77224 100644 --- a/src/main/java/mops/gruppen2/controller/MopsController.java +++ b/src/main/java/mops/gruppen2/controller/MopsController.java @@ -9,7 +9,7 @@ import javax.servlet.http.HttpServletRequest; public class MopsController { @GetMapping("") - public String redirect(){ + public String redirect() { return "redirect:/gruppen2/"; } From b236e3bb9d108e6a996cbe811d9c6d847fd8508f Mon Sep 17 00:00:00 2001 From: "[Mahgs]" Date: Wed, 18 Mar 2020 14:09:30 +0100 Subject: [PATCH 15/24] changed checkGroup Method to a Query --- .../gruppen2/repository/EventRepository.java | 3 +++ .../mops/gruppen2/service/EventService.java | 17 ++++++----------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/main/java/mops/gruppen2/repository/EventRepository.java b/src/main/java/mops/gruppen2/repository/EventRepository.java index 7b84ce0..f328fdf 100644 --- a/src/main/java/mops/gruppen2/repository/EventRepository.java +++ b/src/main/java/mops/gruppen2/repository/EventRepository.java @@ -30,4 +30,7 @@ public interface EventRepository extends CrudRepository { @Query("SELECT MAX(event_id) FROM event") public Long getHighesEvent_ID(); + + @Query("SELECT MAX(group_id) FROM event") + public Long getMaxGroupID(); } diff --git a/src/main/java/mops/gruppen2/service/EventService.java b/src/main/java/mops/gruppen2/service/EventService.java index f545456..7fd67e8 100644 --- a/src/main/java/mops/gruppen2/service/EventService.java +++ b/src/main/java/mops/gruppen2/service/EventService.java @@ -59,22 +59,17 @@ public class EventService { } /** - * Sorgt dafür die Group_id immer um 1 zu erhöhen + * Gibt die nächst höhere groupID zurück die belegt werden kann. + * Gibt 1 zurück, falls keine Gruppe vorhanden ist. * * @return Gibt Long zurück */ public Long checkGroup() { - Long tmpId = 1L; - Iterable eventDTOS = eventStore.findAll(); - for (EventDTO event : eventDTOS) { - if (event.getGroup_id() == null) { - return tmpId; - } - if (tmpId <= event.getGroup_id()) { - tmpId++; - } + Long maxGroupID = eventStore.getMaxGroupID(); + if (maxGroupID == null) { + return 1L; } - return tmpId; + return maxGroupID + 1; } /** From 0db03f2ab5a484446c73add973170927cb38cf0c Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 14:13:58 +0100 Subject: [PATCH 16/24] Add createLecture feature also add private checkbox again and delete the uploadCsv methods in APIController Co-Authored-By: tomvahl Co-Authored-By: andibuls Co-Authored-By: Lukas Ettel --- .../gruppen2/controller/APIController.java | 9 ----- .../controller/Gruppen2Controller.java | 17 +++++---- .../gruppen2/service/ControllerService.java | 36 +++++++++++++++---- .../resources/templates/createLecture.html | 4 +++ 4 files changed, 44 insertions(+), 22 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/APIController.java b/src/main/java/mops/gruppen2/controller/APIController.java index 8024114..af2dbec 100644 --- a/src/main/java/mops/gruppen2/controller/APIController.java +++ b/src/main/java/mops/gruppen2/controller/APIController.java @@ -60,13 +60,4 @@ public class APIController { return groups.get(0); } - @PostMapping(value = "/uploadcsv", consumes = "text/csv") - public void uploadCsv(@RequestBody InputStream body) throws IOException { - System.out.println(CsvService.read(body)); - } - - @PostMapping(value = "/uploadcsv", consumes = "multipart/form-data") - public void uploadMultipart(@RequestParam("file") MultipartFile file) throws IOException { - System.out.println(CsvService.read(file.getInputStream())); - } } diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index f3ce681..97e6fb6 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -17,9 +17,11 @@ import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; import org.springframework.web.context.annotation.SessionScope; +import org.springframework.web.multipart.MultipartFile; import org.springframework.web.server.ResponseStatusException; import javax.annotation.security.RolesAllowed; +import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -71,13 +73,18 @@ public class Gruppen2Controller { return "createLecture"; } + @RolesAllowed({"ROLE_orga", "ROLE_actuator)"}) @PostMapping("/createLecture") public String pCreateLecture(KeycloakAuthenticationToken token, @RequestParam(value = "title") String title, - @RequestParam(value = "beschreibung") String beschreibung) { + @RequestParam(value = "beschreibung") String beschreibung, + @RequestParam(value = "visibility", required = false) Boolean visibility, + @RequestParam("file") MultipartFile file) throws IOException { Account account = keyCloakService.createAccountFromPrincipal(token); - controllerService.createGroup(account, title, beschreibung, true); + List userList = CsvService.read(file.getInputStream()); + visibility = visibility == null; + controllerService.createLecture(account, title, beschreibung, visibility, userList); return "redirect:/gruppen2/"; } @@ -109,11 +116,7 @@ public class Gruppen2Controller { @RequestParam(value = "visibility", required = false) Boolean visibility) { Account account = keyCloakService.createAccountFromPrincipal(token); - if (visibility == null) { - visibility = true; - }else{ - visibility = false; - } + visibility = visibility == null; controllerService.createGroup(account, title, beschreibung, visibility); return "redirect:/gruppen2/"; diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index 126d519..2f568a1 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -1,9 +1,6 @@ package mops.gruppen2.service; -import mops.gruppen2.domain.Group; -import mops.gruppen2.domain.GroupType; -import mops.gruppen2.domain.Role; -import mops.gruppen2.domain.Visibility; +import mops.gruppen2.domain.*; import mops.gruppen2.domain.event.*; import mops.gruppen2.security.Account; import org.springframework.stereotype.Service; @@ -31,9 +28,9 @@ public class ControllerService { Visibility visibility1; Long group_id = eventService.checkGroup(); - if (visibility){ + if(visibility) { visibility1 = Visibility.PUBLIC; - }else{ + } else { visibility1 = Visibility.PRIVATE; } @@ -51,6 +48,13 @@ public class ControllerService { eventService.saveEvent(addUserEvent); } + public void addUserList(List users, Long group_id) { + for (User user : users) { + AddUserEvent addUserEvent = new AddUserEvent(group_id, user.getUser_id(), user.getGivenname(), user.getFamilyname(), user.getEmail()); + eventService.saveEvent(addUserEvent); + } + } + public void updateTitle(Account account, Long group_id, String title){ UpdateGroupTitleEvent updateGroupTitleEvent = new UpdateGroupTitleEvent(group_id,account.getName(),title); eventService.saveEvent(updateGroupTitleEvent); @@ -70,4 +74,24 @@ public class ControllerService { DeleteUserEvent deleteUserEvent = new DeleteUserEvent(group_id,account.getName()); eventService.saveEvent(deleteUserEvent); } + + public void createLecture(Account account, String title, String description, Boolean visibility, List users) { + Visibility visibility1; + Long group_id = eventService.checkGroup(); + + if (visibility) { + visibility1 = Visibility.PUBLIC; + } else { + visibility1 = Visibility.PRIVATE; + } + + CreateGroupEvent createGroupEvent = new CreateGroupEvent(group_id, account.getName(), null, GroupType.LECTURE, visibility1); + eventService.saveEvent(createGroupEvent); + + addUser(account, group_id); + updateTitle(account, group_id, title); + updateDescription(account, group_id, description); + updateRole(account, group_id); + addUserList(users, group_id); + } } diff --git a/src/main/resources/templates/createLecture.html b/src/main/resources/templates/createLecture.html index 88ff3c9..e6fb1e5 100644 --- a/src/main/resources/templates/createLecture.html +++ b/src/main/resources/templates/createLecture.html @@ -43,6 +43,10 @@ +
    + + +
    From 838bff1d9fd77acdf42807dbf3aaf7708ac88763 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 14:19:00 +0100 Subject: [PATCH 17/24] Update GroupType in createGroup Co-Authored-By: tomvahl Co-Authored-By: andibuls Co-Authored-By: Lukas Ettel --- src/main/java/mops/gruppen2/service/ControllerService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/mops/gruppen2/service/ControllerService.java b/src/main/java/mops/gruppen2/service/ControllerService.java index 2f568a1..828122c 100644 --- a/src/main/java/mops/gruppen2/service/ControllerService.java +++ b/src/main/java/mops/gruppen2/service/ControllerService.java @@ -34,7 +34,7 @@ public class ControllerService { visibility1 = Visibility.PRIVATE; } - CreateGroupEvent createGroupEvent = new CreateGroupEvent(group_id, account.getName(), null , GroupType.LECTURE, visibility1); + CreateGroupEvent createGroupEvent = new CreateGroupEvent(group_id, account.getName(), null , GroupType.SIMPLE, visibility1); eventService.saveEvent(createGroupEvent); addUser(account, group_id); From 69141705abeb9f11bb369b35e6e3a2f53e425dd3 Mon Sep 17 00:00:00 2001 From: "[Mahgs]" Date: Wed, 18 Mar 2020 14:22:23 +0100 Subject: [PATCH 18/24] fixed tests --- .../gruppen2/service/EventServiceTest.java | 24 +------------------ 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/src/test/java/mops/gruppen2/service/EventServiceTest.java b/src/test/java/mops/gruppen2/service/EventServiceTest.java index 122e219..c0cedb0 100644 --- a/src/test/java/mops/gruppen2/service/EventServiceTest.java +++ b/src/test/java/mops/gruppen2/service/EventServiceTest.java @@ -28,21 +28,6 @@ class EventServiceTest { eventService = new EventService(mock(SerializationService.class), eventRepositoryMock); } - @Test - void checkGroupTest() { - EventDTO eventDTO = new EventDTO(); - EventDTO eventDTO1 = new EventDTO(); - eventDTO1.setGroup_id(1L); - eventDTO.setUser_id("realer"); - eventDTO.setUser_id("faker"); - eventDTO.setGroup_id(0L); - List eventDTOS = new ArrayList<>(); - eventDTOS.add(eventDTO); - eventDTOS.add(eventDTO1); - when(eventRepositoryMock.findAll()).thenReturn(eventDTOS); - assertEquals(eventDTO1.getGroup_id() + 1, eventService.checkGroup()); - } - @Test void getMaxID() { when(eventRepositoryMock.getHighesEvent_ID()).thenReturn(42L); @@ -52,14 +37,7 @@ class EventServiceTest { @Test void checkGroupReturnNextValue() { - List eventDTOS = new ArrayList<>(); - EventDTO eventDTO1 = new EventDTO(); - EventDTO eventDTO2 = new EventDTO(); - eventDTO1.setGroup_id(1L); - eventDTO2.setGroup_id(2L); - eventDTOS.add(eventDTO1); - eventDTOS.add(eventDTO2); - when(eventRepositoryMock.findAll()).thenReturn(eventDTOS); + when(eventRepositoryMock.getMaxGroupID()).thenReturn(2L); assertEquals(eventService.checkGroup(), 3L); } From f408391f4c3db5e91a7c421f52bac212dc33f9fb Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 14:40:39 +0100 Subject: [PATCH 19/24] Refactor Gruppen2Controller --- src/main/java/mops/gruppen2/controller/Gruppen2Controller.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index 2bde657..a6bdcca 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -66,7 +66,6 @@ public class Gruppen2Controller { return "index"; } - @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @RolesAllowed({"ROLE_orga", "ROLE_actuator)"}) @GetMapping("/createLecture") public String createLecture(KeycloakAuthenticationToken token, Model model) { From 6929b1ead4a9bdb91cdb4d820a32f55e8274ba75 Mon Sep 17 00:00:00 2001 From: XXNitram Date: Wed, 18 Mar 2020 14:43:26 +0100 Subject: [PATCH 20/24] Add Service Annotation --- src/main/java/mops/gruppen2/service/CsvService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/mops/gruppen2/service/CsvService.java b/src/main/java/mops/gruppen2/service/CsvService.java index da8293e..a876d04 100644 --- a/src/main/java/mops/gruppen2/service/CsvService.java +++ b/src/main/java/mops/gruppen2/service/CsvService.java @@ -4,11 +4,13 @@ import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.dataformat.csv.CsvMapper; import com.fasterxml.jackson.dataformat.csv.CsvSchema; import mops.gruppen2.domain.User; +import org.springframework.stereotype.Service; import java.io.IOException; import java.io.InputStream; import java.util.List; +@Service public class CsvService { public static List read(InputStream stream) throws IOException { From 522d1369ec8085c3816736490ca3d74218bb41be Mon Sep 17 00:00:00 2001 From: tomvahl Date: Wed, 18 Mar 2020 15:09:14 +0100 Subject: [PATCH 21/24] fix search remove your Group from search Co-Authored-By: andibuls --- .../gruppen2/controller/Gruppen2Controller.java | 3 ++- .../java/mops/gruppen2/service/GroupService.java | 15 +++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java index a6bdcca..842870d 100644 --- a/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controller/Gruppen2Controller.java @@ -99,9 +99,10 @@ public class Gruppen2Controller { @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator"}) @GetMapping("/findGroup") public String findGroup(KeycloakAuthenticationToken token, Model model, @RequestParam(value = "suchbegriff", required = false) String suchbegriff) throws EventException { + Account account = keyCloakService.createAccountFromPrincipal(token); List groupse = new ArrayList<>(); if (suchbegriff != null) { - groupse = groupService.findGroupWith(suchbegriff); + groupse = groupService.findGroupWith(suchbegriff,account); } model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); model.addAttribute("gruppen", groupse); diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index e6adcb3..48bbaab 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -6,6 +6,7 @@ import mops.gruppen2.domain.Group; import mops.gruppen2.domain.Visibility; import mops.gruppen2.domain.event.Event; import mops.gruppen2.repository.EventRepository; +import mops.gruppen2.security.Account; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -77,9 +78,15 @@ public class GroupService { * @return * @throws EventException */ - - public List getAllGroupWithVisibilityPublic() throws EventException { + // Namensänderung fixen und die Forschleife auslagern + public List getAllGroupWithVisibilityPublic(String user_id) throws EventException { List group_ids = eventRepository.findGroup_idsWhereVisibility(Boolean.TRUE); + List group_ids_user = eventRepository.findGroup_idsWhereUser_id(user_id); + for (Long group_id: group_ids_user) { + if(group_ids.contains(group_id)){ + group_ids.remove(group_id); + } + } List eventDTOS = eventRepository.findAllEventsOfGroups(group_ids); List events = eventService.translateEventDTOs(eventDTOS); List groups = projectEventList(events); @@ -94,9 +101,9 @@ public class GroupService { * @return * @throws EventException */ - public List findGroupWith(String search) throws EventException { + public List findGroupWith(String search, Account account) throws EventException { List groups = new ArrayList<>(); - for (Group group: getAllGroupWithVisibilityPublic()) { + for (Group group: getAllGroupWithVisibilityPublic(account.getName())) { if (group.getTitle().contains(search)|| group.getDescription().contains(search)){ groups.add(group); } From 2b1d6507e6de5fa6f2c7257c0d1da1c58c0e39f7 Mon Sep 17 00:00:00 2001 From: tomvahl Date: Wed, 18 Mar 2020 15:17:48 +0100 Subject: [PATCH 22/24] fix-search Co-Authored-By: andibuls --- .../mops/gruppen2/service/GroupService.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index 48bbaab..ede0171 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -72,22 +72,23 @@ public class GroupService { return groups.get(group_id); } - /** - * sucht alle Zeilen in der DB wo die Visibility gleich true ist und wandelt diese in - * eine Liste von Gruppen - * @return - * @throws EventException - */ - // Namensänderung fixen und die Forschleife auslagern - public List getAllGroupWithVisibilityPublic(String user_id) throws EventException { - List group_ids = eventRepository.findGroup_idsWhereVisibility(Boolean.TRUE); - List group_ids_user = eventRepository.findGroup_idsWhereUser_id(user_id); - for (Long group_id: group_ids_user) { + private List removeUserGroups(List group_ids, List user_groups){ + for (Long group_id: user_groups) { if(group_ids.contains(group_id)){ group_ids.remove(group_id); } } - List eventDTOS = eventRepository.findAllEventsOfGroups(group_ids); + return group_ids; + } + + /** + * sucht alle Zeilen in der DB wo die Visibility true ist und entfernt alle Gruppen des Users. + * Erstellt eine Liste aus Gruppen. + * @return + * @throws EventException + */ + public List getAllGroupWithVisibilityPublic(String user_id) throws EventException { + List eventDTOS = eventRepository.findAllEventsOfGroups(removeUserGroups(eventRepository.findGroup_idsWhereVisibility(Boolean.TRUE), eventRepository.findGroup_idsWhereUser_id(user_id))); List events = eventService.translateEventDTOs(eventDTOS); List groups = projectEventList(events); return groups; From 22172b54064ca319cc47b3f7e1ac90cd9ae400ef Mon Sep 17 00:00:00 2001 From: AndiBuls Date: Wed, 18 Mar 2020 15:25:37 +0100 Subject: [PATCH 23/24] cleanup of the search function --- src/main/java/mops/gruppen2/service/GroupService.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index ede0171..acba484 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -72,11 +72,9 @@ public class GroupService { return groups.get(group_id); } - private List removeUserGroups(List group_ids, List user_groups){ + private List removeUserGroups(List group_ids, List user_groups) { for (Long group_id: user_groups) { - if(group_ids.contains(group_id)){ - group_ids.remove(group_id); - } + group_ids.remove(group_id); } return group_ids; } @@ -88,7 +86,8 @@ public class GroupService { * @throws EventException */ public List getAllGroupWithVisibilityPublic(String user_id) throws EventException { - List eventDTOS = eventRepository.findAllEventsOfGroups(removeUserGroups(eventRepository.findGroup_idsWhereVisibility(Boolean.TRUE), eventRepository.findGroup_idsWhereUser_id(user_id))); + List group_ids = removeUserGroups(eventRepository.findGroup_idsWhereVisibility(Boolean.TRUE), eventRepository.findGroup_idsWhereUser_id(user_id)); + List eventDTOS = eventRepository.findAllEventsOfGroups(group_ids); List events = eventService.translateEventDTOs(eventDTOS); List groups = projectEventList(events); return groups; From 62397a24ef17062da7f39e320c9ef92dab8c9b15 Mon Sep 17 00:00:00 2001 From: tomvahl Date: Wed, 18 Mar 2020 16:03:34 +0100 Subject: [PATCH 24/24] update search Co-Authored-By: andibuls --- src/main/java/mops/gruppen2/service/GroupService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index acba484..ec3c4e6 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -104,7 +104,7 @@ public class GroupService { public List findGroupWith(String search, Account account) throws EventException { List groups = new ArrayList<>(); for (Group group: getAllGroupWithVisibilityPublic(account.getName())) { - if (group.getTitle().contains(search)|| group.getDescription().contains(search)){ + if (group.getTitle().toLowerCase().contains(search.toLowerCase()) || group.getDescription().toLowerCase().contains(search.toLowerCase())){ groups.add(group); } }