Skip to content

Commit

Permalink
Merge pull request #22 from virtualidentityag/DIAKONIE-335-include-ma…
Browse files Browse the repository at this point in the history
…intopic-id-in-the-response

Diakonie 335 include maintopic id in the response
  • Loading branch information
tkuzynow authored Jun 10, 2024
2 parents 6520e31 + 0bfb9cb commit ebd9ba4
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 18 deletions.
4 changes: 4 additions & 0 deletions api/userservice.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2589,6 +2589,10 @@ components:
description: "Datetime stamp when the user accepted data privacy"
emailNotifications:
$ref: "#/components/schemas/EmailNotificationsDTO"
sessions:
type: array
items:
$ref: "#/components/schemas/SessionDTO"

PatchUserDTO:
type: object
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,6 @@ public class UserDataResponseDTO {
private Boolean available;

private EmailNotificationsDTO emailNotifications;

private Set<SessionDTO> sessions;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import de.caritas.cob.userservice.api.adapters.web.dto.AgencyDTO;
import de.caritas.cob.userservice.api.adapters.web.dto.LanguageCode;
import de.caritas.cob.userservice.api.adapters.web.dto.UserDataResponseDTO;
import de.caritas.cob.userservice.api.adapters.web.dto.UserDataResponseDTO.UserDataResponseDTOBuilder;
import de.caritas.cob.userservice.api.helper.AuthenticatedUser;
import de.caritas.cob.userservice.api.helper.SessionDataProvider;
import de.caritas.cob.userservice.api.manager.consultingtype.ConsultingTypeManager;
Expand All @@ -11,6 +12,9 @@
import de.caritas.cob.userservice.api.model.UserAgency;
import de.caritas.cob.userservice.api.port.out.IdentityClientConfig;
import de.caritas.cob.userservice.api.service.agency.AgencyService;
import de.caritas.cob.userservice.api.service.session.SessionMapper;
import de.caritas.cob.userservice.api.service.session.SessionService;
import de.caritas.cob.userservice.api.service.session.SessionTopicEnrichmentService;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
Expand All @@ -37,33 +41,53 @@ public class AskerDataProvider {
private final @NonNull ConsultingTypeManager consultingTypeManager;
private final @NonNull IdentityClientConfig identityClientConfig;

private final @NonNull SessionService sessionService;

private final @NonNull EmailNotificationMapper emailNotificationMapper;

private final @NonNull SessionTopicEnrichmentService sessionTopicEnrichmentService;

/**
* Retrieve the user data of an asker, e.g. username, email, name, ...
*
* @param user a {@link User} instance
* @return the user data
*/
public UserDataResponseDTO retrieveData(User user) {
return UserDataResponseDTO.builder()
.userId(user.getUserId())
.userName(user.getUsername())
.email(observeUserEmailAddress(user))
.isAbsent(false)
.encourage2fa(user.getEncourage2fa())
.isFormalLanguage(user.isLanguageFormal())
.preferredLanguage(LanguageCode.fromValue(user.getLanguageCode().toString()))
.isInTeamAgency(false)
.userRoles(authenticatedUser.getRoles())
.grantedAuthorities(authenticatedUser.getGrantedAuthorities())
.consultingTypes(getConsultingTypes(user))
.hasAnonymousConversations(false)
.hasArchive(false)
.dataPrivacyConfirmation(user.getDataPrivacyConfirmation())
.termsAndConditionsConfirmation(user.getTermsAndConditionsConfirmation())
.emailNotifications(emailNotificationMapper.toEmailNotificationsDTO(user))
.build();
var userDataResponseDTOBuilder =
UserDataResponseDTO.builder()
.userId(user.getUserId())
.userName(user.getUsername())
.email(observeUserEmailAddress(user))
.isAbsent(false)
.encourage2fa(user.getEncourage2fa())
.isFormalLanguage(user.isLanguageFormal())
.preferredLanguage(LanguageCode.fromValue(user.getLanguageCode().toString()))
.isInTeamAgency(false)
.userRoles(authenticatedUser.getRoles())
.grantedAuthorities(authenticatedUser.getGrantedAuthorities())
.consultingTypes(getConsultingTypes(user))
.hasAnonymousConversations(false)
.hasArchive(false)
.dataPrivacyConfirmation(user.getDataPrivacyConfirmation())
.termsAndConditionsConfirmation(user.getTermsAndConditionsConfirmation())
.emailNotifications(emailNotificationMapper.toEmailNotificationsDTO(user));

enrichWithUserSessions(user, userDataResponseDTOBuilder);
return userDataResponseDTOBuilder.build();
}

private void enrichWithUserSessions(
User user, UserDataResponseDTOBuilder userDataResponseDTOBuilder) {
List<Session> sessionsByUser = sessionService.findSessionsByUser(user);
if (CollectionUtils.isNotEmpty(sessionsByUser)) {
SessionMapper sessionMapper = new SessionMapper();
userDataResponseDTOBuilder.sessions(
sessionsByUser.stream()
.map(sessionMapper::convertToSessionDTO)
.map(sessionTopicEnrichmentService::enrichSessionWithTopicData)
.collect(Collectors.toSet()));
}
}

private String observeUserEmailAddress(User user) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -747,6 +747,13 @@ public Optional<Session> findSessionByConsultantAndUserAndConsultingType(
return Optional.empty();
}

public List<Session> findSessionsByUser(User user) {
if (nonNull(user)) {
return sessionRepository.findByUser(user);
}
return emptyList();
}

public String findGroupIdByConsultantAndUser(String consultantId, String askerId) {

Optional<Consultant> consultant = consultantService.getConsultant(consultantId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,18 +18,27 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import com.google.api.client.util.Sets;
import com.google.common.collect.Lists;
import com.neovisionaries.i18n.LanguageCode;
import de.caritas.cob.userservice.api.adapters.web.dto.AgencyDTO;
import de.caritas.cob.userservice.api.adapters.web.dto.SessionDTO;
import de.caritas.cob.userservice.api.adapters.web.dto.UserDataResponseDTO;
import de.caritas.cob.userservice.api.config.auth.UserRole;
import de.caritas.cob.userservice.api.exception.httpresponses.InternalServerErrorException;
import de.caritas.cob.userservice.api.helper.AuthenticatedUser;
import de.caritas.cob.userservice.api.helper.SessionDataProvider;
import de.caritas.cob.userservice.api.manager.consultingtype.ConsultingTypeManager;
import de.caritas.cob.userservice.api.model.Session;
import de.caritas.cob.userservice.api.model.Session.RegistrationType;
import de.caritas.cob.userservice.api.model.Session.SessionStatus;
import de.caritas.cob.userservice.api.model.User;
import de.caritas.cob.userservice.api.port.out.IdentityClientConfig;
import de.caritas.cob.userservice.api.service.agency.AgencyService;
import de.caritas.cob.userservice.api.service.session.SessionService;
import de.caritas.cob.userservice.api.service.session.SessionTopicEnrichmentService;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
Expand Down Expand Up @@ -61,6 +70,10 @@ public class AskerDataProviderTest {

@Mock EmailNotificationMapper emailNotificationMapper;

@Mock SessionService sessionService;

@Mock SessionTopicEnrichmentService sessionTopicEnrichmentService;

@Test
public void
retrieveData_Should_ReturnUserDataWithAgency_When_ProvidedWithUserWithAgencyInSession() {
Expand Down Expand Up @@ -104,6 +117,41 @@ public void retrieveData_Should_ReturnUserDataWithAgency_When_ProvidedWithUserWi
assertEquals(AGENCY_DTO_KREUZBUND, agency);
}

@Test
public void retrieveData_Should_ReturnUserDataWithSessions_When_ProvidedWithUserWithSessions() {
givenAnEmailDummySuffixConfig();
when(authenticatedUser.getRoles()).thenReturn(asSet(UserRole.USER.getValue()));
ArrayList<Session> inputSessions =
Lists.newArrayList(
Session.builder()
.id(1L)
.registrationType(RegistrationType.ANONYMOUS)
.languageCode(LanguageCode.de)
.postcode("12111")
.status(SessionStatus.NEW)
.createDate(LocalDateTime.now())
.build(),
Session.builder()
.id(2L)
.registrationType(RegistrationType.REGISTERED)
.languageCode(LanguageCode.de)
.postcode("11111")
.createDate(LocalDateTime.now())
.status(SessionStatus.NEW)
.build());
when(sessionService.findSessionsByUser(Mockito.any(User.class))).thenReturn(inputSessions);
when(sessionTopicEnrichmentService.enrichSessionWithTopicData(Mockito.any(SessionDTO.class)))
.thenAnswer(invocation -> invocation.getArgument(0));
Set<SessionDTO> sessions = askerDataProvider.retrieveData(USER).getSessions();

assertEquals(2, sessions.size());
var expectedSessionsIds = Sets.newHashSet();
expectedSessionsIds.add(1L);
expectedSessionsIds.add(2L);
var sessionIds = sessions.stream().map(SessionDTO::getId).collect(Collectors.toSet());
assertEquals(sessionIds, expectedSessionsIds);
}

@Test(expected = InternalServerErrorException.class)
public void
retrieveData_GetConsultingTypes_Should_ThrowInternalServerErrorException_When_AgencyServiceHelperFails() {
Expand Down

0 comments on commit ebd9ba4

Please sign in to comment.