Skip to content

Commit

Permalink
p2-inc#287 Change member resources
Browse files Browse the repository at this point in the history
  • Loading branch information
rtufisi committed Jan 3, 2025
1 parent 3945c0f commit a2e0f70
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package io.phasetwo.service.model.jpa;

import static io.phasetwo.service.Orgs.*;
import static org.keycloak.models.jpa.PaginationUtils.paginateQuery;
import static org.keycloak.utils.StreamsUtil.closing;

import com.google.common.base.Strings;
import io.phasetwo.service.model.DomainModel;
Expand All @@ -20,6 +22,7 @@
import jakarta.persistence.TypedQuery;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
Expand Down Expand Up @@ -200,7 +203,19 @@ public Stream<OrganizationMemberModel> getOrganizationMembersStream() {

@Override
public Stream<OrganizationMemberModel> searchForOrganizationMembersStream(String search, Integer firstResult, Integer maxResults) {
return Stream.empty();
TypedQuery<OrganizationMemberEntity> query;
if(search != null && !search.isEmpty()) {
query = em.createNamedQuery("searchOrganizationMembers", OrganizationMemberEntity.class);
query.setParameter("organization", org);
query.setParameter("search", search);
} else {
query = em.createNamedQuery("getOrganizationMembers", OrganizationMemberEntity.class);
query.setParameter("organization", org);
}

return closing(paginateQuery(query, firstResult, maxResults).getResultStream())
.filter(Objects::nonNull)
.map(organizationMemberEntity -> new OrganizationMemberAdapter(session, realm, em, organizationMemberEntity));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import io.phasetwo.service.model.OrganizationProvider;
import io.phasetwo.service.model.jpa.entity.OrganizationMemberEntity;
import io.phasetwo.service.model.jpa.entity.OrganizationMemberAttributeEntity;
import io.phasetwo.service.model.jpa.entity.OrganizationRoleEntity;
import io.phasetwo.service.model.jpa.entity.UserOrganizationRoleMappingEntity;
import jakarta.persistence.EntityManager;
import org.keycloak.common.util.MultivaluedHashMap;
import org.keycloak.models.KeycloakSession;
Expand Down Expand Up @@ -54,7 +56,14 @@ public OrganizationModel getOrganization() {

@Override
public List<String> getRoles() {
return List.of();
return organizationMemberEntity.getOrganization().getRoles()
.stream()
.flatMap(organizationRoleEntity -> organizationRoleEntity.getUserMappings().stream())
.filter(userOrganizationRoleMappingEntity ->
userOrganizationRoleMappingEntity.getUserId().equals(organizationMemberEntity.getUserId()))
.map(UserOrganizationRoleMappingEntity::getRole)
.map(OrganizationRoleEntity::getName)
.toList();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,14 @@
name = "getOrganizationMembers",
query =
"SELECT m FROM OrganizationMemberEntity m WHERE m.organization = :organization ORDER BY m.createdAt"),

@NamedQuery(
name = "searchOrganizationMembers",
query = "SELECT m FROM OrganizationMemberEntity m inner join UserEntity ue ON ue.id = m.userId" +
" WHERE m.organization = :organization" +
" AND (lower(ue.username) like concat('%',:search,'%') OR ue.firstName like concat('%',:search,'%')" +
" OR ue.lastName like concat('%',:search,'%') OR ue.email like concat('%',:search,'%'))" +
" ORDER BY m.createdAt"),
@NamedQuery(
name = "getOrganizationMemberByUserId",
query =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ public Stream<UserRepresentation> getMembers(
firstResult = firstResult != null ? firstResult : 0;
maxResults = maxResults != null ? maxResults : Constants.DEFAULT_MAX_RESULTS;
return organization
.searchForMembersStream(searchQuery, firstResult, maxResults)
.searchForOrganizationMembersStream(searchQuery, firstResult, maxResults)
.map(m ->{
var membership = organization.getOrganizationMembersStream();
return toRepresentation(session, realm, m);
var user = session.users().getUserById(realm, m.getUserId());
return toRepresentation(session, realm, user);
});
}

Expand Down

0 comments on commit a2e0f70

Please sign in to comment.