1

Fix InviteLink DB Schema + Implement Frontend InviteLink Handling

Co-authored-by: [Mahgs] <maxoerter@gmx.de>
Co-authored-by: Christoph <tobi@urpost.de>
This commit is contained in:
Christoph
2020-03-17 16:16:58 +01:00
parent 906585ce9a
commit 6e067d1b47
7 changed files with 62 additions and 37 deletions

View File

@ -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<Group> 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");
}
}

View File

@ -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;
}

View File

@ -19,7 +19,7 @@ public interface EventRepository extends CrudRepository<EventDTO, Long> {
//@Query("SELECT * FROM event WHERE event_id > ?#{[0]}")
//Iterable<EventDTO> findNewEventSinceStatus(@Param("status") Long status);
@Query("select * from event where visibility =:vis")
@Query("select * from event where visibility =:vis")
List<EventDTO> findEventDTOByVisibility(@Param("vis") Boolean visibility);
@Query("SELECT DISTINCT group_id FROM event WHERE event_id > :status")

View File

@ -7,7 +7,11 @@ import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
@Repository
public interface InviteLinkRepository extends CrudRepository<InviteLinkDTO, String> {
@Query("select invite_link from inviteLink where group_id =:id")
String findLinkByGroupID(@Param("id") Long GroupID);
public interface InviteLinkRepository extends CrudRepository<InviteLinkDTO, Long> {
//@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);
}

View File

@ -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<Event> 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);
}
}

View File

@ -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
keycloak.confidential-port= 443

View File

@ -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
);