This is an automated email from the ASF dual-hosted git repository. yasith pushed a commit to branch feat/grpc-armeria-migration in repository https://gitbox.apache.org/repos/asf/airavata.git
commit 53158f1a282ca43af1c87eeb238f6ae3c1176612 Author: yasithdev <[email protected]> AuthorDate: Wed Apr 1 13:39:35 2026 -0400 feat: wire GroupManager, IamAdmin, UserProfile gRPC services to business logic --- .../grpc/services/GroupManagerGrpcService.java | 165 ++++++++++++++++++-- .../server/grpc/services/IamAdminGrpcService.java | 172 +++++++++++++++++++-- .../grpc/services/UserProfileGrpcService.java | 84 +++++++++- 3 files changed, 383 insertions(+), 38 deletions(-) diff --git a/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/GroupManagerGrpcService.java b/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/GroupManagerGrpcService.java index 4c94760b16..a63b155f94 100644 --- a/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/GroupManagerGrpcService.java +++ b/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/GroupManagerGrpcService.java @@ -20,77 +20,214 @@ package org.apache.airavata.server.grpc.services; import com.google.protobuf.Empty; -import io.grpc.Status; import io.grpc.stub.StreamObserver; +import java.util.List; +import java.util.stream.Collectors; import org.apache.airavata.api.groupmanager.*; +import org.apache.airavata.execution.service.RequestContext; import org.apache.airavata.model.group.proto.GroupModel; +import org.apache.airavata.server.grpc.GrpcStatusMapper; +import org.apache.airavata.sharing.handler.SharingRegistryServerHandler; +import org.apache.airavata.sharing.model.GroupAdminEntity; +import org.apache.airavata.sharing.model.UserGroupEntity; import org.springframework.stereotype.Component; @Component public class GroupManagerGrpcService extends GroupManagerServiceGrpc.GroupManagerServiceImplBase { + private final SharingRegistryServerHandler sharingHandler; + + public GroupManagerGrpcService(SharingRegistryServerHandler sharingHandler) { + this.sharingHandler = sharingHandler; + } + @Override public void createGroup(CreateGroupRequest request, StreamObserver<CreateGroupResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("createGroup not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + GroupModel group = request.getGroup(); + UserGroupEntity entity = toEntity(group, ctx.getGatewayId()); + String groupId = sharingHandler.createGroup(entity); + observer.onNext(CreateGroupResponse.newBuilder().setGroupId(groupId).build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void updateGroup(UpdateGroupRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("updateGroup not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + GroupModel group = request.getGroup(); + UserGroupEntity entity = toEntity(group, ctx.getGatewayId()); + sharingHandler.updateGroup(entity); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void deleteGroup(DeleteGroupRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("deleteGroup not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + sharingHandler.deleteGroup(ctx.getGatewayId(), request.getGroupId()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void getGroup(GetGroupRequest request, StreamObserver<GroupModel> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("getGroup not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + UserGroupEntity entity = sharingHandler.getGroup(ctx.getGatewayId(), request.getGroupId()); + observer.onNext(toGroupModel(entity)); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void getGroups(GetGroupsRequest request, StreamObserver<GetGroupsResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("getGroups not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + List<UserGroupEntity> groups = sharingHandler.getGroups(ctx.getGatewayId(), 0, -1); + GetGroupsResponse.Builder builder = GetGroupsResponse.newBuilder(); + groups.forEach(g -> builder.addGroups(toGroupModel(g))); + observer.onNext(builder.build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void getAllGroupsUserBelongs(GetAllGroupsUserBelongsRequest request, StreamObserver<GetAllGroupsUserBelongsResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("getAllGroupsUserBelongs not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + List<UserGroupEntity> groups = sharingHandler.getAllMemberGroupsForUser(ctx.getGatewayId(), request.getUserName()); + GetAllGroupsUserBelongsResponse.Builder builder = GetAllGroupsUserBelongsResponse.newBuilder(); + groups.forEach(g -> builder.addGroups(toGroupModel(g))); + observer.onNext(builder.build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void addUsersToGroup(AddUsersToGroupRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("addUsersToGroup not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + sharingHandler.addUsersToGroup(ctx.getGatewayId(), request.getUserIdsList(), request.getGroupId()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void removeUsersFromGroup(RemoveUsersFromGroupRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("removeUsersFromGroup not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + sharingHandler.removeUsersFromGroup(ctx.getGatewayId(), request.getUserIdsList(), request.getGroupId()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void transferGroupOwnership(TransferGroupOwnershipRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("transferGroupOwnership not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + sharingHandler.transferGroupOwnership(ctx.getGatewayId(), request.getGroupId(), request.getNewOwnerId()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void addGroupAdmins(AddGroupAdminsRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("addGroupAdmins not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + sharingHandler.addGroupAdmins(ctx.getGatewayId(), request.getGroupId(), request.getAdminIdsList()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void removeGroupAdmins(RemoveGroupAdminsRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("removeGroupAdmins not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + sharingHandler.removeGroupAdmins(ctx.getGatewayId(), request.getGroupId(), request.getAdminIdsList()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void hasAdminAccess(HasAdminAccessRequest request, StreamObserver<HasAdminAccessResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("hasAdminAccess not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + boolean result = sharingHandler.hasAdminAccess(ctx.getGatewayId(), request.getGroupId(), request.getAdminId()); + observer.onNext(HasAdminAccessResponse.newBuilder().setHasAccess(result).build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void hasOwnerAccess(HasOwnerAccessRequest request, StreamObserver<HasOwnerAccessResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("hasOwnerAccess not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + boolean result = sharingHandler.hasOwnerAccess(ctx.getGatewayId(), request.getGroupId(), request.getOwnerId()); + observer.onNext(HasOwnerAccessResponse.newBuilder().setHasAccess(result).build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } + } + + // --- Mapping helpers --- + + private static UserGroupEntity toEntity(GroupModel model, String domainId) { + UserGroupEntity entity = new UserGroupEntity(); + if (!model.getId().isEmpty()) entity.setGroupId(model.getId()); + entity.setDomainId(domainId); + if (!model.getName().isEmpty()) entity.setName(model.getName()); + if (!model.getDescription().isEmpty()) entity.setDescription(model.getDescription()); + if (!model.getOwnerId().isEmpty()) entity.setOwnerId(model.getOwnerId()); + return entity; + } + + private static GroupModel toGroupModel(UserGroupEntity entity) { + GroupModel.Builder b = GroupModel.newBuilder(); + if (entity.getGroupId() != null) b.setId(entity.getGroupId()); + if (entity.getName() != null) b.setName(entity.getName()); + if (entity.getOwnerId() != null) b.setOwnerId(entity.getOwnerId()); + if (entity.getDescription() != null) b.setDescription(entity.getDescription()); + if (entity.getGroupAdmins() != null) { + b.addAllAdmins(entity.getGroupAdmins().stream() + .map(GroupAdminEntity::getAdminId) + .collect(Collectors.toList())); + } + return b.build(); } } diff --git a/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/IamAdminGrpcService.java b/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/IamAdminGrpcService.java index 4ed6bb9b45..6188fb8a9b 100644 --- a/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/IamAdminGrpcService.java +++ b/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/IamAdminGrpcService.java @@ -20,88 +20,228 @@ package org.apache.airavata.server.grpc.services; import com.google.protobuf.Empty; -import io.grpc.Status; import io.grpc.stub.StreamObserver; +import java.util.List; import org.apache.airavata.api.iam.*; +import org.apache.airavata.common.config.ServerSettings; +import org.apache.airavata.execution.service.RequestContext; +import org.apache.airavata.model.credential.store.proto.PasswordCredential; import org.apache.airavata.model.user.proto.UserProfile; import org.apache.airavata.model.workspace.proto.Gateway; +import org.apache.airavata.security.profile.iam.admin.services.core.impl.TenantManagementKeycloakImpl; +import org.apache.airavata.security.profile.iam.admin.services.core.interfaces.TenantManagementInterface; +import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; @Component public class IamAdminGrpcService extends IamAdminServiceGrpc.IamAdminServiceImplBase { + private final TenantManagementInterface tenantManager; + + public IamAdminGrpcService() { + this.tenantManager = new TenantManagementKeycloakImpl(); + } + @Override public void setUpGateway(SetUpGatewayRequest request, StreamObserver<Gateway> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("setUpGateway not yet implemented").asRuntimeException()); + try { + PasswordCredential adminCreds = getSuperAdminCredentials(); + Gateway gateway = tenantManager.addTenant(adminCreds, request.getGateway()); + tenantManager.createTenantAdminAccount(adminCreds, request.getGateway(), null); + gateway = tenantManager.configureClient(adminCreds, gateway); + observer.onNext(gateway); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void isUsernameAvailable(IsUsernameAvailableRequest request, StreamObserver<IsUsernameAvailableResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("isUsernameAvailable not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + boolean available = tenantManager.isUsernameAvailable(ctx.getAccessToken(), ctx.getGatewayId(), request.getUsername()); + observer.onNext(IsUsernameAvailableResponse.newBuilder().setAvailable(available).build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void registerUser(RegisterUserRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("registerUser not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + tenantManager.createUser( + ctx.getAccessToken(), ctx.getGatewayId(), + request.getUsername(), request.getEmailAddress(), + request.getFirstName(), request.getLastName(), + request.getNewPassword()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void enableUser(EnableUserRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("enableUser not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + tenantManager.enableUserAccount(ctx.getAccessToken(), ctx.getGatewayId(), request.getUsername()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void isUserEnabled(IsUserEnabledRequest request, StreamObserver<IsUserEnabledResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("isUserEnabled not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + boolean enabled = tenantManager.isUserAccountEnabled(ctx.getAccessToken(), ctx.getGatewayId(), request.getUsername()); + observer.onNext(IsUserEnabledResponse.newBuilder().setEnabled(enabled).build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void isUserExist(IsUserExistRequest request, StreamObserver<IsUserExistResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("isUserExist not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + boolean exists = tenantManager.isUserExist(ctx.getAccessToken(), ctx.getGatewayId(), request.getUsername()); + observer.onNext(IsUserExistResponse.newBuilder().setExists(exists).build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void getUser(GetIamUserRequest request, StreamObserver<UserProfile> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("getUser not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + UserProfile user = tenantManager.getUser(ctx.getAccessToken(), ctx.getGatewayId(), request.getUsername()); + observer.onNext(user); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void getUsers(GetIamUsersRequest request, StreamObserver<GetIamUsersResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("getUsers not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + List<UserProfile> users = tenantManager.getUsers( + ctx.getAccessToken(), ctx.getGatewayId(), + request.getOffset(), request.getLimit(), request.getSearch()); + observer.onNext(GetIamUsersResponse.newBuilder().addAllUsers(users).build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void resetUserPassword(ResetUserPasswordRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("resetUserPassword not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + tenantManager.resetUserPassword(ctx.getAccessToken(), ctx.getGatewayId(), request.getUsername(), request.getNewPassword()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void findUsers(FindUsersRequest request, StreamObserver<FindUsersResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("findUsers not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + List<UserProfile> users = tenantManager.findUser( + ctx.getAccessToken(), ctx.getGatewayId(), + request.getEmail(), request.getUserId()); + observer.onNext(FindUsersResponse.newBuilder().addAllUsers(users).build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void updateUserProfile(UpdateIamUserProfileRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("updateUserProfile not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + UserProfile userDetails = request.getUserDetails(); + tenantManager.updateUserProfile(ctx.getAccessToken(), ctx.getGatewayId(), userDetails.getUserId(), userDetails); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void deleteUser(DeleteUserRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("deleteUser not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + tenantManager.deleteUser(ctx.getAccessToken(), ctx.getGatewayId(), request.getUsername()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void addRoleToUser(AddRoleToUserRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("addRoleToUser not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + PasswordCredential adminCreds = getSuperAdminCredentials(); + tenantManager.addRoleToUser(adminCreds, ctx.getGatewayId(), request.getUsername(), request.getRoleName()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void removeRoleFromUser(RemoveRoleFromUserRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("removeRoleFromUser not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + PasswordCredential adminCreds = getSuperAdminCredentials(); + tenantManager.removeRoleFromUser(adminCreds, ctx.getGatewayId(), request.getUsername(), request.getRoleName()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void getUsersWithRole(GetUsersWithRoleRequest request, StreamObserver<GetUsersWithRoleResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("getUsersWithRole not yet implemented").asRuntimeException()); + try { + RequestContext ctx = GrpcRequestContext.current(); + PasswordCredential adminCreds = getSuperAdminCredentials(); + List<UserProfile> users = tenantManager.getUsersWithRole(adminCreds, ctx.getGatewayId(), request.getRoleName()); + observer.onNext(GetUsersWithRoleResponse.newBuilder().addAllUsers(users).build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } + } + + // --- Helper --- + + private static PasswordCredential getSuperAdminCredentials() throws Exception { + return PasswordCredential.newBuilder() + .setLoginUserName(ServerSettings.getIamServerSuperAdminUsername()) + .setPassword(ServerSettings.getIamServerSuperAdminPassword()) + .build(); } } diff --git a/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/UserProfileGrpcService.java b/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/UserProfileGrpcService.java index f0c71230ff..c9ed6fe301 100644 --- a/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/UserProfileGrpcService.java +++ b/airavata-server/src/main/java/org/apache/airavata/server/grpc/services/UserProfileGrpcService.java @@ -20,47 +20,115 @@ package org.apache.airavata.server.grpc.services; import com.google.protobuf.Empty; -import io.grpc.Status; import io.grpc.stub.StreamObserver; +import java.util.List; import org.apache.airavata.api.userprofile.*; +import org.apache.airavata.execution.service.RequestContext; import org.apache.airavata.model.user.proto.UserProfile; +import org.apache.airavata.security.profile.user.core.repositories.UserProfileRepository; +import org.apache.airavata.server.grpc.GrpcStatusMapper; import org.springframework.stereotype.Component; @Component public class UserProfileGrpcService extends UserProfileServiceGrpc.UserProfileServiceImplBase { + private final UserProfileRepository userProfileRepository; + + public UserProfileGrpcService() { + this.userProfileRepository = new UserProfileRepository(); + } + @Override public void addUserProfile(AddUserProfileRequest request, StreamObserver<AddUserProfileResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("addUserProfile not yet implemented").asRuntimeException()); + try { + UserProfile created = userProfileRepository.createUserProfile(request.getUserProfile()); + observer.onNext(AddUserProfileResponse.newBuilder().setUserId(created.getUserId()).build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void updateUserProfile(UpdateUserProfileRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("updateUserProfile not yet implemented").asRuntimeException()); + try { + userProfileRepository.updateUserProfile(request.getUserProfile(), null); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void getUserProfileById(GetUserProfileByIdRequest request, StreamObserver<UserProfile> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("getUserProfileById not yet implemented").asRuntimeException()); + try { + UserProfile profile = userProfileRepository.getUserProfileByIdAndGateWay( + request.getUserId(), request.getGatewayId()); + if (profile == null) { + observer.onError(io.grpc.Status.NOT_FOUND + .withDescription("User profile not found for userId=" + request.getUserId()) + .asRuntimeException()); + return; + } + observer.onNext(profile); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void getUserProfileByName(GetUserProfileByNameRequest request, StreamObserver<UserProfile> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("getUserProfileByName not yet implemented").asRuntimeException()); + try { + UserProfile profile = userProfileRepository.getUserProfileByIdAndGateWay( + request.getUserName(), request.getGatewayId()); + if (profile == null) { + observer.onError(io.grpc.Status.NOT_FOUND + .withDescription("User profile not found for userName=" + request.getUserName()) + .asRuntimeException()); + return; + } + observer.onNext(profile); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void deleteUserProfile(DeleteUserProfileRequest request, StreamObserver<Empty> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("deleteUserProfile not yet implemented").asRuntimeException()); + try { + userProfileRepository.delete(request.getUserId()); + observer.onNext(Empty.getDefaultInstance()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void getAllUserProfilesInGateway(GetAllUserProfilesInGatewayRequest request, StreamObserver<GetAllUserProfilesInGatewayResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("getAllUserProfilesInGateway not yet implemented").asRuntimeException()); + try { + List<UserProfile> profiles = userProfileRepository.getAllUserProfilesInGateway( + request.getGatewayId(), request.getOffset(), request.getLimit()); + observer.onNext(GetAllUserProfilesInGatewayResponse.newBuilder() + .addAllUserProfiles(profiles).build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } @Override public void doesUserExist(DoesUserExistRequest request, StreamObserver<DoesUserExistResponse> observer) { - observer.onError(Status.UNIMPLEMENTED.withDescription("doesUserExist not yet implemented").asRuntimeException()); + try { + UserProfile profile = userProfileRepository.getUserProfileByIdAndGateWay( + request.getUserName(), request.getGatewayId()); + observer.onNext(DoesUserExistResponse.newBuilder().setExists(profile != null).build()); + observer.onCompleted(); + } catch (Exception e) { + observer.onError(GrpcStatusMapper.toStatusException(e)); + } } }
