Пример #1
0
        public Result <long> PublishDeleteOrganizationUser(int?organizationUserId, int?userType, long valueDeletedAt, int organizationId)
        {
            if (!organizationUserId.HasValue)
            {
                return(new Result <long>(OrganizationUserServiceErrors.InvalidOrganizationUserId()));
            }

            if (!userType.HasValue)
            {
                return(new Result <long>(OrganizationUserServiceErrors.InvalidUserTypeId()));
            }

            // need to send the domain event to potential interested subscribers
            var message = publisher.CreateMessage(new OrganizationUserDeletedDomainEvent
            {
                UserType           = userType.Value,
                OrganizationUserId = organizationUserId.Value,
                OrganizationId     = organizationId,
                DeletedAt          = valueDeletedAt
            });

            publisher.Publish(message);

            return(new Result <long>(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()));
        }
Пример #2
0
        public Result <GetSingleOrganizationOrgUsersResult> GetSingleOrganizationOrgUsers(int organizationId)
        {
            if (organizationId <= 0 || !organizationRepository.OrganizationExists(organizationId))
            {
                return(new Result <GetSingleOrganizationOrgUsersResult>(OrganizationUserServiceErrors.NotFoundError()));
            }
            var result = organizationUserRepository.GetSingleOrganizationOrgUsers(organizationId);

            return(new Result <GetSingleOrganizationOrgUsersResult>(result));
        }
Пример #3
0
        public Result <int> CreateOrganizationUser(CreateOrganizationUserCommand command)
        {
            this.logger.LogInformation("{}, {}, {}", command.UserType, command.OrganizationId, command.UserId);

            if (organizationUserRepository.OrganizationUserExists(command.UserId, command.UserType, command.OrganizationId))
            {
                return(new Result <int>(OrganizationUserServiceErrors.OrganizationUserAlreadyExists()));
            }

            var organizationUserId = organizationUserRepository.CreateOrganizationUser(command);

            return(new Result <int>(organizationUserId));
        }
Пример #4
0
        public EmptyResult DeleteOrganizationUsersAssociation(int organizationUserId, int associationType)
        {
            var associationTypeExists = this.organizationUserRepository.AssociationTypeExists(organizationUserId, associationType);

            if (!associationTypeExists)
            {
                var error = OrganizationUserServiceErrors.AssociationDoesNotExistsWithAnotherOrganizationUser();
                return(new EmptyResult(error));
            }

            this.organizationUserRepository.DeleteAssociationOrganizationUser(organizationUserId, associationType);
            return(new EmptyResult());
        }
Пример #5
0
        public Result <bool> ExistOrganizationUser(int organizationUserId, int organizationId)
        {
            if (organizationUserId <= 0)
            {
                return(new Result <bool>(OrganizationUserServiceErrors.InvalidOrganizationUserId()));
            }
            if (organizationId <= 0)
            {
                return(new Result <bool>(OrganizationUserServiceErrors.InvalidOrganizationId()));
            }

            var organizationUserResult = organizationUserRepository.OrganizationUserExists(organizationUserId, organizationId);

            return(new Result <bool>(organizationUserResult));
        }
Пример #6
0
        public Result <long> PublishCreateOrganizationUser(int organizationUserId, int userType, int organizationId, string transactionId)
        {
            // need to make sure the org user actually exists
            var organizationUserData = organizationUserRepository.GetOrganizationUser(organizationUserId, userType, organizationId);

            if (organizationUserData == null)
            {
                return(new Result <long>(OrganizationUserServiceErrors.InvalidOrganizationUserId()));
            }

            // need to get a hold of the OrgUser metadata
            var profileData           = profileRepository.GetProfile(organizationUserData.ProfileId, organizationId);
            var organizationUserRoles = roleRepository.GetOrganizationUserRoles(organizationUserId, organizationId);

            var roles = string.Empty;

            if (organizationUserRoles.Roles.Count > 0)
            {
                roles = JsonConvert.SerializeObject(organizationUserRoles.Roles);
            }

            // need to send the domain event to potential interested subscribers
            var message = publisher.CreateMessage(new OrganizationUserAddedDomainEvent
            {
                TransactionId      = transactionId,
                UserType           = userType,
                OrganizationUserId = organizationUserId,
                OrganizationId     = organizationUserData.OrganizationId,
                UserId             = organizationUserData.UserId,
                Username           = organizationUserData.Username,
                FirstName          = organizationUserData.FirstName,
                LastName           = organizationUserData.LastName,
                Email               = organizationUserData.Email,
                IsActive            = organizationUserData.IsActive,
                CreatedAt           = organizationUserData.CreatedAt,
                IsLocked            = organizationUserData.IsLocked,
                IsPendingActivation = organizationUserData.IsPendingActivation,
                Profile             = new Dictionary <int, string>(profileData.ProfileValues.Select(p => new KeyValuePair <int, string>(p.ProfileParameterId, p.Value))),
                Roles               = roles
                                      // RelatedOrganizationUsers = TBD
            });

            publisher.Publish(message);

            return(new Result <long>(DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()));
        }
