diff --git a/src/main/java/mops/gruppen2/service/GroupService.java b/src/main/java/mops/gruppen2/service/GroupService.java index 57a1fd4..867d95e 100644 --- a/src/main/java/mops/gruppen2/service/GroupService.java +++ b/src/main/java/mops/gruppen2/service/GroupService.java @@ -1,13 +1,12 @@ package mops.gruppen2.service; -import mops.gruppen2.domain.EventDTO; +import lombok.EqualsAndHashCode; import mops.gruppen2.domain.Exceptions.EventException; import mops.gruppen2.domain.Exceptions.GroupDoesNotExistException; import mops.gruppen2.domain.Group; import mops.gruppen2.domain.event.CreateGroupEvent; import mops.gruppen2.domain.event.DeleteGroupEvent; import mops.gruppen2.domain.event.Event; -import mops.gruppen2.repository.EventRepository; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -19,52 +18,28 @@ import java.util.Map; public class GroupService { private final EventService eventService; - private final EventRepository eventRepository; - public GroupService(EventService eventService, EventRepository eventRepository) { + public GroupService(EventService eventService) { this.eventService = eventService; - this.eventRepository = eventRepository; } - public List getGroupEvents(List group_ids) { - List eventDTOS = new ArrayList<>(); - List events = new ArrayList<>(); - for (Long group_id: group_ids) { - eventDTOS.addAll(eventRepository.findEventDTOByGroup_id(group_id)); - } - return events = eventService.translateEventDTOs(eventDTOS); - } - public List projectEventList(Map groupMap, List events) throws EventException { + public List projectEventList(List events) throws EventException { + Map groupMap = new HashMap<>(); + for (Event event : events) { - if (event instanceof CreateGroupEvent) { - groupMap.put(event.getGroup_id(), new Group()); - } - if (event instanceof DeleteGroupEvent) { - groupMap.remove(event.getGroup_id()); - } else { - try { - Group group = groupMap.get(event.getGroup_id()); - - if (group == null) { - throw new GroupDoesNotExistException("Gruppe " + event.getGroup_id() + " existiert nicht"); - } - - group.applyEvent(event); - } catch (EventException e) { - if (e instanceof GroupDoesNotExistException) { - throw e; - } - e.printStackTrace(); - } - } - + getOrCreateGroup(groupMap, event.getGroup_id()).applyEvent(event); } return new ArrayList<>(groupMap.values()); } - public List projectEventList(List events) throws EventException { - return projectEventList(new HashMap<>(), events); + // + private Group getOrCreateGroup(Map groups, long group_id) { + if (!groups.containsKey(group_id)) { + groups.put(group_id, new Group()); + } + + return groups.get(group_id); } } diff --git a/src/test/java/mops/gruppen2/builder/EventBuilder.java b/src/test/java/mops/gruppen2/builder/EventBuilder.java index 4e4b670..f64a143 100644 --- a/src/test/java/mops/gruppen2/builder/EventBuilder.java +++ b/src/test/java/mops/gruppen2/builder/EventBuilder.java @@ -1,7 +1,7 @@ package mops.gruppen2.builder; import com.github.javafaker.Faker; -import mops.gruppen2.domain.Role; +import mops.gruppen2.domain.*; import mops.gruppen2.domain.event.*; import java.util.ArrayList; @@ -9,19 +9,64 @@ import java.util.List; public class EventBuilder { - public static CreateGroupEvent randomCreateGroupEvent() { - Faker faker = new Faker(); + /** + * Generiert ein EventLog mit mehreren Gruppen nud Usern + * + * @param count Gruppenanzahl + * @param membercount Gesamte Mitgliederanzahl + * @return + */ + public static List completeGroups(int count, int membercount) { + List eventList = new ArrayList<>(); - return null;/*new CreateGroupEvent( - faker.random().nextLong(), - faker.random().nextLong(), - faker.random().hex(), - faker.leagueOfLegends().champion(), - faker.leagueOfLegends().quote() - );*/ + for (int i = 1; i <= count; i++) { + eventList.addAll(EventBuilder.completeGroup(i, membercount / count)); + } + + return eventList; } - public static AddUserEvent randomAddUserEvent(long group_id) { + public static List completeGroup(long group_id, int membercount) { + List eventList = new ArrayList<>(); + + eventList.add(EventBuilder.createGroupEvent(group_id)); + eventList.add(EventBuilder.updateGroupTitleEvent(group_id)); + eventList.add(EventBuilder.updateGroupDescriptionEvent(group_id)); + + eventList.addAll(EventBuilder.addUserEvents(membercount, group_id)); + + return eventList; + } + + public static CreateGroupEvent createGroupEvent(long group_id) { + Faker faker = new Faker(); + + return new CreateGroupEvent( + group_id, + faker.random().hex(), + null, + GroupType.SIMPLE, + Visibility.PRIVATE + ); + } + + /** + * Generiert mehrere CreateGroupEvents, 1 <= group_id <= count + * + * @param count Anzahl der verschiedenen Gruppen. + * @return + */ + public static List createGroupEvents(int count) { + List eventList = new ArrayList<>(); + + for (int i = 1; i <= count; i++) { + eventList.add(createGroupEvent(i)); + } + + return eventList; + } + + public static AddUserEvent addUserEvent(long group_id, String user_id) { Faker faker = new Faker(); String firstname = faker.name().firstName(); @@ -30,24 +75,31 @@ public class EventBuilder { return new AddUserEvent( faker.random().nextLong(), group_id, - faker.random().hex(), + user_id, firstname, lastname, firstname + "." + lastname + "@mail.de" ); } - public static List randomAddUserEvents(int count, long group_id) { + /** + * Generiert mehrere AddUserEvents für eine Gruppe, 1 <= user_id <= count + * + * @param count + * @param group_id + * @return + */ + public static List addUserEvents(int count, long group_id) { List eventList = new ArrayList<>(); - for (int i = 0; i < count; i++) { - eventList.add(EventBuilder.randomAddUserEvent(group_id)); + for (int i = 1; i <= count; i++) { + eventList.add(EventBuilder.addUserEvent(group_id, "" + i)); } return eventList; } - public static DeleteUserEvent randomDeleteUserEvent(long group_id, String user_id) { + public static DeleteUserEvent deleteUserEvent(long group_id, String user_id) { Faker faker = new Faker(); return new DeleteUserEvent( @@ -57,7 +109,23 @@ public class EventBuilder { ); } - public static UpdateGroupDescriptionEvent randomUpdateGroupDescriptionEvent(long group_id) { + /** + * Erzeugt mehrere DeleteUserEvents, sodass eine Gruppe komplett geleert wird + * + * @param group Gruppe welche geleert wird + * @return + */ + public static List deleteUserEvents(Group group) { + List eventList = new ArrayList<>(); + + for (User user : group.getMembers()) { + eventList.add(EventBuilder.deleteUserEvent(group.getId(), user.getUser_id())); + } + + return eventList; + } + + public static UpdateGroupDescriptionEvent updateGroupDescriptionEvent(long group_id) { Faker faker = new Faker(); return new UpdateGroupDescriptionEvent( @@ -68,7 +136,7 @@ public class EventBuilder { ); } - public static UpdateGroupTitleEvent randomUpdateGroupTitleEvent(long group_id) { + public static UpdateGroupTitleEvent updateGroupTitleEvent(long group_id) { Faker faker = new Faker(); return new UpdateGroupTitleEvent(