diff --git a/build.gradle b/build.gradle index 4919f8f..15f22d4 100644 --- a/build.gradle +++ b/build.gradle @@ -58,7 +58,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.keycloak:keycloak-spring-boot-starter:9.0.0' implementation 'org.keycloak.bom:keycloak-adapter-bom:3.3.0.Final' - implementation 'mops:styleguide:2.0.1' + implementation 'mops:styleguide:2.1.0' compile group: 'io.springfox', name: 'springfox-swagger2', version: '2.7.0' compile group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.7.0' compileOnly 'org.projectlombok:lombok' diff --git a/src/main/java/mops/gruppen2/controllers/Gruppen2Controller.java b/src/main/java/mops/gruppen2/controllers/Gruppen2Controller.java index 153a394..eea8b70 100644 --- a/src/main/java/mops/gruppen2/controllers/Gruppen2Controller.java +++ b/src/main/java/mops/gruppen2/controllers/Gruppen2Controller.java @@ -1,36 +1,24 @@ package mops.gruppen2.controllers; -import javax.annotation.security.RolesAllowed; - -import mops.gruppen2.entities.Gruppe; -import mops.gruppen2.security.Account; -import org.keycloak.KeycloakPrincipal; +import mops.gruppen2.services.KeyCloakService; import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.context.annotation.SessionScope; -@SessionScope +import javax.annotation.security.RolesAllowed; + @Controller +@RequestMapping("/gruppen2") public class Gruppen2Controller { - /** - * Creates an Account. - * - * @param token Ein toller token - * @return Account with current userdata - */ - private Account createAccountFromPrincipal(KeycloakAuthenticationToken token) { - KeycloakPrincipal principal = (KeycloakPrincipal) token.getPrincipal(); - return new Account( - principal.getName(), - principal.getKeycloakSecurityContext().getIdToken().getEmail(), - null, - principal.getKeycloakSecurityContext().getIdToken().getGivenName(), - principal.getKeycloakSecurityContext().getIdToken().getFamilyName(), - token.getAccount().getRoles()); + + private final KeyCloakService keyCloakService; + + public Gruppen2Controller(KeyCloakService keyCloakService) { + this.keyCloakService = keyCloakService; } /**Zeigt die index.html an. @@ -39,26 +27,10 @@ public class Gruppen2Controller { * @param model tolles model * @return index.html */ - @GetMapping("/") @RolesAllowed({"ROLE_orga", "ROLE_studentin", "ROLE_actuator)"}) + @GetMapping("") public String index(KeycloakAuthenticationToken token, Model model) { - model.addAttribute("account", createAccountFromPrincipal(token)); + model.addAttribute("account", keyCloakService.createAccountFromPrincipal(token)); return "index"; } - - @PostMapping("/") - public String addGruppe(@ModelAttribute Gruppe gruppe) { - System.out.println(gruppe); - return "redirect:/"; - } - - @GetMapping("/createGroup") - public String createGruppe(){ - return "create"; - } - - @GetMapping("/findGroup") - public String findGruppe(){ - return "search"; - } } diff --git a/src/main/java/mops/gruppen2/entities/Admin.java b/src/main/java/mops/gruppen2/entities/Admin.java index a50a14f..dcc21d8 100644 --- a/src/main/java/mops/gruppen2/entities/Admin.java +++ b/src/main/java/mops/gruppen2/entities/Admin.java @@ -1,8 +1,4 @@ package mops.gruppen2.entities; -public class Admin extends Teilnehmer{ - - public Admin(String vorname, String nachname) { - super(vorname, nachname); - } +public class Admin extends Rolle { } diff --git a/src/main/java/mops/gruppen2/entities/Aggregat.java b/src/main/java/mops/gruppen2/entities/Aggregat.java new file mode 100644 index 0000000..8322852 --- /dev/null +++ b/src/main/java/mops/gruppen2/entities/Aggregat.java @@ -0,0 +1,18 @@ +package mops.gruppen2.entities; + +import mops.gruppen2.events.Event; + +import java.lang.reflect.Method; + +public abstract class Aggregat { + + public void applyEvent(Event event) { + try { + Method method = this.getClass().getDeclaredMethod("applyEvent", event.getClass()); + method.setAccessible(true); + method.invoke(this, event); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/mops/gruppen2/entities/Gruppe.java b/src/main/java/mops/gruppen2/entities/Gruppe.java index 801898b..19369b2 100644 --- a/src/main/java/mops/gruppen2/entities/Gruppe.java +++ b/src/main/java/mops/gruppen2/entities/Gruppe.java @@ -1,17 +1,21 @@ package mops.gruppen2.entities; import lombok.Data; -import org.springframework.data.annotation.Id; +import mops.gruppen2.events.CreateGroupEvent; import java.util.List; @Data - -public class Gruppe { - @Id - Long id; - private String titel; - private String beschreibung; +public class Gruppe extends Aggregat { + long id; + String titel; + String beschreibung; List teilnehmersList; + public void applyEvent(CreateGroupEvent event){ + this.id = event.getId(); + this.titel = event.getTitel(); + this.beschreibung = event.getBeschreibung(); + this.teilnehmersList= null; + } } diff --git a/src/main/java/mops/gruppen2/entities/GruppeRepository.java b/src/main/java/mops/gruppen2/entities/GruppeRepository.java deleted file mode 100644 index 988fcd2..0000000 --- a/src/main/java/mops/gruppen2/entities/GruppeRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package mops.gruppen2.entities; - -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface GruppeRepository extends CrudRepository { -} diff --git a/src/main/java/mops/gruppen2/entities/Orga.java b/src/main/java/mops/gruppen2/entities/Orga.java new file mode 100644 index 0000000..ad86b27 --- /dev/null +++ b/src/main/java/mops/gruppen2/entities/Orga.java @@ -0,0 +1,4 @@ +package mops.gruppen2.entities; + +public class Orga extends Rolle { +} diff --git a/src/main/java/mops/gruppen2/entities/Rolle.java b/src/main/java/mops/gruppen2/entities/Rolle.java new file mode 100644 index 0000000..1a7bb04 --- /dev/null +++ b/src/main/java/mops/gruppen2/entities/Rolle.java @@ -0,0 +1,5 @@ +package mops.gruppen2.entities; + +public class Rolle { + +} diff --git a/src/main/java/mops/gruppen2/entities/Student.java b/src/main/java/mops/gruppen2/entities/Student.java deleted file mode 100644 index e1804ef..0000000 --- a/src/main/java/mops/gruppen2/entities/Student.java +++ /dev/null @@ -1,14 +0,0 @@ -package mops.gruppen2.entities; - -import lombok.Data; -import org.springframework.data.annotation.Id; - -import java.util.List; - -public class Student extends Teilnehmer{ - - public Student(String vorname, String nachname) { - super(vorname, nachname); - } - -} diff --git a/src/main/java/mops/gruppen2/entities/TeilnehmerRepository.java b/src/main/java/mops/gruppen2/entities/TeilnehmerRepository.java deleted file mode 100644 index a0bf398..0000000 --- a/src/main/java/mops/gruppen2/entities/TeilnehmerRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package mops.gruppen2.entities; - -import org.springframework.data.repository.CrudRepository; -import org.springframework.stereotype.Repository; - -@Repository -public interface TeilnehmerRepository extends CrudRepository { -} diff --git a/src/main/java/mops/gruppen2/events/CreateGroupEvent.java b/src/main/java/mops/gruppen2/events/CreateGroupEvent.java new file mode 100644 index 0000000..8b2758c --- /dev/null +++ b/src/main/java/mops/gruppen2/events/CreateGroupEvent.java @@ -0,0 +1,15 @@ +package mops.gruppen2.events; + +import lombok.Getter; + +@Getter +public class CreateGroupEvent extends Event { + String titel; + String beschreibung; + + public CreateGroupEvent(long id, long gruppe_id, long user_id, String titel, String beschreibung) { + super(id, gruppe_id, user_id); + this.titel = titel; + this.beschreibung = beschreibung; + } +} diff --git a/src/main/java/mops/gruppen2/events/Event.java b/src/main/java/mops/gruppen2/events/Event.java new file mode 100644 index 0000000..3ceb3cd --- /dev/null +++ b/src/main/java/mops/gruppen2/events/Event.java @@ -0,0 +1,12 @@ +package mops.gruppen2.events; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class Event { + long id; + long gruppe_id; + long user_id; +} diff --git a/src/main/java/mops/gruppen2/repositories/EventRepository.java b/src/main/java/mops/gruppen2/repositories/EventRepository.java new file mode 100644 index 0000000..a3b329d --- /dev/null +++ b/src/main/java/mops/gruppen2/repositories/EventRepository.java @@ -0,0 +1,7 @@ +package mops.gruppen2.repositories; + +import mops.gruppen2.events.Event; +import org.springframework.data.repository.CrudRepository; + +public interface EventRepository extends CrudRepository { +} diff --git a/src/main/java/mops/gruppen2/services/GruppenService.java b/src/main/java/mops/gruppen2/services/GruppenService.java new file mode 100644 index 0000000..8807ee3 --- /dev/null +++ b/src/main/java/mops/gruppen2/services/GruppenService.java @@ -0,0 +1,28 @@ +package mops.gruppen2.services; + +import mops.gruppen2.events.CreateGroupEvent; +import mops.gruppen2.events.Event; +import mops.gruppen2.entities.Gruppe; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class GruppenService { + + CreateGroupEvent createGroupEvent = new CreateGroupEvent(1L,1L,1L,"hello", "foo"); + + public GruppenService(){ + List eventList = new ArrayList<>(); + eventList.add(createGroupEvent); + Gruppe newGroup = buildGroup(eventList); + System.out.println(newGroup.toString()); + } + + Gruppe buildGroup(List eventList){ + Gruppe newGroup = new Gruppe(); + eventList.forEach(newGroup::applyEvent); + return newGroup; + } +} diff --git a/src/main/java/mops/gruppen2/services/KeyCloakService.java b/src/main/java/mops/gruppen2/services/KeyCloakService.java new file mode 100644 index 0000000..99d2548 --- /dev/null +++ b/src/main/java/mops/gruppen2/services/KeyCloakService.java @@ -0,0 +1,27 @@ +package mops.gruppen2.services; + +import mops.gruppen2.security.Account; +import org.keycloak.KeycloakPrincipal; +import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken; +import org.springframework.stereotype.Service; + +@Service +public class KeyCloakService { + + /** + * Creates an Account. + * + * @param token Ein toller token + * @return Account with current userdata + */ + public Account createAccountFromPrincipal(KeycloakAuthenticationToken token) { + KeycloakPrincipal principal = (KeycloakPrincipal) token.getPrincipal(); + return new Account( + principal.getName(), + principal.getKeycloakSecurityContext().getIdToken().getEmail(), + null, + principal.getKeycloakSecurityContext().getIdToken().getGivenName(), + principal.getKeycloakSecurityContext().getIdToken().getFamilyName(), + token.getAccount().getRoles()); + } +} diff --git a/src/main/java/mops/gruppen2/services/SerializationService.java b/src/main/java/mops/gruppen2/services/SerializationService.java new file mode 100644 index 0000000..b8de09a --- /dev/null +++ b/src/main/java/mops/gruppen2/services/SerializationService.java @@ -0,0 +1,10 @@ +package mops.gruppen2.services; + +import org.springframework.stereotype.Service; + +/** + * Übersetzt und baut + */ +@Service +public class SerializationService { +} diff --git a/src/test/java/mops/gruppen2/entities/GruppeTest.java b/src/test/java/mops/gruppen2/entities/GruppeTest.java new file mode 100644 index 0000000..7cd2ae9 --- /dev/null +++ b/src/test/java/mops/gruppen2/entities/GruppeTest.java @@ -0,0 +1,12 @@ +package mops.gruppen2.entities; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class GruppeTest { + + @Test + void applyEvent() { + } +} \ No newline at end of file