Пример #1
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));
        }