Пример #7
0
        public Result <bool> ExistOrganizationUser(int?organizationUserId, int?userType, int?organizationId)
        {
            if (!organizationUserId.HasValue)
            {
                return(new Result <bool>(OrganizationUserServiceErrors.InvalidOrganizationUserId()));
            }
            if (!userType.HasValue)
            {
                return(new Result <bool>(OrganizationUserServiceErrors.InvalidUserTypeIdError()));
            }
            if (!organizationId.HasValue)
            {
                return(new Result <bool>(OrganizationUserServiceErrors.InvalidOrganizationId()));
            }

            var organizationUserResult = organizationUserRepository.OrganizationUserExists(organizationUserId.Value, userType.Value, organizationId.Value);

            return(new Result <bool>(organizationUserResult));
        }
Пример #8
0
        /// <summary>
        /// Associates two organization users with a given association type.
        /// </summary>
        /// <param name="associationCommand"></param>
        /// <returns></returns>
        public Result <int> CreateOrganizationUsersAssociation(CreateOrganizationUsersAssociationCommand associationCommand)
        {
            if (associationCommand == null)
            {
                var error = OrganizationUserServiceErrors.InvalidAssociateOrgUsersData();
                logger.LogError(error.Code);
                return(new Result <int>(error));
            }

            if (!this.organizationUserRepository.OrganizationUserExists(associationCommand.OrganizationUserId1, associationCommand.OrganizationId) ||
                !this.organizationUserRepository.OrganizationUserExists(associationCommand.OrganizationUserId2, associationCommand.OrganizationId)
                )
            {
                var error = OrganizationUserServiceErrors.InvalidOrganizationUserId();
                logger.LogError(error.Code);
                return(new Result <int>(error));
            }

            var associationExists = this.organizationUserRepository.AssociationExists(associationCommand);

            if (associationExists)
            {
                var error = OrganizationUserServiceErrors.AssociationAlreadyExists();
                logger.LogError(error.Code);
                return(new Result <int>(error));
            }

            //Checks if the primary organizationUser already has an association of the same type with a different user.
            var associationTypeExists = this.organizationUserRepository.AssociationTypeExists(associationCommand.OrganizationUserId1, associationCommand.AssociationType);

            if (associationTypeExists)
            {
                var error = OrganizationUserServiceErrors.AssociationOfTypeAlreadyExistsWithAnotherUser();
                logger.LogError(error.Code);
                return(new Result <int>(error));
            }


            var result = this.organizationUserRepository.CreateAssociationOrganizationUser(associationCommand);

            return(new Result <int>(result));
        }
Пример #9
0
        public EmptyResult SetUserPendingActivationStatus(string externalUserId, bool isPendingActivation)
        {
            if (string.IsNullOrWhiteSpace(externalUserId))
            {
                return(new EmptyResult(OrganizationUserServiceErrors.InvalidExternalUserIdError()));
            }

            //update org user
            var userResult = organizationUserRepository.SetUserPendingActivationStatus(externalUserId, isPendingActivation);

            var message = publisher.CreateMessage(new OrganizationUserSetPendingStatusDomainEvent
            {
                ExternalUserId      = externalUserId,
                UserType            = userResult.UserType,
                IsPendingActivation = isPendingActivation
            });

            publisher.Publish(message);
            return(new EmptyResult());
        }
Пример #10
0
        public EmptyResult UpdateOrganizationUser(UpdateOrganizationUserCommand command)
        {
            this.logger.LogInformation("{} {}", command.OrganizationUserId, command.UserType);

            var organizationUser =
                organizationUserRepository.GetOrganizationUser(command.OrganizationUserId, command.UserType, command.OrganizationId);

            if (organizationUser == null)
            {
                return(new EmptyResult(OrganizationUserServiceErrors.NotFoundError()));
            }

            if (!string.IsNullOrWhiteSpace(command.Email) &&
                !string.Equals(command.Email, organizationUser.Email, StringComparison.CurrentCultureIgnoreCase) &&
                organizationUserRepository.IsEmailInUse(command.Email, organizationUser.OrganizationUserId))
            {
                return(new EmptyResult(OrganizationUserServiceErrors.EmailAlreadyInUseError()));
            }

            organizationUserRepository.UpdateOrganizationUser(command);
            return(new EmptyResult());
        }
