GetStream получает действия получает их все вместо указанного c ID - PullRequest
1 голос
/ 09 января 2020

Я работаю над функцией, которая подключается к GetStream, чтобы получить действия для выбранной группы каналов. Проблема в том, что GetStream возвращает все действия внутри группы каналов, в отличие от заданных для c слаг. В терминах MySQL игнорируется WHERE UUID = uuid:)

Вот код, который я сейчас использую, который возвращает все действия, я пытался установить elementFeed в nil, прежде чем устанавливать его, но это не так работать либо.

    func getStream(uuid: String, completion: @escaping([StreamActivity], Bool, APPError?) -> Void) {

    let group = DispatchGroup()
    group.enter()

    var activities     = [StreamActivity]()
    elementFeed = nil
    elementFeed = Client.shared.flatFeed(feedSlug: "element", userId: uuid)

    elementFeed?.get(typeOf: StreamActivity.self, enrich: false, pagination: .limit(20), ranking: "", includeReactions: [], completion: { results in
        if let foundActivities = results.value?.results {
            activities.append(contentsOf: foundActivities)
            group.leave()
        } else {
            completion([], false, .GetDiscussions)
            group.leave()
        }
    })

    group.notify(queue: .main) {
        self.isUserFollowing(uuid: uuid) { (following) in
            completion(activities, following, nil)
        }
    }

}

Вот код, используемый для создания действия:

func addActivity(type: ActivityType, body: String?, uuid: String, completion: @escaping(Bool, APPError?) -> Void) {

    var feed: FeedId?
    var originFeed: FeedId?

    switch type {
    case .comment:
        feed = FeedId(feedSlug: "element", userId: uuid)
    case .reply:
        originFeed = FeedId(feedSlug: "comment", userId: uuid)
    default:
        break
    }
    let activity = StreamActivity(actor: StreamUser.current!, verb: type.rawValue, object: "element:\(uuid)", body: body!)

    activity.feedIds = [feed!]


    elementFeed = Client.shared.flatFeed(feedSlug: "element", userId: uuid)

    elementFeed?.add(activity, completion: { (result) in
        if result.error == nil {
            completion(true, nil)
        } else {
            completion(false, .PostComment)
        }
        print("GETSTREAM: Activity added:\(result)")
    })
}

1 Ответ

0 голосов
/ 13 января 2020

Stream Feed API не позволяет вам читать действия за пределами ленты. Ленты материализуются, поэтому, когда вы выполняете такой вызов

Client.shared.flatFeed(feedSlug: "element", userId: uuid)

Вы не выполняете запрос (ie. SELECT * ИЗ действий, ГДЕ slug =? AND userId =?), Но вы читаете действия которые были добавлены (напрямую, через цели или из отслеживаемых каналов) в элемент: $ uuid feed.

Если лента содержит неправильные действия, это потому, что что-то идет не так с логи c, использованными для добавления действия или создать последующие отношения.

Когда вы читаете фид, Stream добавляет информацию о происхождении каждого действия; такая информация хранится в поле, называемом «происхождение». Если поле источника отсутствует / пусто, это означает, что действие было добавлено в канал напрямую; если действие было добавлено с помощью отношения follow, то в поле источника будет указан идентификатор канала, из которого было создано действие.

Например:

Если элемент: x следует за пользователем: z; все действия, добавленные пользователем Z, распространяются на элемент: x и будут иметь origin = "user: z" в этом фиде.

Вы можете использовать поле origin, чтобы получить дополнительную информацию о том, почему действие находится в фиде ; это должна быть очень полезная информация, чтобы выяснить, где проблема интеграции.

...