/// <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)); }