diff --git a/backend/src/main/java/com/dhbw/get2gether/backend/event/adapter/in/EventController.java b/backend/src/main/java/com/dhbw/get2gether/backend/event/adapter/in/EventController.java index 0ff98b9..ace91c5 100644 --- a/backend/src/main/java/com/dhbw/get2gether/backend/event/adapter/in/EventController.java +++ b/backend/src/main/java/com/dhbw/get2gether/backend/event/adapter/in/EventController.java @@ -27,8 +27,8 @@ public EventDetailDto createEvent( } @GetMapping("/own") - public List getOwnEvents(@AuthenticationPrincipal OAuth2User principal) { - return eventService.getAllEventsFromUser(principal); + public List getOwnEvents(@AuthenticationPrincipal AuthenticatedPrincipal principal) { + return eventService.getAllEventsFromPrincipal(principal); } @GetMapping("/{eventId}") diff --git a/backend/src/main/java/com/dhbw/get2gether/backend/event/adapter/out/EventRepository.java b/backend/src/main/java/com/dhbw/get2gether/backend/event/adapter/out/EventRepository.java index 2c2a4d1..080eacd 100644 --- a/backend/src/main/java/com/dhbw/get2gether/backend/event/adapter/out/EventRepository.java +++ b/backend/src/main/java/com/dhbw/get2gether/backend/event/adapter/out/EventRepository.java @@ -4,6 +4,7 @@ import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.stereotype.Repository; +import java.util.Collection; import java.util.List; import java.util.Optional; @@ -12,5 +13,7 @@ public interface EventRepository extends MongoRepository { List findEventsByParticipantIdsContainsOrderByDateDesc(String participantId); + List findAllByIdInOrderByDateDesc(Collection id); + Optional findByInvitationLink(String invitationLink); } diff --git a/backend/src/main/java/com/dhbw/get2gether/backend/event/application/EventService.java b/backend/src/main/java/com/dhbw/get2gether/backend/event/application/EventService.java index fd85c20..8c03014 100644 --- a/backend/src/main/java/com/dhbw/get2gether/backend/event/application/EventService.java +++ b/backend/src/main/java/com/dhbw/get2gether/backend/event/application/EventService.java @@ -51,14 +51,18 @@ public Event createEvent(AuthenticatedPrincipal principal, EventCreateCommand ev return eventRepository.insert(event); } - @PreAuthorize("hasRole('USER')") - public List getAllEventsFromUser(AuthenticatedPrincipal principal) { - // TODO: check if principal is guest and return granted events - List userEvents = userService - .findUserFromPrincipal(principal) - .map(user -> eventRepository.findEventsByParticipantIdsContainsOrderByDateDesc(user.getId())) - .orElse(List.of()); - return userEvents.stream().map(eventMapper::toEventOverviewDto).toList(); + @PreAuthorize("hasRole('GUEST')") + public List getAllEventsFromPrincipal(AuthenticatedPrincipal principal) { + List events; + if (principal instanceof GuestAuthenticationPrincipal guestPrincipal) { + events = eventRepository.findAllByIdInOrderByDateDesc(guestPrincipal.getGrantedEventIds()); + } else { + events = userService + .findUserFromPrincipal(principal) + .map(user -> eventRepository.findEventsByParticipantIdsContainsOrderByDateDesc(user.getId())) + .orElse(List.of()); + } + return events.stream().map(eventMapper::toEventOverviewDto).toList(); } @PreAuthorize("hasRole('GUEST')") diff --git a/backend/src/test/java/com/dhbw/get2gether/backend/event/application/EventServiceTest.java b/backend/src/test/java/com/dhbw/get2gether/backend/event/application/EventServiceTest.java index 8b1840c..87c2ce0 100644 --- a/backend/src/test/java/com/dhbw/get2gether/backend/event/application/EventServiceTest.java +++ b/backend/src/test/java/com/dhbw/get2gether/backend/event/application/EventServiceTest.java @@ -18,10 +18,7 @@ import org.springframework.security.core.AuthenticatedPrincipal; import org.springframework.security.core.context.SecurityContextHolder; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; +import java.util.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; @@ -92,7 +89,7 @@ void shouldGetEventsFromUser() { .thenReturn(Collections.singletonList(event)); // when - List events = eventService.getAllEventsFromUser(principal); + List events = eventService.getAllEventsFromPrincipal(principal); // then verify(eventRepository).findEventsByParticipantIdsContainsOrderByDateDesc(eq(user.getId())); @@ -101,17 +98,22 @@ void shouldGetEventsFromUser() { @Test @WithMockGuestUser - void shouldNotGetEventsFromGuest() { + void shouldGetGrantedEventsFromGuest() { // given - AuthenticatedPrincipal principal = (AuthenticatedPrincipal) + GuestAuthenticationPrincipal principal = (GuestAuthenticationPrincipal) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + principal.grantAccessToEvent("test"); + Event event = Event.builder().id("test").build(); - when(userService.findUserFromPrincipal(any())).thenReturn(Optional.empty()); + when(eventRepository.findAllByIdInOrderByDateDesc(eq(principal.getGrantedEventIds()))) + .thenReturn(Collections.singletonList(event)); // when + List events = eventService.getAllEventsFromPrincipal(principal); + // then - assertThatThrownBy(() -> eventService.getAllEventsFromUser(principal)) - .isInstanceOf(AccessDeniedException.class); + verify(eventRepository).findAllByIdInOrderByDateDesc(eq(principal.getGrantedEventIds())); + assertThat(events).hasSize(1); } @Test