Пример #11
0
        public EmptyResult SetLastLoginTime(string externalUserId, long lastLoginTimestamp)
        {
            if (string.IsNullOrWhiteSpace(externalUserId))
            {
                return(new EmptyResult(OrganizationUserServiceErrors.InvalidExternalUserIdError()));
            }

            //update org user
            var userResult = organizationUserRepository.SetLastLoginTime(externalUserId, lastLoginTimestamp);

            //publish changes
            var setStatusMsg = publisher.CreateMessage(new OrganizationUserSetLastLoginDomainEvent
            {
                ExternalUserId = externalUserId,
                UserType       = userResult.UserType,
                LastLoginAt    = lastLoginTimestamp
            });

            publisher.Publish(setStatusMsg);

            return(new EmptyResult());
        }
Пример #12
0
        public EmptyResult SetUserLockStatus(string externalUserId, bool isLocked)
        {
            if (string.IsNullOrWhiteSpace(externalUserId))
            {
                return(new EmptyResult(OrganizationUserServiceErrors.InvalidExternalUserIdError()));
            }

            //update org user
            var userResult = organizationUserRepository.SetOrganizationUserLockedStatus(externalUserId, isLocked);

            //publish changes
            var setStatusMsg = publisher.CreateMessage(new OrganizationUserSetLockedStatusDomainEvent
            {
                ExternalUserId = externalUserId,
                UserType       = userResult.UserType,
                IsLocked       = isLocked
            });

            publisher.Publish(setStatusMsg);

            return(new EmptyResult());
        }
Пример #13
0
        public Result <AnyOrganizationUserWithSharedUserId> DeleteOrganizationUser(int?organizationUserId, int?userType, int?organizationId)
        {
            if (!organizationId.HasValue)
            {
                return(new Result <AnyOrganizationUserWithSharedUserId>(OrganizationUserServiceErrors.InvalidOrganizationId()));
            }
            if (!userType.HasValue)
            {
                return(new Result <AnyOrganizationUserWithSharedUserId>(OrganizationUserServiceErrors.InvalidUserTypeId()));
            }
            if (!organizationUserId.HasValue)
            {
                return(new Result <AnyOrganizationUserWithSharedUserId>(OrganizationUserServiceErrors.InvalidOrganizationUserId()));
            }
            if (!organizationUserRepository.OrganizationUserExists(organizationUserId.Value, organizationId.Value))
            {
                return(new Result <AnyOrganizationUserWithSharedUserId>(OrganizationUserServiceErrors.NotFoundError()));
            }

            var deletedAt = organizationUserRepository.DeleteOrganizationUser(organizationUserId.Value, userType.Value, organizationId.Value);

            groupRepository.DisassociateOrganizationUserFromAllGroups(new DisassociateOrganizationUserFromAllGroupsCommand
            {
                OrganizationId     = organizationId.Value,
                OrganizationUserId = organizationUserId.Value
            });

            var isLastUserIdRelationship = organizationUserRepository.AnyOrganizationUserWithSharedUserId(organizationUserId.Value);

            isLastUserIdRelationship.DeletedAt = deletedAt;

            var publishResult = PublishDeleteOrganizationUser(
                organizationUserId.Value,
                userType.Value,
                deletedAt,
                organizationId.Value);

            return(new Result <AnyOrganizationUserWithSharedUserId>(isLastUserIdRelationship));
        }
Пример #14
0
        public Result <QueryOrganizationUsersResult> QueryOrganizationUsers(QueryOrganizationUsersCriteria criteria)
        {
            if (criteria == null)
            {
                return(new Result <QueryOrganizationUsersResult>(OrganizationUserServiceErrors.InvalidQueryParameters(nameof(criteria))));
            }

            if (criteria.Page == null || criteria.Page.Value <= 0)
            {
                criteria.Page = 1;
            }

            if (criteria.PageSize == null || criteria.PageSize.Value <= 0)
            {
                criteria.PageSize = 10;
            }

            string[] sortableFields = { "firstname", "lastname", "email", "username", "createdat", "islocked", "ispendingactivation", "isactive", "lastlogintime" };

            if (!sortableFields.Contains(criteria.OrderBy, StringComparer.OrdinalIgnoreCase))
            {
                criteria.OrderBy = string.Empty;
            }

            if (string.IsNullOrWhiteSpace(criteria.Direction))
            {
                criteria.Direction = "ASC";
            }
            if (!criteria.Direction.ToUpper().Equals("ASC") && !criteria.Direction.ToUpper().Equals("DESC"))
            {
                criteria.Direction = "ASC";
            }

            var result = organizationUserRepository.QueryOrganizationUsers(criteria);

            return(new Result <QueryOrganizationUsersResult>(result));
        }