diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1c12a4790..8d9cd7f8f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -26,7 +26,7 @@ moshi = "1.15.2" navigationCompose = "2.9.3" okhttp = "4.12.0" retrofit = "2.12.0" -streamAndroidCore = "0.2.0" +streamAndroidCore = "1.0.0" symbolProcessingApi = "2.2.0-2.0.2" lifecycleProcess = "2.9.1" lifecycleViewModelCompose = "2.4.0" diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/model/FollowData.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/model/FollowData.kt index 3bcaad1af..6d760b005 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/model/FollowData.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/model/FollowData.kt @@ -75,9 +75,9 @@ public data class FollowData( /** * Sealed class representing the status of a follow relationship. * - * @property string The string representation of the follow status. + * @property value The string representation of the follow status. */ -public sealed class FollowStatus(public val string: String) { +public sealed class FollowStatus(public val value: String) { /** Represents a follow relationship that has been accepted. */ public object Accepted : FollowStatus("accepted") diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/model/QueryConfiguration.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/model/QueryConfiguration.kt index 259cc439f..313dbb821 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/model/QueryConfiguration.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/model/QueryConfiguration.kt @@ -17,7 +17,7 @@ package io.getstream.feeds.android.client.api.model import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField -import io.getstream.android.core.api.filter.Sort +import io.getstream.android.core.api.sort.Sort /** * Wrapper around the query configuration consisting of a [Filter] and a list of [Sort] operations. @@ -25,7 +25,7 @@ import io.getstream.android.core.api.filter.Sort * @property filter The filter for the query. * @property sort The list of sorting operations for the query. */ -internal data class QueryConfiguration>( - val filter: Filter?, +internal data class QueryConfiguration, S : Sort>( + val filter: Filter?, val sort: List?, ) diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/ActivitiesQuery.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/ActivitiesQuery.kt index a76965865..00159251e 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/ActivitiesQuery.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/ActivitiesQuery.kt @@ -17,11 +17,12 @@ package io.getstream.feeds.android.client.api.state.query import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField import io.getstream.android.core.api.filter.toRequest +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import io.getstream.feeds.android.client.api.model.ActivityData +import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.internal.model.mapping.toRequest import io.getstream.feeds.android.network.models.QueryActivitiesRequest @@ -60,73 +61,97 @@ public data class ActivitiesQuery( public val previous: String? = null, ) -public typealias ActivitiesFilter = Filter +/** + * A type alias representing a filter specifically for [ActivityData] using [ActivitiesFilterField]. + */ +public typealias ActivitiesFilter = Filter + +internal typealias ActivitiesQueryConfig = + QueryConfiguration -public data class ActivitiesFilterField(override val remote: String) : FilterField { +/** Represents a field that can be used to filter activities. */ +public data class ActivitiesFilterField( + override val remote: String, + override val localValue: (ActivityData) -> Any?, +) : FilterField { public companion object { /** * Filter by activity creation timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val createdAt: ActivitiesFilterField = ActivitiesFilterField("created_at") + public val createdAt: ActivitiesFilterField = + ActivitiesFilterField("created_at", ActivityData::createdAt) /** * Filter by activity ID. * * Supported operators: `equal`, `in` */ - public val id: ActivitiesFilterField = ActivitiesFilterField("id") + public val id: ActivitiesFilterField = ActivitiesFilterField("id", ActivityData::id) /** * Filter by activity filter tags. * * Supported operators: `equal`, `in`, `contains` */ - public val filterTags: ActivitiesFilterField = ActivitiesFilterField("filter_tags") + public val filterTags: ActivitiesFilterField = + ActivitiesFilterField("filter_tags", ActivityData::filterTags) /** * Filter by activity popularity score. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val popularity: ActivitiesFilterField = ActivitiesFilterField("popularity") + public val popularity: ActivitiesFilterField = + ActivitiesFilterField("popularity", ActivityData::popularity) /** * Filter by activity search data. * - * Supported operators: `equal`, `q`, `autocomplete` + * Supported operators: `q`, `autocomplete` */ - public val searchData: ActivitiesFilterField = ActivitiesFilterField("search_data") + public val searchData: ActivitiesFilterField = + ActivitiesFilterField("search_data", ActivityData::searchData) /** * Filter by activity text content. * * Supported operators: `equal`, `q`, `autocomplete` */ - public val text: ActivitiesFilterField = ActivitiesFilterField("text") + public val text: ActivitiesFilterField = ActivitiesFilterField("text", ActivityData::text) /** * Filter by activity type. * * Supported operators: `equal`, `in` */ - public val type: ActivitiesFilterField = ActivitiesFilterField("type") + public val type: ActivitiesFilterField = + ActivitiesFilterField("activity_type", ActivityData::type) /** * Filter by user ID who created the activity. * * Supported operators: `equal`, `in` */ - public val userId: ActivitiesFilterField = ActivitiesFilterField("user_id") + public val userId: ActivitiesFilterField = ActivitiesFilterField("user_id") { it.user.id } /** * Filter by activity expiration timestamp. * - * Supported operators: `equal`, `notEqual`, `greater`, `greaterOrEqual`, `less`, - * `lessOrEqual`, `exists` + * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual`, + * `exists` + */ + public val expiresAt: ActivitiesFilterField = + ActivitiesFilterField("expires_at", ActivityData::expiresAt) + + /** + * Filter by activity interest tags. + * + * Supported operators: `equal`, `in`, `contains` */ - public val expiresAt: ActivitiesFilterField = ActivitiesFilterField("expires_at") + public val interestTags: ActivitiesFilterField = + ActivitiesFilterField("interest_tags", ActivityData::interestTags) } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/ActivityReactionsQuery.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/ActivityReactionsQuery.kt index 443b6adad..c739a7d4b 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/ActivityReactionsQuery.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/ActivityReactionsQuery.kt @@ -17,11 +17,12 @@ package io.getstream.feeds.android.client.api.state.query import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField import io.getstream.android.core.api.filter.toRequest +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import io.getstream.feeds.android.client.api.model.FeedsReactionData +import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.internal.model.mapping.toRequest import io.getstream.feeds.android.network.models.QueryActivityReactionsRequest @@ -53,9 +54,20 @@ public data class ActivityReactionsQuery( public val sort: List? = null, ) -public typealias ActivityReactionsFilter = Filter +/** + * A type alias representing a filter specifically for [FeedsReactionData] using + * [ActivityReactionsFilterField]. + */ +public typealias ActivityReactionsFilter = Filter + +internal typealias ActivityReactionsQueryConfig = + QueryConfiguration -public data class ActivityReactionsFilterField(override val remote: String) : FilterField { +/** Represents a field that can be used to filter activity reactions. */ +public data class ActivityReactionsFilterField( + override val remote: String, + override val localValue: (FeedsReactionData) -> Any?, +) : FilterField { public companion object { /** * Filter by reaction type. @@ -63,14 +75,15 @@ public data class ActivityReactionsFilterField(override val remote: String) : Fi * Supported operators: `equal`, `in` */ public val reactionType: ActivityReactionsFilterField = - ActivityReactionsFilterField("reaction_type") + ActivityReactionsFilterField("reaction_type", FeedsReactionData::type) /** * Filter by user ID who created the reaction. * * Supported operators: `equal`, `in` */ - public val userId: ActivityReactionsFilterField = ActivityReactionsFilterField("user_id") + public val userId: ActivityReactionsFilterField = + ActivityReactionsFilterField("user_id") { it.user.id } /** * Filter by creation timestamp. @@ -78,7 +91,7 @@ public data class ActivityReactionsFilterField(override val remote: String) : Fi * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ public val createdAt: ActivityReactionsFilterField = - ActivityReactionsFilterField("created_at") + ActivityReactionsFilterField("created_at", FeedsReactionData::createdAt) } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/BookmarkFoldersQuery.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/BookmarkFoldersQuery.kt index 593a90b77..410f0ff49 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/BookmarkFoldersQuery.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/BookmarkFoldersQuery.kt @@ -17,11 +17,12 @@ package io.getstream.feeds.android.client.api.state.query import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField import io.getstream.android.core.api.filter.toRequest +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import io.getstream.feeds.android.client.api.model.BookmarkFolderData +import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.internal.model.mapping.toRequest import io.getstream.feeds.android.network.models.QueryBookmarkFoldersRequest @@ -51,45 +52,44 @@ public data class BookmarkFoldersQuery( public val previous: String? = null, ) -public typealias BookmarkFoldersFilter = Filter +/** + * A type alias representing a filter specifically for [BookmarkFolderData] using + * [BookmarkFoldersFilterField]. + */ +public typealias BookmarkFoldersFilter = Filter -public data class BookmarkFoldersFilterField(override val remote: String) : FilterField { - public companion object { - /** - * Filter by folder ID. - * - * Supported operators: `equal`, `in` - */ - public val folderId: BookmarkFoldersFilterField = BookmarkFoldersFilterField("folder_id") +internal typealias BookmarkFoldersQueryConfig = + QueryConfiguration +/** Represents a field that can be used to filter bookmark folders. */ +public data class BookmarkFoldersFilterField( + override val remote: String, + override val localValue: (BookmarkFolderData) -> Any?, +) : FilterField { + public companion object { /** * Filter by folder name. * * Supported operators: `equal`, `in`, `contains` */ public val folderName: BookmarkFoldersFilterField = - BookmarkFoldersFilterField("folder_name") - - /** - * Filter by user ID. - * - * Supported operators: `equal`, `in` - */ - public val userId: BookmarkFoldersFilterField = BookmarkFoldersFilterField("user_id") + BookmarkFoldersFilterField("folder_name", BookmarkFolderData::name) /** * Filter by creation timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val createdAt: BookmarkFoldersFilterField = BookmarkFoldersFilterField("created_at") + public val createdAt: BookmarkFoldersFilterField = + BookmarkFoldersFilterField("created_at", BookmarkFolderData::createdAt) /** * Filter by last update timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val updatedAt: BookmarkFoldersFilterField = BookmarkFoldersFilterField("updated_at") + public val updatedAt: BookmarkFoldersFilterField = + BookmarkFoldersFilterField("updated_at", BookmarkFolderData::updatedAt) } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/BookmarksQuery.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/BookmarksQuery.kt index 0991f4502..98dd3d907 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/BookmarksQuery.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/BookmarksQuery.kt @@ -17,11 +17,12 @@ package io.getstream.feeds.android.client.api.state.query import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField import io.getstream.android.core.api.filter.toRequest +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import io.getstream.feeds.android.client.api.model.BookmarkData +import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.internal.model.mapping.toRequest import io.getstream.feeds.android.network.models.QueryBookmarksRequest @@ -51,44 +52,58 @@ public data class BookmarksQuery( public val previous: String? = null, ) -public typealias BookmarksFilter = Filter +/** + * A type alias representing a filter specifically for [BookmarkData] using [BookmarksFilterField]. + */ +public typealias BookmarksFilter = Filter + +internal typealias BookmarksQueryConfig = + QueryConfiguration -public data class BookmarksFilterField(override val remote: String) : FilterField { +/** Represents a field that can be used to filter bookmarks. */ +public data class BookmarksFilterField( + override val remote: String, + override val localValue: (BookmarkData) -> Any?, +) : FilterField { public companion object { /** * Filter by activity ID. * * Supported operators: `equal`, `in` */ - public val activityId: BookmarksFilterField = BookmarksFilterField("activity_id") + public val activityId: BookmarksFilterField = + BookmarksFilterField("activity_id") { it.activity.id } /** * Filter by folder ID. * * Supported operators: `equal`, `in`, `exists` */ - public val folderId: BookmarksFilterField = BookmarksFilterField("folder_id") + public val folderId: BookmarksFilterField = + BookmarksFilterField("folder_id") { it.folder?.id } /** * Filter by user ID. * * Supported operators: `equal`, `in` */ - public val userId: BookmarksFilterField = BookmarksFilterField("user_id") + public val userId: BookmarksFilterField = BookmarksFilterField("user_id") { it.user.id } /** * Filter by creation timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val createdAt: BookmarksFilterField = BookmarksFilterField("created_at") + public val createdAt: BookmarksFilterField = + BookmarksFilterField("created_at", BookmarkData::createdAt) /** * Filter by last update timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val updatedAt: BookmarksFilterField = BookmarksFilterField("updated_at") + public val updatedAt: BookmarksFilterField = + BookmarksFilterField("updated_at", BookmarkData::updatedAt) } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/CommentReactionsQuery.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/CommentReactionsQuery.kt index c8f62cafc..a57995446 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/CommentReactionsQuery.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/CommentReactionsQuery.kt @@ -17,11 +17,12 @@ package io.getstream.feeds.android.client.api.state.query import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField import io.getstream.android.core.api.filter.toRequest +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import io.getstream.feeds.android.client.api.model.FeedsReactionData +import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.internal.model.mapping.toRequest import io.getstream.feeds.android.network.models.QueryCommentReactionsRequest @@ -58,9 +59,20 @@ public data class CommentReactionsQuery( public val sort: List? = null, ) -public typealias CommentReactionsFilter = Filter +/** + * A type alias representing a filter specifically for [FeedsReactionData] using + * [CommentReactionsFilterField]. + */ +public typealias CommentReactionsFilter = Filter + +internal typealias CommentReactionsQueryConfig = + QueryConfiguration -public data class CommentReactionsFilterField(override val remote: String) : FilterField { +/** Represents a field that can be used to filter comment reactions. */ +public data class CommentReactionsFilterField( + override val remote: String, + override val localValue: (FeedsReactionData) -> Any?, +) : FilterField { public companion object { /** * Filter by reaction type. @@ -68,14 +80,15 @@ public data class CommentReactionsFilterField(override val remote: String) : Fil * Supported operators: `equal`, `in` */ public val reactionType: CommentReactionsFilterField = - CommentReactionsFilterField("reaction_type") + CommentReactionsFilterField("reaction_type", FeedsReactionData::type) /** * Filter by user ID. * * Supported operators: `equal`, `in` */ - public val userId: CommentReactionsFilterField = CommentReactionsFilterField("user_id") + public val userId: CommentReactionsFilterField = + CommentReactionsFilterField("user_id") { it.user.id } /** * Filter by creation timestamp. @@ -83,7 +96,7 @@ public data class CommentReactionsFilterField(override val remote: String) : Fil * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ public val createdAt: CommentReactionsFilterField = - CommentReactionsFilterField("created_at") + CommentReactionsFilterField("created_at", FeedsReactionData::createdAt) } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/CommentsQuery.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/CommentsQuery.kt index afcddc9da..9e5fb8b1e 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/CommentsQuery.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/CommentsQuery.kt @@ -18,6 +18,7 @@ package io.getstream.feeds.android.client.api.state.query import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField import io.getstream.android.core.api.filter.toRequest +import io.getstream.feeds.android.client.api.model.CommentData import io.getstream.feeds.android.network.models.QueryCommentsRequest import java.util.Date @@ -70,107 +71,124 @@ public data class CommentsQuery( public val sort: CommentsSort? = null, ) -public typealias CommentsFilter = Filter +/** + * A type alias representing a filter specifically for [CommentData] using [CommentsFilterField]. + */ +public typealias CommentsFilter = Filter -public data class CommentsFilterField(override val remote: String) : FilterField { +/** Represents a field that can be used to filter comments. */ +public data class CommentsFilterField( + override val remote: String, + override val localValue: (CommentData) -> Any?, +) : FilterField { public companion object { /** * Filter by comment ID. * * Supported operators: `equal`, `in` */ - public val id: CommentsFilterField = CommentsFilterField("id") + public val id: CommentsFilterField = CommentsFilterField("id", CommentData::id) /** * Filter by user ID who created the comment. * * Supported operators: `equal`, `in` */ - public val userId: CommentsFilterField = CommentsFilterField("user_id") + public val userId: CommentsFilterField = CommentsFilterField("user_id") { it.user.id } /** * Filter by object type. * * Supported operators: `equal`, `in` */ - public val objectType: CommentsFilterField = CommentsFilterField("object_type") + public val objectType: CommentsFilterField = + CommentsFilterField("object_type", CommentData::objectType) /** * Filter by object ID. * * Supported operators: `equal`, `in` */ - public val objectId: CommentsFilterField = CommentsFilterField("object_id") + public val objectId: CommentsFilterField = + CommentsFilterField("object_id", CommentData::objectId) /** * Filter by parent comment ID. * * Supported operators: `equal`, `in` */ - public val parentId: CommentsFilterField = CommentsFilterField("parent_id") + public val parentId: CommentsFilterField = + CommentsFilterField("parent_id", CommentData::parentId) /** * Filter by comment text content. * * Supported operators: `q` */ - public val commentText: CommentsFilterField = CommentsFilterField("comment_text") + public val commentText: CommentsFilterField = + CommentsFilterField("comment_text", CommentData::text) /** * Filter by comment status. * * Supported operators: `equal`, `in` */ - public val status: CommentsFilterField = CommentsFilterField("status") + public val status: CommentsFilterField = CommentsFilterField("status", CommentData::status) /** * Filter by upvote count. * * Supported operators: `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val upvoteCount: CommentsFilterField = CommentsFilterField("upvote_count") + public val upvoteCount: CommentsFilterField = + CommentsFilterField("upvote_count", CommentData::upvoteCount) /** * Filter by downvote count. * * Supported operators: `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val downvoteCount: CommentsFilterField = CommentsFilterField("downvote_count") + public val downvoteCount: CommentsFilterField = + CommentsFilterField("downvote_count", CommentData::downvoteCount) /** * Filter by reply count. * * Supported operators: `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val replyCount: CommentsFilterField = CommentsFilterField("reply_count") + public val replyCount: CommentsFilterField = + CommentsFilterField("reply_count", CommentData::replyCount) /** * Filter by comment score. * * Supported operators: `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val score: CommentsFilterField = CommentsFilterField("score") + public val score: CommentsFilterField = CommentsFilterField("score", CommentData::score) /** * Filter by confidence score. * * Supported operators: `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val confidenceScore: CommentsFilterField = CommentsFilterField("confidence_score") + public val confidenceScore: CommentsFilterField = + CommentsFilterField("confidence_score", CommentData::confidenceScore) /** * Filter by controversy score. * * Supported operators: `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val controversyScore: CommentsFilterField = CommentsFilterField("controversy_score") + public val controversyScore: CommentsFilterField = + CommentsFilterField("controversy_score", CommentData::controversyScore) /** * Filter by creation timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val createdAt: CommentsFilterField = CommentsFilterField("created_at") + public val createdAt: CommentsFilterField = + CommentsFilterField("created_at", CommentData::createdAt) } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/FeedsQuery.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/FeedsQuery.kt index a546e9a4b..72eb85ba4 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/FeedsQuery.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/FeedsQuery.kt @@ -17,12 +17,14 @@ package io.getstream.feeds.android.client.api.state.query import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField import io.getstream.android.core.api.filter.toRequest +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import io.getstream.feeds.android.client.api.model.FeedData +import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.internal.model.mapping.toRequest +import io.getstream.feeds.android.client.internal.state.query.unsupportedLocalValue import io.getstream.feeds.android.network.models.QueryFeedsRequest /** @@ -63,128 +65,146 @@ public data class FeedsQuery( public val watch: Boolean = true, ) -public typealias FeedsFilter = Filter +/** A type alias representing a filter specifically for [FeedData] using [FeedsFilterField]. */ +public typealias FeedsFilter = Filter -public data class FeedsFilterField(override val remote: String) : FilterField { +internal typealias FeedsQueryConfig = QueryConfiguration + +/** Represents a field that can be used to filter feeds. */ +public data class FeedsFilterField( + override val remote: String, + override val localValue: (FeedData) -> Any?, +) : FilterField { public companion object { /** * Filter by feed ID. * * Supported operators: `equal`, `in` */ - public val id: FeedsFilterField = FeedsFilterField("id") + public val id: FeedsFilterField = FeedsFilterField("id", FeedData::id) /** * Filter by group ID. * * Supported operators: `equal`, `in` */ - public val groupId: FeedsFilterField = FeedsFilterField("group_id") + public val groupId: FeedsFilterField = FeedsFilterField("group_id", FeedData::groupId) /** * Filter by feed. * * Supported operators: `equal`, `in` */ - public val feed: FeedsFilterField = FeedsFilterField("feed") + public val feed: FeedsFilterField = FeedsFilterField("feed") { it.fid.rawValue } /** * Filter by creation timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val createdAt: FeedsFilterField = FeedsFilterField("created_at") + public val createdAt: FeedsFilterField = FeedsFilterField("created_at", FeedData::createdAt) /** * Filter by creator's user ID. * * Supported operators: `equal`, `in` */ - public val createdById: FeedsFilterField = FeedsFilterField("created_by_id") + public val createdById: FeedsFilterField = + FeedsFilterField("created_by_id") { it.createdBy.id } /** * Filter by creator's name. * * Supported operators: `equal`, `q`, `autocomplete` */ - public val createdByName: FeedsFilterField = FeedsFilterField("created_by.name") + public val createdByName: FeedsFilterField = + FeedsFilterField("created_by.name") { it.createdBy.name } /** * Filter by feed description. * * Supported operators: `equal`, `q`, `autocomplete` */ - public val description: FeedsFilterField = FeedsFilterField("description") + public val description: FeedsFilterField = + FeedsFilterField("description", FeedData::description) /** * Filter by follower count. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val followerCount: FeedsFilterField = FeedsFilterField("follower_count") + public val followerCount: FeedsFilterField = + FeedsFilterField("follower_count", FeedData::followerCount) /** * Filter by following count. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val followingCount: FeedsFilterField = FeedsFilterField("following_count") + public val followingCount: FeedsFilterField = + FeedsFilterField("following_count", FeedData::followingCount) /** * Filter by member count. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val memberCount: FeedsFilterField = FeedsFilterField("member_count") + public val memberCount: FeedsFilterField = + FeedsFilterField("member_count", FeedData::memberCount) /** * Filter by members. * * Supported operators: `in` */ - public val members: FeedsFilterField = FeedsFilterField("members") + public val members: FeedsFilterField = + FeedsFilterField( + "members", + // Local filtering is unsupported as we don't know the feed members + unsupportedLocalValue, + ) /** * Filter by feed name. * * Supported operators: `equal`, `q`, `autocomplete` */ - public val name: FeedsFilterField = FeedsFilterField("name") + public val name: FeedsFilterField = FeedsFilterField("name", FeedData::name) /** * Filter by last update timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val updatedAt: FeedsFilterField = FeedsFilterField("updated_at") + public val updatedAt: FeedsFilterField = FeedsFilterField("updated_at", FeedData::updatedAt) /** * Filter by feed visibility. * * Supported operators: `equal`, `in` */ - public val visibility: FeedsFilterField = FeedsFilterField("visibility") - - /** - * Filter by following users. - * - * Supported operators: `in` - */ - public val followingUsers: FeedsFilterField = FeedsFilterField("following_users") + public val visibility: FeedsFilterField = + FeedsFilterField("visibility", FeedData::visibility) /** * Filter by following feeds. * * Supported operators: `in` */ - public val followingFeeds: FeedsFilterField = FeedsFilterField("following_feeds") + public val followingFeeds: FeedsFilterField = + FeedsFilterField( + "following_feeds", + // Local filtering is unsupported as we don't know the feeds that follow a feed + unsupportedLocalValue, + ) /** * Filter by filter tags. * * Supported operators: `equal`, `in`, `contains` */ - public val filterTags: FeedsFilterField = FeedsFilterField("filter_tags") + public val filterTags: FeedsFilterField = + FeedsFilterField("filter_tags", FeedData::filterTags) } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/FollowsQuery.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/FollowsQuery.kt index aaa44b32d..73c3c12a9 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/FollowsQuery.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/FollowsQuery.kt @@ -17,11 +17,12 @@ package io.getstream.feeds.android.client.api.state.query import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField import io.getstream.android.core.api.filter.toRequest +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import io.getstream.feeds.android.client.api.model.FollowData +import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.internal.model.mapping.toRequest import io.getstream.feeds.android.network.models.QueryFollowsRequest @@ -51,37 +52,48 @@ public data class FollowsQuery( public val previous: String? = null, ) -public typealias FollowsFilter = Filter +/** A type alias representing a filter specifically for [FollowData] using [FollowsFilterField]. */ +public typealias FollowsFilter = Filter -public data class FollowsFilterField(override val remote: String) : FilterField { +internal typealias FollowsQueryConfig = + QueryConfiguration + +/** Represents a field that can be used to filter follows. */ +public data class FollowsFilterField( + override val remote: String, + override val localValue: (FollowData) -> Any?, +) : FilterField { public companion object { /** * Filter by source feed. * * Supported operators: `equal`, `in` */ - public val sourceFeed: FollowsFilterField = FollowsFilterField("source_feed") + public val sourceFeed: FollowsFilterField = + FollowsFilterField("source_feed") { it.sourceFeed.fid.rawValue } /** * Filter by target feed. * * Supported operators: `equal`, `in` */ - public val targetFeed: FollowsFilterField = FollowsFilterField("target_feed") + public val targetFeed: FollowsFilterField = + FollowsFilterField("target_feed") { it.targetFeed.fid.rawValue } /** * Filter by follow status. * * Supported operators: `equal`, `in` */ - public val status: FollowsFilterField = FollowsFilterField("status") + public val status: FollowsFilterField = FollowsFilterField("status") { it.status.value } /** * Filter by creation timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val createdAt: FollowsFilterField = FollowsFilterField("created_at") + public val createdAt: FollowsFilterField = + FollowsFilterField("created_at", FollowData::createdAt) } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/MembersQuery.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/MembersQuery.kt index 448bcf76e..d25369e16 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/MembersQuery.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/MembersQuery.kt @@ -17,12 +17,13 @@ package io.getstream.feeds.android.client.api.state.query import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField import io.getstream.android.core.api.filter.toRequest +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import io.getstream.feeds.android.client.api.model.FeedId import io.getstream.feeds.android.client.api.model.FeedMemberData +import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.internal.model.mapping.toRequest import io.getstream.feeds.android.network.models.QueryFeedMembersRequest @@ -54,58 +55,56 @@ public data class MembersQuery( public val previous: String? = null, ) -public typealias MembersFilter = Filter +/** + * A type alias representing a filter specifically for [FeedMemberData] using [MembersFilterField]. + */ +public typealias MembersFilter = Filter + +internal typealias MembersQueryConfig = + QueryConfiguration -public data class MembersFilterField(override val remote: String) : FilterField { +/** Represents a field that can be used to filter feed members. */ +public data class MembersFilterField( + override val remote: String, + override val localValue: (FeedMemberData) -> Any?, +) : FilterField { public companion object { /** * Filter by creation timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val createdAt: MembersFilterField = MembersFilterField("created_at") + public val createdAt: MembersFilterField = + MembersFilterField("created_at", FeedMemberData::createdAt) /** * Filter by member role. * * Supported operators: `equal`, `in` */ - public val role: MembersFilterField = MembersFilterField("role") + public val role: MembersFilterField = MembersFilterField("role", FeedMemberData::role) /** * Filter by member status. * * Supported operators: `equal`, `in` */ - public val status: MembersFilterField = MembersFilterField("status") + public val status: MembersFilterField = MembersFilterField("status") { it.status.value } /** * Filter by last update timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val updatedAt: MembersFilterField = MembersFilterField("updated_at") + public val updatedAt: MembersFilterField = + MembersFilterField("updated_at", FeedMemberData::updatedAt) /** * Filter by user ID. * * Supported operators: `equal`, `in` */ - public val userId: MembersFilterField = MembersFilterField("user_id") - - /** - * Filter by feed ID. - * - * Supported operators: `equal`, `in` - */ - public val fid: MembersFilterField = MembersFilterField("fid") - - /** - * Filter by request. - * - * Supported operators: `equal` - */ - public val request: MembersFilterField = MembersFilterField("request") + public val userId: MembersFilterField = MembersFilterField("user_id") { it.user.id } } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/ModerationConfigsQuery.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/ModerationConfigsQuery.kt index f2a4077dd..92814e26a 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/ModerationConfigsQuery.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/ModerationConfigsQuery.kt @@ -17,11 +17,12 @@ package io.getstream.feeds.android.client.api.state.query import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField import io.getstream.android.core.api.filter.toRequest +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import io.getstream.feeds.android.client.api.model.ModerationConfigData +import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.internal.model.mapping.toRequest import io.getstream.feeds.android.network.models.QueryModerationConfigsRequest @@ -46,16 +47,29 @@ public data class ModerationConfigsQuery( public val sort: List? = null, ) -public typealias ModerationConfigsFilter = Filter +/** + * A type alias representing a filter specifically for [ModerationConfigData] using + * [ModerationConfigsFilterField]. + */ +public typealias ModerationConfigsFilter = + Filter + +internal typealias ModerationConfigsQueryConfig = + QueryConfiguration -public data class ModerationConfigsFilterField(override val remote: String) : FilterField { +/** Represents a field that can be used to filter moderation configurations. */ +public data class ModerationConfigsFilterField( + override val remote: String, + override val localValue: (ModerationConfigData) -> Any?, +) : FilterField { public companion object { /** * Filter by configuration key. * * Supported operators: `equal`, `in`, `autocomplete` */ - public val key: ModerationConfigsFilterField = ModerationConfigsFilterField("key") + public val key: ModerationConfigsFilterField = + ModerationConfigsFilterField("key", ModerationConfigData::key) /** * Filter by creation timestamp. @@ -63,7 +77,7 @@ public data class ModerationConfigsFilterField(override val remote: String) : Fi * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ public val createdAt: ModerationConfigsFilterField = - ModerationConfigsFilterField("created_at") + ModerationConfigsFilterField("created_at", ModerationConfigData::createdAt) /** * Filter by last update timestamp. @@ -71,14 +85,15 @@ public data class ModerationConfigsFilterField(override val remote: String) : Fi * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ public val updatedAt: ModerationConfigsFilterField = - ModerationConfigsFilterField("updated_at") + ModerationConfigsFilterField("updated_at", ModerationConfigData::updatedAt) /** * Filter by team. * * Supported operators: `equal`, `in` */ - public val team: ModerationConfigsFilterField = ModerationConfigsFilterField("team") + public val team: ModerationConfigsFilterField = + ModerationConfigsFilterField("team", ModerationConfigData::team) } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/PollVotesQuery.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/PollVotesQuery.kt index c26b33481..8831b3242 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/PollVotesQuery.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/PollVotesQuery.kt @@ -17,11 +17,12 @@ package io.getstream.feeds.android.client.api.state.query import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField import io.getstream.android.core.api.filter.toRequest +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import io.getstream.feeds.android.client.api.model.PollVoteData +import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.internal.model.mapping.toRequest import io.getstream.feeds.android.network.models.QueryPollVotesRequest @@ -55,58 +56,74 @@ public data class PollVotesQuery( public val sort: List? = null, ) -public typealias PollVotesFilter = Filter +/** + * A type alias representing a filter specifically for [PollVoteData] using [PollVotesFilterField]. + */ +public typealias PollVotesFilter = Filter + +internal typealias PollVotesQueryConfig = + QueryConfiguration -public data class PollVotesFilterField(override val remote: String) : FilterField { +/** Represents a field that can be used to filter poll votes. */ +public data class PollVotesFilterField( + override val remote: String, + override val localValue: (PollVoteData) -> Any?, +) : FilterField { public companion object { /** * Filter by creation timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val createdAt: PollVotesFilterField = PollVotesFilterField("created_at") + public val createdAt: PollVotesFilterField = + PollVotesFilterField("created_at", PollVoteData::createdAt) /** * Filter by vote ID. * * Supported operators: `equal`, `in` */ - public val id: PollVotesFilterField = PollVotesFilterField("id") + public val id: PollVotesFilterField = PollVotesFilterField("id", PollVoteData::id) /** * Filter by is answer flag. * * Supported operators: `equal` */ - public val isAnswer: PollVotesFilterField = PollVotesFilterField("is_answer") + public val isAnswer: PollVotesFilterField = + PollVotesFilterField("is_answer", PollVoteData::isAnswer) /** * Filter by option ID. * * Supported operators: `equal`, `in`, `exists` */ - public val optionId: PollVotesFilterField = PollVotesFilterField("option_id") + public val optionId: PollVotesFilterField = + PollVotesFilterField("option_id", PollVoteData::optionId) /** * Filter by user ID. * * Supported operators: `equal`, `in` */ - public val userId: PollVotesFilterField = PollVotesFilterField("user_id") + public val userId: PollVotesFilterField = + PollVotesFilterField("user_id", PollVoteData::userId) /** * Filter by poll ID. * * Supported operators: `equal`, `in` */ - public val pollId: PollVotesFilterField = PollVotesFilterField("poll_id") + public val pollId: PollVotesFilterField = + PollVotesFilterField("poll_id", PollVoteData::pollId) /** * Filter by last update timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val updatedAt: PollVotesFilterField = PollVotesFilterField("updated_at") + public val updatedAt: PollVotesFilterField = + PollVotesFilterField("updated_at", PollVoteData::updatedAt) } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/PollsQuery.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/PollsQuery.kt index 46902093d..9eda59e23 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/PollsQuery.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/api/state/query/PollsQuery.kt @@ -17,11 +17,12 @@ package io.getstream.feeds.android.client.api.state.query import io.getstream.android.core.api.filter.Filter import io.getstream.android.core.api.filter.FilterField -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField import io.getstream.android.core.api.filter.toRequest +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import io.getstream.feeds.android.client.api.model.PollData +import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.internal.model.mapping.toRequest import io.getstream.feeds.android.network.models.QueryPollsRequest @@ -51,16 +52,24 @@ public data class PollsQuery( public val sort: List? = null, ) -public typealias PollsFilter = Filter +/** A type alias representing a filter specifically for [PollData] using [PollsFilterField]. */ +public typealias PollsFilter = Filter -public data class PollsFilterField(override val remote: String) : FilterField { +internal typealias PollsQueryConfig = QueryConfiguration + +/** Represents a field that can be used to filter polls. */ +public data class PollsFilterField( + override val remote: String, + override val localValue: (PollData) -> Any?, +) : FilterField { public companion object { /** * Filter by allow answers setting. * * Supported operators: `equal` */ - public val allowAnswers: PollsFilterField = PollsFilterField("allow_answers") + public val allowAnswers: PollsFilterField = + PollsFilterField("allow_answers", PollData::allowAnswers) /** * Filter by allow user suggested options setting. @@ -68,63 +77,66 @@ public data class PollsFilterField(override val remote: String) : FilterField { * Supported operators: `equal` */ public val allowUserSuggestedOptions: PollsFilterField = - PollsFilterField("allow_user_suggested_options") + PollsFilterField("allow_user_suggested_options", PollData::allowUserSuggestedOptions) /** * Filter by creation timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val createdAt: PollsFilterField = PollsFilterField("created_at") + public val createdAt: PollsFilterField = PollsFilterField("created_at", PollData::createdAt) /** * Filter by creator's user ID. * * Supported operators: `equal`, `in` */ - public val createdById: PollsFilterField = PollsFilterField("created_by_id") + public val createdById: PollsFilterField = + PollsFilterField("created_by_id", PollData::createdById) /** * Filter by poll ID. * * Supported operators: `equal`, `in` */ - public val id: PollsFilterField = PollsFilterField("id") + public val id: PollsFilterField = PollsFilterField("id", PollData::id) /** * Filter by closed status. * * Supported operators: `equal` */ - public val isClosed: PollsFilterField = PollsFilterField("is_closed") + public val isClosed: PollsFilterField = PollsFilterField("is_closed", PollData::isClosed) /** * Filter by maximum votes allowed. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val maxVotesAllowed: PollsFilterField = PollsFilterField("max_votes_allowed") + public val maxVotesAllowed: PollsFilterField = + PollsFilterField("max_votes_allowed", PollData::maxVotesAllowed) /** * Filter by poll name. * * Supported operators: `equal`, `in` */ - public val name: PollsFilterField = PollsFilterField("name") + public val name: PollsFilterField = PollsFilterField("name", PollData::name) /** * Filter by last update timestamp. * * Supported operators: `equal`, `greater`, `greaterOrEqual`, `less`, `lessOrEqual` */ - public val updatedAt: PollsFilterField = PollsFilterField("updated_at") + public val updatedAt: PollsFilterField = PollsFilterField("updated_at", PollData::updatedAt) /** * Filter by voting visibility. * * Supported operators: `equal` */ - public val votingVisibility: PollsFilterField = PollsFilterField("voting_visibility") + public val votingVisibility: PollsFilterField = + PollsFilterField("voting_visibility", PollData::votingVisibility) } } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/model/mapping/Sort.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/model/mapping/Sort.kt index 0772f530c..f9c0c95ea 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/model/mapping/Sort.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/model/mapping/Sort.kt @@ -15,7 +15,7 @@ */ package io.getstream.feeds.android.client.internal.model.mapping -import io.getstream.android.core.api.filter.Sort +import io.getstream.android.core.api.sort.Sort import io.getstream.feeds.android.network.models.SortParamRequest /** diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/repository/FeedsRepository.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/repository/FeedsRepository.kt index e661d7a05..83a1f49ee 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/repository/FeedsRepository.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/repository/FeedsRepository.kt @@ -24,9 +24,7 @@ import io.getstream.feeds.android.client.api.model.FeedMemberData import io.getstream.feeds.android.client.api.model.FollowData import io.getstream.feeds.android.client.api.model.ModelUpdates import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration -import io.getstream.feeds.android.client.api.state.query.ActivitiesFilterField -import io.getstream.feeds.android.client.api.state.query.ActivitiesSort +import io.getstream.feeds.android.client.api.state.query.ActivitiesQueryConfig import io.getstream.feeds.android.client.api.state.query.FeedQuery import io.getstream.feeds.android.client.api.state.query.FeedsQuery import io.getstream.feeds.android.network.models.AcceptFollowRequest @@ -125,7 +123,7 @@ internal interface FeedsRepository { */ internal data class GetOrCreateInfo( val activities: PaginationResult, - val activitiesQueryConfig: QueryConfiguration, + val activitiesQueryConfig: ActivitiesQueryConfig, val feed: FeedData, val followers: List, val following: List, diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/repository/FeedsRepositoryImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/repository/FeedsRepositoryImpl.kt index d96c2e4ed..7ea4d4071 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/repository/FeedsRepositoryImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/repository/FeedsRepositoryImpl.kt @@ -15,7 +15,7 @@ */ package io.getstream.feeds.android.client.internal.repository -import io.getstream.android.core.api.filter.sortedWith +import io.getstream.android.core.api.sort.sortedWith import io.getstream.android.core.result.runSafely import io.getstream.feeds.android.client.api.model.FeedData import io.getstream.feeds.android.client.api.model.FeedId diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListStateImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListStateImpl.kt index 946a3d33d..1a6f580a9 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListStateImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListStateImpl.kt @@ -21,7 +21,6 @@ import io.getstream.feeds.android.client.api.model.CommentData import io.getstream.feeds.android.client.api.model.FeedsReactionData import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.model.addBookmark import io.getstream.feeds.android.client.api.model.addComment import io.getstream.feeds.android.client.api.model.addReaction @@ -29,8 +28,8 @@ import io.getstream.feeds.android.client.api.model.deleteBookmark import io.getstream.feeds.android.client.api.model.removeComment import io.getstream.feeds.android.client.api.model.removeReaction import io.getstream.feeds.android.client.api.state.ActivityListState -import io.getstream.feeds.android.client.api.state.query.ActivitiesFilterField import io.getstream.feeds.android.client.api.state.query.ActivitiesQuery +import io.getstream.feeds.android.client.api.state.query.ActivitiesQueryConfig import io.getstream.feeds.android.client.api.state.query.ActivitiesSort import io.getstream.feeds.android.client.internal.utils.mergeSorted import io.getstream.feeds.android.client.internal.utils.upsertSorted @@ -56,7 +55,7 @@ internal class ActivityListStateImpl( private val _activities: MutableStateFlow> = MutableStateFlow(emptyList()) - internal var queryConfig: QueryConfiguration? = null + internal var queryConfig: ActivitiesQueryConfig? = null private set private var _pagination: PaginationData? = null @@ -72,7 +71,7 @@ internal class ActivityListStateImpl( override fun onQueryMoreActivities( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: ActivitiesQueryConfig, ) { _pagination = result.pagination // Update the query configuration for future queries @@ -189,7 +188,7 @@ internal interface ActivityListStateUpdates { */ fun onQueryMoreActivities( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: ActivitiesQueryConfig, ) /** diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ActivityReactionListStateImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ActivityReactionListStateImpl.kt index 5b1b7d9f3..7888d38d5 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ActivityReactionListStateImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ActivityReactionListStateImpl.kt @@ -18,10 +18,9 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.FeedsReactionData import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.state.ActivityReactionListState -import io.getstream.feeds.android.client.api.state.query.ActivityReactionsFilterField import io.getstream.feeds.android.client.api.state.query.ActivityReactionsQuery +import io.getstream.feeds.android.client.api.state.query.ActivityReactionsQueryConfig import io.getstream.feeds.android.client.api.state.query.ActivityReactionsSort import io.getstream.feeds.android.client.internal.utils.mergeSorted import io.getstream.feeds.android.client.internal.utils.upsert @@ -45,9 +44,7 @@ internal class ActivityReactionListStateImpl(override val query: ActivityReactio private val _reactions: MutableStateFlow> = MutableStateFlow(emptyList()) - internal var queryConfig: - QueryConfiguration? = - null + internal var queryConfig: ActivityReactionsQueryConfig? = null private set private var _pagination: PaginationData? = null @@ -63,7 +60,7 @@ internal class ActivityReactionListStateImpl(override val query: ActivityReactio override fun onQueryMoreActivityReactions( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: ActivityReactionsQueryConfig, ) { _pagination = result.pagination // Update the query configuration for future queries @@ -105,7 +102,7 @@ internal interface ActivityReactionListStateUpdates { */ fun onQueryMoreActivityReactions( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: ActivityReactionsQueryConfig, ) /** diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkFolderListStateImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkFolderListStateImpl.kt index c1b4ed176..e6b03f3c9 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkFolderListStateImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkFolderListStateImpl.kt @@ -18,10 +18,9 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.BookmarkFolderData import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.state.BookmarkFolderListState -import io.getstream.feeds.android.client.api.state.query.BookmarkFoldersFilterField import io.getstream.feeds.android.client.api.state.query.BookmarkFoldersQuery +import io.getstream.feeds.android.client.api.state.query.BookmarkFoldersQueryConfig import io.getstream.feeds.android.client.api.state.query.BookmarkFoldersSort import io.getstream.feeds.android.client.internal.utils.mergeSorted import kotlinx.coroutines.flow.MutableStateFlow @@ -43,8 +42,7 @@ internal class BookmarkFolderListStateImpl(override val query: BookmarkFoldersQu private val _folders: MutableStateFlow> = MutableStateFlow(emptyList()) - internal var queryConfig: QueryConfiguration? = - null + internal var queryConfig: BookmarkFoldersQueryConfig? = null private set private var _pagination: PaginationData? = null @@ -60,7 +58,7 @@ internal class BookmarkFolderListStateImpl(override val query: BookmarkFoldersQu override fun onQueryMoreBookmarkFolders( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: BookmarkFoldersQueryConfig, ) { _pagination = result.pagination // Update the query configuration for future queries @@ -103,7 +101,7 @@ internal interface BookmarkFolderListStateUpdates { */ fun onQueryMoreBookmarkFolders( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: BookmarkFoldersQueryConfig, ) /** diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkListStateImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkListStateImpl.kt index 2a9394ae4..c16b9487b 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkListStateImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkListStateImpl.kt @@ -19,10 +19,9 @@ import io.getstream.feeds.android.client.api.model.BookmarkData import io.getstream.feeds.android.client.api.model.BookmarkFolderData import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.state.BookmarkListState -import io.getstream.feeds.android.client.api.state.query.BookmarksFilterField import io.getstream.feeds.android.client.api.state.query.BookmarksQuery +import io.getstream.feeds.android.client.api.state.query.BookmarksQueryConfig import io.getstream.feeds.android.client.api.state.query.BookmarksSort import io.getstream.feeds.android.client.internal.utils.mergeSorted import kotlinx.coroutines.flow.MutableStateFlow @@ -44,7 +43,7 @@ internal class BookmarkListStateImpl(override val query: BookmarksQuery) : private val _bookmarks: MutableStateFlow> = MutableStateFlow(emptyList()) - internal var queryConfig: QueryConfiguration? = null + internal var queryConfig: BookmarksQueryConfig? = null private set private var _pagination: PaginationData? = null @@ -60,7 +59,7 @@ internal class BookmarkListStateImpl(override val query: BookmarksQuery) : override fun onQueryMoreBookmarks( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: BookmarksQueryConfig, ) { _pagination = result.pagination // Update the query configuration for future queries @@ -128,7 +127,7 @@ internal interface BookmarkListStateUpdates { fun onQueryMoreBookmarks( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: BookmarksQueryConfig, ) fun onBookmarkFolderRemoved(folderId: String) diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/CommentReactionListStateImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/CommentReactionListStateImpl.kt index f9408d529..367a8098e 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/CommentReactionListStateImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/CommentReactionListStateImpl.kt @@ -18,10 +18,9 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.FeedsReactionData import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.state.CommentReactionListState -import io.getstream.feeds.android.client.api.state.query.CommentReactionsFilterField import io.getstream.feeds.android.client.api.state.query.CommentReactionsQuery +import io.getstream.feeds.android.client.api.state.query.CommentReactionsQueryConfig import io.getstream.feeds.android.client.api.state.query.CommentReactionsSort import io.getstream.feeds.android.client.internal.utils.mergeSorted import kotlinx.coroutines.flow.MutableStateFlow @@ -42,9 +41,7 @@ internal class CommentReactionListStateImpl(override val query: CommentReactions private val _reactions: MutableStateFlow> = MutableStateFlow(emptyList()) - internal var queryConfig: - QueryConfiguration? = - null + internal var queryConfig: CommentReactionsQueryConfig? = null private set private var _pagination: PaginationData? = null @@ -60,7 +57,7 @@ internal class CommentReactionListStateImpl(override val query: CommentReactions override fun onQueryMoreReactions( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: CommentReactionsQueryConfig, ) { _pagination = result.pagination // Update the query configuration for future queries @@ -89,7 +86,7 @@ internal interface CommentReactionListStateUpdates { */ fun onQueryMoreReactions( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: CommentReactionsQueryConfig, ) /** diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FeedListStateImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FeedListStateImpl.kt index d37b0e090..720b45b23 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FeedListStateImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FeedListStateImpl.kt @@ -18,10 +18,9 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.FeedData import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.state.FeedListState -import io.getstream.feeds.android.client.api.state.query.FeedsFilterField import io.getstream.feeds.android.client.api.state.query.FeedsQuery +import io.getstream.feeds.android.client.api.state.query.FeedsQueryConfig import io.getstream.feeds.android.client.api.state.query.FeedsSort import io.getstream.feeds.android.client.internal.utils.mergeSorted import kotlinx.coroutines.flow.MutableStateFlow @@ -44,7 +43,7 @@ internal class FeedListStateImpl(override val query: FeedsQuery) : FeedListMutab private var _pagination: PaginationData? = null - internal var queryConfig: QueryConfiguration? = null + internal var queryConfig: FeedsQueryConfig? = null private set private val feedsSorting: List @@ -74,7 +73,7 @@ internal class FeedListStateImpl(override val query: FeedsQuery) : FeedListMutab override fun onQueryMoreFeeds( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: FeedsQueryConfig, ) { _pagination = result.pagination this.queryConfig = queryConfig @@ -105,10 +104,7 @@ internal interface FeedListStateUpdates { fun onFeedUpdated(feed: FeedData) /** Handles the result of a query for more feeds. */ - fun onQueryMoreFeeds( - result: PaginationResult, - queryConfig: QueryConfiguration, - ) + fun onQueryMoreFeeds(result: PaginationResult, queryConfig: FeedsQueryConfig) /** Handles the removal of a feed by its ID. */ fun onFeedRemoved(feedId: String) diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FeedStateImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FeedStateImpl.kt index 0c83ea1bf..bd3104bec 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FeedStateImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FeedStateImpl.kt @@ -15,7 +15,8 @@ */ package io.getstream.feeds.android.client.internal.state -import io.getstream.android.core.api.filter.Sort +import io.getstream.android.core.api.filter.matches +import io.getstream.android.core.api.sort.Sort import io.getstream.feeds.android.client.api.model.ActivityData import io.getstream.feeds.android.client.api.model.ActivityPinData import io.getstream.feeds.android.client.api.model.AggregatedActivityData @@ -37,7 +38,7 @@ import io.getstream.feeds.android.client.api.model.deleteBookmark import io.getstream.feeds.android.client.api.model.removeComment import io.getstream.feeds.android.client.api.model.removeReaction import io.getstream.feeds.android.client.api.state.FeedState -import io.getstream.feeds.android.client.api.state.query.ActivitiesFilterField +import io.getstream.feeds.android.client.api.state.query.ActivitiesQueryConfig import io.getstream.feeds.android.client.api.state.query.ActivitiesSort import io.getstream.feeds.android.client.api.state.query.FeedQuery import io.getstream.feeds.android.client.internal.repository.GetOrCreateInfo @@ -83,8 +84,7 @@ internal class FeedStateImpl( private var _activitiesPagination: PaginationData? = null - internal var activitiesQueryConfig: QueryConfiguration? = - null + internal var activitiesQueryConfig: ActivitiesQueryConfig? = null private set private val activitiesSorting: List> @@ -145,7 +145,7 @@ internal class FeedStateImpl( override fun onQueryMoreActivities( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: ActivitiesQueryConfig, ) { _activitiesPagination = result.pagination activitiesQueryConfig = queryConfig @@ -156,12 +156,16 @@ internal class FeedStateImpl( } override fun onActivityAdded(activity: ActivityData) { + if (feedQuery.activityFilter?.matches(activity) == false) return + _activities.update { current -> current.upsertSorted(activity, ActivityData::id, activitiesSorting) } } override fun onActivityUpdated(activity: ActivityData) { + if (feedQuery.activityFilter?.matches(activity) == false) return + // Update the activities list _activities.update { current -> current.upsertSorted(activity, ActivityData::id, activitiesSorting) @@ -387,7 +391,7 @@ internal interface FeedStateUpdates { /** Handles the result of a query for more activities. */ fun onQueryMoreActivities( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: ActivitiesQueryConfig, ) /** Handles updates to the feed state when activity is added. */ diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FollowListStateImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FollowListStateImpl.kt index be1c8ce97..94be5bc01 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FollowListStateImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/FollowListStateImpl.kt @@ -18,10 +18,9 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.FollowData import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.state.FollowListState -import io.getstream.feeds.android.client.api.state.query.FollowsFilterField import io.getstream.feeds.android.client.api.state.query.FollowsQuery +import io.getstream.feeds.android.client.api.state.query.FollowsQueryConfig import io.getstream.feeds.android.client.api.state.query.FollowsSort import io.getstream.feeds.android.client.internal.utils.mergeSorted import kotlinx.coroutines.flow.MutableStateFlow @@ -40,7 +39,7 @@ internal class FollowListStateImpl(override val query: FollowsQuery) : FollowLis private val _follows: MutableStateFlow> = MutableStateFlow(emptyList()) - internal var queryConfig: QueryConfiguration? = null + internal var queryConfig: FollowsQueryConfig? = null private set private var _pagination: PaginationData? = null @@ -56,7 +55,7 @@ internal class FollowListStateImpl(override val query: FollowsQuery) : FollowLis override fun onQueryMoreFollows( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: FollowsQueryConfig, ) { _pagination = result.pagination this.queryConfig = queryConfig @@ -95,10 +94,7 @@ internal interface FollowListMutableState : FollowListState, FollowListStateUpda internal interface FollowListStateUpdates { /** Handles the result of a query for more follows. */ - fun onQueryMoreFollows( - result: PaginationResult, - queryConfig: QueryConfiguration, - ) + fun onQueryMoreFollows(result: PaginationResult, queryConfig: FollowsQueryConfig) /** Handles the update of a follow data. */ fun onFollowUpdated(follow: FollowData) diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/MemberListStateImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/MemberListStateImpl.kt index e9af90132..6d0b98068 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/MemberListStateImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/MemberListStateImpl.kt @@ -15,15 +15,14 @@ */ package io.getstream.feeds.android.client.internal.state -import io.getstream.android.core.api.filter.Sort +import io.getstream.android.core.api.sort.Sort import io.getstream.feeds.android.client.api.model.FeedMemberData import io.getstream.feeds.android.client.api.model.ModelUpdates import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.state.MemberListState -import io.getstream.feeds.android.client.api.state.query.MembersFilterField import io.getstream.feeds.android.client.api.state.query.MembersQuery +import io.getstream.feeds.android.client.api.state.query.MembersQueryConfig import io.getstream.feeds.android.client.api.state.query.MembersSort import io.getstream.feeds.android.client.internal.utils.mergeSorted import io.getstream.feeds.android.client.internal.utils.upsert @@ -43,7 +42,7 @@ internal class MemberListStateImpl(override val query: MembersQuery) : MemberLis private val _members: MutableStateFlow> = MutableStateFlow(emptyList()) - internal var queryConfig: QueryConfiguration? = null + internal var queryConfig: MembersQueryConfig? = null private set private var _pagination: PaginationData? = null @@ -59,7 +58,7 @@ internal class MemberListStateImpl(override val query: MembersQuery) : MemberLis override fun onQueryMoreMembers( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: MembersQueryConfig, ) { _pagination = result.pagination this.queryConfig = queryConfig @@ -129,7 +128,7 @@ internal interface MemberListStateUpdates { /** Handles the result of a query for more members. */ fun onQueryMoreMembers( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: MembersQueryConfig, ) /** Handles the addition of a new member. */ diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ModerationConfigListStateImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ModerationConfigListStateImpl.kt index 89cbe9ac7..402384b72 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ModerationConfigListStateImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/ModerationConfigListStateImpl.kt @@ -18,11 +18,10 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.ModerationConfigData import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.state.ModerationConfigListState import io.getstream.feeds.android.client.api.state.query.ModerationConfigSort -import io.getstream.feeds.android.client.api.state.query.ModerationConfigsFilterField import io.getstream.feeds.android.client.api.state.query.ModerationConfigsQuery +import io.getstream.feeds.android.client.api.state.query.ModerationConfigsQueryConfig import io.getstream.feeds.android.client.internal.utils.mergeSorted import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -40,9 +39,7 @@ internal class ModerationConfigListStateImpl(override val query: ModerationConfi private val _configs: MutableStateFlow> = MutableStateFlow(emptyList()) - internal var queryConfig: - QueryConfiguration? = - null + internal var queryConfig: ModerationConfigsQueryConfig? = null private set private var _pagination: PaginationData? = null @@ -58,7 +55,7 @@ internal class ModerationConfigListStateImpl(override val query: ModerationConfi override fun onLoadMoreConfigs( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: ModerationConfigsQueryConfig, ) { _pagination = result.pagination this.queryConfig = queryConfig @@ -76,6 +73,6 @@ internal interface ModerationConfigListStateUpdates { fun onLoadMoreConfigs( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: ModerationConfigsQueryConfig, ) } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollListStateImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollListStateImpl.kt index 930ed8165..44e18623d 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollListStateImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollListStateImpl.kt @@ -18,10 +18,9 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult import io.getstream.feeds.android.client.api.model.PollData -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.state.PollListState -import io.getstream.feeds.android.client.api.state.query.PollsFilterField import io.getstream.feeds.android.client.api.state.query.PollsQuery +import io.getstream.feeds.android.client.api.state.query.PollsQueryConfig import io.getstream.feeds.android.client.api.state.query.PollsSort import io.getstream.feeds.android.client.internal.utils.mergeSorted import kotlinx.coroutines.flow.MutableStateFlow @@ -41,7 +40,7 @@ internal class PollListStateImpl(override val query: PollsQuery) : PollListMutab private val _polls: MutableStateFlow> = MutableStateFlow(emptyList()) - internal var queryConfig: QueryConfiguration? = null + internal var queryConfig: PollsQueryConfig? = null private set private var _pagination: PaginationData? = null @@ -57,7 +56,7 @@ internal class PollListStateImpl(override val query: PollsQuery) : PollListMutab override fun onQueryMorePolls( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: PollsQueryConfig, ) { _pagination = result.pagination // Update the query configuration for future queries @@ -97,10 +96,7 @@ internal interface PollListStateUpdates { * @param result The result containing the list of polls. * @param queryConfig The configuration used for the query, including sorting options. */ - fun onQueryMorePolls( - result: PaginationResult, - queryConfig: QueryConfiguration, - ) + fun onQueryMorePolls(result: PaginationResult, queryConfig: PollsQueryConfig) /** * Called when a poll is updated. diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListStateImpl.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListStateImpl.kt index baccbd021..36dcc9b20 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListStateImpl.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListStateImpl.kt @@ -18,10 +18,9 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult import io.getstream.feeds.android.client.api.model.PollVoteData -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.state.PollVoteListState -import io.getstream.feeds.android.client.api.state.query.PollVotesFilterField import io.getstream.feeds.android.client.api.state.query.PollVotesQuery +import io.getstream.feeds.android.client.api.state.query.PollVotesQueryConfig import io.getstream.feeds.android.client.api.state.query.PollVotesSort import io.getstream.feeds.android.client.internal.utils.mergeSorted import io.getstream.feeds.android.client.internal.utils.upsertSorted @@ -40,7 +39,7 @@ internal class PollVoteListStateImpl(override val query: PollVotesQuery) : private val _votes: MutableStateFlow> = MutableStateFlow(emptyList()) - internal var queryConfig: QueryConfiguration? = null + internal var queryConfig: PollVotesQueryConfig? = null private set private var _pagination: PaginationData? = null @@ -56,7 +55,7 @@ internal class PollVoteListStateImpl(override val query: PollVotesQuery) : override fun onQueryMorePollVotes( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: PollVotesQueryConfig, ) { _pagination = result.pagination // Update the query configuration for future queries @@ -108,7 +107,7 @@ internal interface PollVoteListStateUpdates { */ fun onQueryMorePollVotes( result: PaginationResult, - queryConfig: QueryConfiguration, + queryConfig: PollVotesQueryConfig, ) /** Handles the addition of a new poll vote to the list. */ diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/query/UnsupportedLocalFieldValue.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/query/UnsupportedLocalFieldValue.kt new file mode 100644 index 000000000..46f105a0e --- /dev/null +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/state/query/UnsupportedLocalFieldValue.kt @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2014-2025 Stream.io Inc. All rights reserved. + * + * Licensed under the Stream License; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://github.com/GetStream/stream-feeds-android/blob/main/LICENSE + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.getstream.feeds.android.client.internal.state.query + +private object UnsupportedLocalFieldValue + +/** + * Placeholder to indicate cases where we don't support extracting the local value for a filter + * field + */ +internal val unsupportedLocalValue: (Any) -> Any? = { UnsupportedLocalFieldValue } diff --git a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/utils/List.kt b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/utils/List.kt index 47a5dc59b..a821318cd 100644 --- a/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/utils/List.kt +++ b/stream-feeds-android-client/src/main/kotlin/io/getstream/feeds/android/client/internal/utils/List.kt @@ -15,8 +15,8 @@ */ package io.getstream.feeds.android.client.internal.utils -import io.getstream.android.core.api.filter.CompositeComparator -import io.getstream.android.core.api.filter.Sort +import io.getstream.android.core.api.sort.CompositeComparator +import io.getstream.android.core.api.sort.Sort /** * Updates an existing element in the list or inserts a new one if not found. diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListStateImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListStateImplTest.kt index 4975c4e73..0b60c34bc 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListStateImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ActivityListStateImplTest.kt @@ -16,15 +16,13 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.ActivityData -import io.getstream.feeds.android.client.api.model.PaginationData -import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration -import io.getstream.feeds.android.client.api.state.query.ActivitiesFilterField import io.getstream.feeds.android.client.api.state.query.ActivitiesQuery +import io.getstream.feeds.android.client.api.state.query.ActivitiesQueryConfig import io.getstream.feeds.android.client.api.state.query.ActivitiesSort import io.getstream.feeds.android.client.internal.test.TestData.activityData import io.getstream.feeds.android.client.internal.test.TestData.bookmarkData import io.getstream.feeds.android.client.internal.test.TestData.commentData +import io.getstream.feeds.android.client.internal.test.TestData.defaultPaginationResult import io.getstream.feeds.android.client.internal.test.TestData.feedsReactionData import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals @@ -45,16 +43,7 @@ internal class ActivityListStateImplTest { @Test fun `on queryMoreActivities, then update activities and pagination`() = runTest { val activities = listOf(activityData("activity-1"), activityData("activity-2")) - val paginationResult = - PaginationResult( - models = activities, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = ActivitiesSort.Default, - ) + val paginationResult = defaultPaginationResult(activities) activityListState.onQueryMoreActivities(paginationResult, queryConfig) @@ -66,16 +55,7 @@ internal class ActivityListStateImplTest { @Test fun `on activityUpdated, then update specific activity`() = runTest { val initialActivities = listOf(activityData("activity-1"), activityData("activity-2")) - val paginationResult = - PaginationResult( - models = initialActivities, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = ActivitiesSort.Default, - ) + val paginationResult = defaultPaginationResult(initialActivities) activityListState.onQueryMoreActivities(paginationResult, queryConfig) val updatedActivity = activityData("activity-1", text = "Updated activity") @@ -88,16 +68,7 @@ internal class ActivityListStateImplTest { @Test fun `on activityRemoved, then remove specific activity`() = runTest { val initialActivities = listOf(activityData("activity-1"), activityData("activity-2")) - val paginationResult = - PaginationResult( - models = initialActivities, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = ActivitiesSort.Default, - ) + val paginationResult = defaultPaginationResult(initialActivities) activityListState.onQueryMoreActivities(paginationResult, queryConfig) activityListState.onActivityRemoved(initialActivities[0]) @@ -109,16 +80,7 @@ internal class ActivityListStateImplTest { @Test fun `on bookmarkAdded, then add bookmark to activity`() = runTest { val initialActivities = listOf(activityData("activity-1"), activityData("activity-2")) - val paginationResult = - PaginationResult( - models = initialActivities, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = ActivitiesSort.Default, - ) + val paginationResult = defaultPaginationResult(initialActivities) activityListState.onQueryMoreActivities(paginationResult, queryConfig) val bookmark = bookmarkData("activity-1", currentUserId) @@ -131,16 +93,7 @@ internal class ActivityListStateImplTest { @Test fun `on bookmarkRemoved, then remove bookmark from activity`() = runTest { val initialActivities = listOf(activityData("activity-1"), activityData("activity-2")) - val paginationResult = - PaginationResult( - models = initialActivities, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = ActivitiesSort.Default, - ) + val paginationResult = defaultPaginationResult(initialActivities) activityListState.onQueryMoreActivities(paginationResult, queryConfig) val bookmark = bookmarkData("activity-1", currentUserId) @@ -154,16 +107,7 @@ internal class ActivityListStateImplTest { @Test fun `on commentAdded, then add comment to activity`() = runTest { val initialActivities = listOf(activityData("activity-1"), activityData("activity-2")) - val paginationResult = - PaginationResult( - models = initialActivities, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = ActivitiesSort.Default, - ) + val paginationResult = defaultPaginationResult(initialActivities) activityListState.onQueryMoreActivities(paginationResult, queryConfig) val comment = commentData("comment-1", objectId = "activity-1") @@ -176,16 +120,7 @@ internal class ActivityListStateImplTest { @Test fun `on commentRemoved, then remove comment from activity`() = runTest { val initialActivities = listOf(activityData("activity-1"), activityData("activity-2")) - val paginationResult = - PaginationResult( - models = initialActivities, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = ActivitiesSort.Default, - ) + val paginationResult = defaultPaginationResult(initialActivities) activityListState.onQueryMoreActivities(paginationResult, queryConfig) val comment = commentData("comment-1", objectId = "activity-1") @@ -199,16 +134,7 @@ internal class ActivityListStateImplTest { @Test fun `on reactionAdded, then add reaction to activity`() = runTest { val initialActivities = listOf(activityData("activity-1"), activityData("activity-2")) - val paginationResult = - PaginationResult( - models = initialActivities, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = ActivitiesSort.Default, - ) + val paginationResult = defaultPaginationResult(initialActivities) activityListState.onQueryMoreActivities(paginationResult, queryConfig) val reaction = feedsReactionData("activity-1", "like", currentUserId) @@ -221,16 +147,7 @@ internal class ActivityListStateImplTest { @Test fun `on reactionRemoved, then remove reaction from activity`() = runTest { val initialActivities = listOf(activityData("activity-1"), activityData("activity-2")) - val paginationResult = - PaginationResult( - models = initialActivities, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = ActivitiesSort.Default, - ) + val paginationResult = defaultPaginationResult(initialActivities) activityListState.onQueryMoreActivities(paginationResult, queryConfig) val reaction = feedsReactionData("activity-1", "like", currentUserId) @@ -240,4 +157,9 @@ internal class ActivityListStateImplTest { val updatedActivities = activityListState.activities.value assertEquals(0, updatedActivities.first().reactionCount) } + + companion object { + private val queryConfig = + ActivitiesQueryConfig(filter = null, sort = ActivitiesSort.Default) + } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ActivityReactionListStateImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ActivityReactionListStateImplTest.kt index 54bac1ac4..84dcbf8f7 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ActivityReactionListStateImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ActivityReactionListStateImplTest.kt @@ -16,12 +16,10 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.FeedsReactionData -import io.getstream.feeds.android.client.api.model.PaginationData -import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration -import io.getstream.feeds.android.client.api.state.query.ActivityReactionsFilterField import io.getstream.feeds.android.client.api.state.query.ActivityReactionsQuery +import io.getstream.feeds.android.client.api.state.query.ActivityReactionsQueryConfig import io.getstream.feeds.android.client.api.state.query.ActivityReactionsSort +import io.getstream.feeds.android.client.internal.test.TestData.defaultPaginationResult import io.getstream.feeds.android.client.internal.test.TestData.feedsReactionData import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals @@ -42,16 +40,7 @@ internal class ActivityReactionListStateImplTest { fun `on queryMoreActivityReactions, then update reactions and pagination`() = runTest { val reactions = listOf(feedsReactionData(), feedsReactionData("reaction-2", "activity-1", "user-2")) - val paginationResult = - PaginationResult( - models = reactions, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = ActivityReactionsSort.Default, - ) + val paginationResult = defaultPaginationResult(reactions) activityReactionListState.onQueryMoreActivityReactions(paginationResult, queryConfig) @@ -64,16 +53,7 @@ internal class ActivityReactionListStateImplTest { fun `on reactionRemoved, then remove specific reaction`() = runTest { val initialReactions = listOf(feedsReactionData(), feedsReactionData("reaction-2", "activity-1", "user-2")) - val paginationResult = - PaginationResult( - models = initialReactions, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = ActivityReactionsSort.Default, - ) + val paginationResult = defaultPaginationResult(initialReactions) activityReactionListState.onQueryMoreActivityReactions(paginationResult, queryConfig) activityReactionListState.onReactionRemoved(initialReactions[0]) @@ -81,4 +61,9 @@ internal class ActivityReactionListStateImplTest { val remainingReactions = activityReactionListState.reactions.value assertEquals(listOf(initialReactions[1]), remainingReactions) } + + companion object { + private val queryConfig = + ActivityReactionsQueryConfig(filter = null, sort = ActivityReactionsSort.Default) + } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkFolderListStateImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkFolderListStateImplTest.kt index 5f51dedc6..6fd0e942b 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkFolderListStateImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkFolderListStateImplTest.kt @@ -16,13 +16,11 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.BookmarkFolderData -import io.getstream.feeds.android.client.api.model.PaginationData -import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration -import io.getstream.feeds.android.client.api.state.query.BookmarkFoldersFilterField import io.getstream.feeds.android.client.api.state.query.BookmarkFoldersQuery +import io.getstream.feeds.android.client.api.state.query.BookmarkFoldersQueryConfig import io.getstream.feeds.android.client.api.state.query.BookmarkFoldersSort import io.getstream.feeds.android.client.internal.test.TestData.bookmarkFolderData +import io.getstream.feeds.android.client.internal.test.TestData.defaultPaginationResult import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals import org.junit.Assert.assertNull @@ -41,16 +39,7 @@ internal class BookmarkFolderListStateImplTest { @Test fun `on queryMoreBookmarkFolders, then update folders and pagination`() = runTest { val folders = listOf(bookmarkFolderData(), bookmarkFolderData("folder-2", "Test Folder 2")) - val paginationResult = - PaginationResult( - models = folders, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = BookmarkFoldersSort.Default, - ) + val paginationResult = defaultPaginationResult(folders) bookmarkFolderListState.onQueryMoreBookmarkFolders(paginationResult, queryConfig) @@ -63,16 +52,7 @@ internal class BookmarkFolderListStateImplTest { fun `on bookmarkFolderUpdated, then update specific folder`() = runTest { val initialFolders = listOf(bookmarkFolderData(), bookmarkFolderData("folder-2", "Test Folder 2")) - val paginationResult = - PaginationResult( - models = initialFolders, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = BookmarkFoldersSort.Default, - ) + val paginationResult = defaultPaginationResult(initialFolders) bookmarkFolderListState.onQueryMoreBookmarkFolders(paginationResult, queryConfig) val updatedFolder = bookmarkFolderData("folder-1", "Updated Folder") @@ -87,16 +67,7 @@ internal class BookmarkFolderListStateImplTest { fun `on bookmarkFolderRemoved, then remove specific folder`() = runTest { val initialFolders = listOf(bookmarkFolderData(), bookmarkFolderData("folder-2", "Test Folder 2")) - val paginationResult = - PaginationResult( - models = initialFolders, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = BookmarkFoldersSort.Default, - ) + val paginationResult = defaultPaginationResult(initialFolders) bookmarkFolderListState.onQueryMoreBookmarkFolders(paginationResult, queryConfig) bookmarkFolderListState.onBookmarkFolderRemoved(initialFolders[0].id) @@ -104,4 +75,9 @@ internal class BookmarkFolderListStateImplTest { val remainingFolders = bookmarkFolderListState.folders.value assertEquals(initialFolders.drop(1), remainingFolders) } + + companion object { + private val queryConfig = + BookmarkFoldersQueryConfig(filter = null, sort = BookmarkFoldersSort.Default) + } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkListStateImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkListStateImplTest.kt index 4a14647c3..9b3707488 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkListStateImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/BookmarkListStateImplTest.kt @@ -18,12 +18,12 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.BookmarkData import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration -import io.getstream.feeds.android.client.api.state.query.BookmarksFilterField import io.getstream.feeds.android.client.api.state.query.BookmarksQuery +import io.getstream.feeds.android.client.api.state.query.BookmarksQueryConfig import io.getstream.feeds.android.client.api.state.query.BookmarksSort import io.getstream.feeds.android.client.internal.test.TestData.bookmarkData import io.getstream.feeds.android.client.internal.test.TestData.bookmarkFolderData +import io.getstream.feeds.android.client.internal.test.TestData.defaultPaginationResult import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals import org.junit.Assert.assertNull @@ -42,16 +42,7 @@ internal class BookmarkListStateImplTest { @Test fun `on queryMoreBookmarks, then update bookmarks and pagination`() = runTest { val bookmarks = listOf(bookmarkData(), bookmarkData("bookmark-2", "user-2")) - val paginationResult = - PaginationResult( - models = bookmarks, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = BookmarksSort.Default, - ) + val paginationResult = defaultPaginationResult(bookmarks) bookmarkListState.onQueryMoreBookmarks(paginationResult, queryConfig) @@ -63,16 +54,7 @@ internal class BookmarkListStateImplTest { @Test fun `on bookmarkUpdated, then update specific bookmark`() = runTest { val initialBookmarks = listOf(bookmarkData(), bookmarkData("bookmark-2", "user-2")) - val paginationResult = - PaginationResult( - models = initialBookmarks, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = BookmarksSort.Default, - ) + val paginationResult = defaultPaginationResult(initialBookmarks) bookmarkListState.onQueryMoreBookmarks(paginationResult, queryConfig) val updatedBookmark = bookmarkData("activity-1", "user-1") @@ -95,16 +77,7 @@ internal class BookmarkListStateImplTest { folder = bookmarkFolderData("folder-2", "Folder 2"), ), ) - val paginationResult = - PaginationResult( - models = initialBookmarks, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = BookmarksSort.Default, - ) + val paginationResult = defaultPaginationResult(initialBookmarks) bookmarkListState.onQueryMoreBookmarks(paginationResult, queryConfig) val updatedFolder = bookmarkFolderData("folder-1", "Updated Folder") @@ -127,16 +100,7 @@ internal class BookmarkListStateImplTest { folder = bookmarkFolderData("folder-2", "Folder 2"), ), ) - val paginationResult = - PaginationResult( - models = initialBookmarks, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = BookmarksSort.Default, - ) + val paginationResult = defaultPaginationResult(initialBookmarks) bookmarkListState.onQueryMoreBookmarks(paginationResult, queryConfig) bookmarkListState.onBookmarkFolderRemoved(folder.id) @@ -157,11 +121,6 @@ internal class BookmarkListStateImplTest { ) val paginationResult = PaginationResult(models = initialBookmarks, pagination = PaginationData()) - val queryConfig = - QueryConfiguration( - filter = null, - sort = BookmarksSort.Default, - ) bookmarkListState.onQueryMoreBookmarks(paginationResult, queryConfig) val bookmarkToRemove = initialBookmarks[1] @@ -178,11 +137,6 @@ internal class BookmarkListStateImplTest { listOf(bookmarkData("activity-1", "user-1"), bookmarkData("activity-2", "user-2")) val paginationResult = PaginationResult(models = initialBookmarks, pagination = PaginationData()) - val queryConfig = - QueryConfiguration( - filter = null, - sort = BookmarksSort.Default, - ) bookmarkListState.onQueryMoreBookmarks(paginationResult, queryConfig) val nonexistentBookmark = bookmarkData("activity-999", "user-999") @@ -190,4 +144,8 @@ internal class BookmarkListStateImplTest { assertEquals(initialBookmarks, bookmarkListState.bookmarks.value) } + + companion object { + private val queryConfig = BookmarksQueryConfig(filter = null, sort = BookmarksSort.Default) + } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/CommentReactionListStateImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/CommentReactionListStateImplTest.kt index 75b1380de..39b61dec8 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/CommentReactionListStateImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/CommentReactionListStateImplTest.kt @@ -16,12 +16,10 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.FeedsReactionData -import io.getstream.feeds.android.client.api.model.PaginationData -import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration -import io.getstream.feeds.android.client.api.state.query.CommentReactionsFilterField import io.getstream.feeds.android.client.api.state.query.CommentReactionsQuery +import io.getstream.feeds.android.client.api.state.query.CommentReactionsQueryConfig import io.getstream.feeds.android.client.api.state.query.CommentReactionsSort +import io.getstream.feeds.android.client.internal.test.TestData.defaultPaginationResult import io.getstream.feeds.android.client.internal.test.TestData.feedsReactionData import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals @@ -42,16 +40,7 @@ internal class CommentReactionListStateImplTest { fun `on queryMoreReactions, then update reactions and pagination`() = runTest { val reactions = listOf(feedsReactionData(), feedsReactionData("reaction-2", "comment-1", "user-2")) - val paginationResult = - PaginationResult( - models = reactions, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = CommentReactionsSort.Default, - ) + val paginationResult = defaultPaginationResult(reactions) commentReactionListState.onQueryMoreReactions(paginationResult, queryConfig) @@ -64,16 +53,7 @@ internal class CommentReactionListStateImplTest { fun `on reactionRemoved, then remove specific reaction`() = runTest { val initialReactions = listOf(feedsReactionData(), feedsReactionData("reaction-2", "comment-1", "user-2")) - val paginationResult = - PaginationResult( - models = initialReactions, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = CommentReactionsSort.Default, - ) + val paginationResult = defaultPaginationResult(initialReactions) commentReactionListState.onQueryMoreReactions(paginationResult, queryConfig) commentReactionListState.onReactionRemoved(initialReactions[0]) @@ -81,4 +61,9 @@ internal class CommentReactionListStateImplTest { val remainingReactions = commentReactionListState.reactions.value assertEquals(initialReactions.drop(1), remainingReactions) } + + companion object { + private val queryConfig = + CommentReactionsQueryConfig(filter = null, sort = CommentReactionsSort.Default) + } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FeedListStateImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FeedListStateImplTest.kt index e43a399c2..d067567ab 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FeedListStateImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FeedListStateImplTest.kt @@ -16,9 +16,8 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.FeedData -import io.getstream.feeds.android.client.api.model.QueryConfiguration -import io.getstream.feeds.android.client.api.state.query.FeedsFilterField import io.getstream.feeds.android.client.api.state.query.FeedsQuery +import io.getstream.feeds.android.client.api.state.query.FeedsQueryConfig import io.getstream.feeds.android.client.api.state.query.FeedsSort import io.getstream.feeds.android.client.internal.test.TestData.defaultPaginationResult import io.getstream.feeds.android.client.internal.test.TestData.feedData @@ -93,8 +92,7 @@ internal class FeedListStateImplTest { val feed2 = feedData(id = "feed-2", groupId = "user", name = "Second Feed") val initialFeeds = listOf(feed1, feed2) val paginationResult = defaultPaginationResult(initialFeeds) - val queryConfig = - QueryConfiguration(filter = null, sort = FeedsSort.Default) + val queryConfig = FeedsQueryConfig(filter = null, sort = FeedsSort.Default) feedListState.onQueryMoreFeeds(paginationResult, queryConfig) feedListState.onFeedRemoved("user:feed-1") @@ -104,7 +102,6 @@ internal class FeedListStateImplTest { } companion object { - private val defaultQueryConfig = - QueryConfiguration(filter = null, sort = FeedsSort.Default) + private val defaultQueryConfig = FeedsQueryConfig(filter = null, sort = FeedsSort.Default) } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FeedStateImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FeedStateImplTest.kt index 59afd0d89..53567ba63 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FeedStateImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FeedStateImplTest.kt @@ -15,13 +15,14 @@ */ package io.getstream.feeds.android.client.internal.state +import io.getstream.android.core.api.filter.equal import io.getstream.feeds.android.client.api.model.ActivityData import io.getstream.feeds.android.client.api.model.FeedId import io.getstream.feeds.android.client.api.model.FollowData import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.state.query.ActivitiesFilterField +import io.getstream.feeds.android.client.api.state.query.ActivitiesQueryConfig import io.getstream.feeds.android.client.api.state.query.ActivitiesSort import io.getstream.feeds.android.client.api.state.query.FeedQuery import io.getstream.feeds.android.client.internal.repository.GetOrCreateInfo @@ -230,6 +231,79 @@ internal class FeedStateImplTest { assertEquals(emptyList(), feedState.ownCapabilities.value) } + @Test + fun `on activityAdded with matching filter, then add activity`() = runTest { + val filter = ActivitiesFilterField.type.equal("post") + val feedStateWithFilter = + FeedStateImpl( + feedQuery.copy(activityFilter = filter), + currentUserId, + mockMemberListState, + ) + + val matchingActivity = activityData("activity-1", type = "post") + feedStateWithFilter.onActivityAdded(matchingActivity) + + val activities = feedStateWithFilter.activities.value + assertEquals(listOf(matchingActivity), activities) + } + + @Test + fun `on activityAdded with non-matching filter, then do not add activity`() = runTest { + val filter = ActivitiesFilterField.type.equal("comment") + val feedStateWithFilter = + FeedStateImpl( + feedQuery.copy(activityFilter = filter), + currentUserId, + mockMemberListState, + ) + + val nonMatchingActivity = activityData("activity-1", type = "post") + feedStateWithFilter.onActivityAdded(nonMatchingActivity) + + val activities = feedStateWithFilter.activities.value + assertEquals(emptyList(), activities) + } + + @Test + fun `on activityUpdated with matching filter, then update activity`() = runTest { + val filter = ActivitiesFilterField.type.equal("post") + val feedStateWithFilter = + FeedStateImpl( + feedQuery.copy(activityFilter = filter), + currentUserId, + mockMemberListState, + ) + + val initialActivity = activityData("activity-1", type = "post") + feedStateWithFilter.onActivityAdded(initialActivity) + + val updatedActivity = activityData("activity-1", type = "post", text = "Updated text") + feedStateWithFilter.onActivityUpdated(updatedActivity) + + val activities = feedStateWithFilter.activities.value + assertEquals(listOf(updatedActivity), activities) + } + + @Test + fun `on activityUpdated with non-matching filter, then do not update activity`() = runTest { + val filter = ActivitiesFilterField.type.equal("comment") + val feedStateWithFilter = + FeedStateImpl( + feedQuery.copy(activityFilter = filter), + currentUserId, + mockMemberListState, + ) + + setupInitialState(listOf(activityData("activity-1", type = "post"))) + + val updatedActivity = activityData("activity-1", type = "post", text = "Updated text") + feedStateWithFilter.onActivityUpdated(updatedActivity) + + val activities = feedStateWithFilter.activities.value + assertEquals(emptyList(), activities) + } + // Helper functions private fun setupInitialState( activities: List = listOf(activityData("activity-1")), @@ -283,8 +357,5 @@ internal class FeedStateImplTest { } private fun createQueryConfig() = - QueryConfiguration( - filter = null, - sort = ActivitiesSort.Default, - ) + ActivitiesQueryConfig(filter = null, sort = ActivitiesSort.Default) } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FollowListStateImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FollowListStateImplTest.kt index 7a11d0eb0..875533932 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FollowListStateImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/FollowListStateImplTest.kt @@ -16,12 +16,10 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.FollowData -import io.getstream.feeds.android.client.api.model.PaginationData -import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration -import io.getstream.feeds.android.client.api.state.query.FollowsFilterField import io.getstream.feeds.android.client.api.state.query.FollowsQuery +import io.getstream.feeds.android.client.api.state.query.FollowsQueryConfig import io.getstream.feeds.android.client.api.state.query.FollowsSort +import io.getstream.feeds.android.client.internal.test.TestData.defaultPaginationResult import io.getstream.feeds.android.client.internal.test.TestData.followData import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals @@ -41,16 +39,7 @@ internal class FollowListStateImplTest { @Test fun `on queryMoreFollows, then update follows and pagination`() = runTest { val follows = listOf(followData(), followData("user-2", "user-3")) - val paginationResult = - PaginationResult( - models = follows, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = FollowsSort.Default, - ) + val paginationResult = defaultPaginationResult(follows) followListState.onQueryMoreFollows(paginationResult, queryConfig) @@ -62,16 +51,7 @@ internal class FollowListStateImplTest { @Test fun `on followUpdated, then update specific follow`() = runTest { val initialFollows = listOf(followData(), followData("user-2", "user-3")) - val paginationResult = - PaginationResult( - models = initialFollows, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = FollowsSort.Default, - ) + val paginationResult = defaultPaginationResult(initialFollows) followListState.onQueryMoreFollows(paginationResult, queryConfig) val updatedFollow = @@ -91,16 +71,7 @@ internal class FollowListStateImplTest { fun `on followUpdated with non-existent follow, then keep existing follows unchanged`() = runTest { val initialFollows = listOf(followData(), followData("user-2", "user-3")) - val paginationResult = - PaginationResult( - models = initialFollows, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = FollowsSort.Default, - ) + val paginationResult = defaultPaginationResult(initialFollows) followListState.onQueryMoreFollows(paginationResult, queryConfig) val nonExistentFollow = followData("user-4", "user-5") @@ -112,16 +83,7 @@ internal class FollowListStateImplTest { @Test fun `on followRemoved, then remove specific follow`() = runTest { val initialFollows = listOf(followData(), followData("user-2", "user-3")) - val paginationResult = - PaginationResult( - models = initialFollows, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = FollowsSort.Default, - ) + val paginationResult = defaultPaginationResult(initialFollows) followListState.onQueryMoreFollows(paginationResult, queryConfig) followListState.onFollowRemoved(initialFollows[0]) @@ -129,4 +91,8 @@ internal class FollowListStateImplTest { val remainingFollows = followListState.follows.value assertEquals(listOf(initialFollows[1]), remainingFollows) } + + companion object { + private val queryConfig = FollowsQueryConfig(filter = null, sort = FollowsSort.Default) + } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/MemberListStateImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/MemberListStateImplTest.kt index 2c431b284..745a13b9c 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/MemberListStateImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/MemberListStateImplTest.kt @@ -20,10 +20,10 @@ import io.getstream.feeds.android.client.api.model.FeedMemberData import io.getstream.feeds.android.client.api.model.ModelUpdates import io.getstream.feeds.android.client.api.model.PaginationData import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration -import io.getstream.feeds.android.client.api.state.query.MembersFilterField import io.getstream.feeds.android.client.api.state.query.MembersQuery +import io.getstream.feeds.android.client.api.state.query.MembersQueryConfig import io.getstream.feeds.android.client.api.state.query.MembersSort +import io.getstream.feeds.android.client.internal.test.TestData.defaultPaginationResult import io.getstream.feeds.android.client.internal.test.TestData.feedMemberData import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals @@ -43,16 +43,7 @@ internal class MemberListStateImplTest { @Test fun `on queryMoreMembers, then update members and pagination`() = runTest { val members = listOf(feedMemberData(), feedMemberData("user-2")) - val paginationResult = - PaginationResult( - models = members, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = MembersSort.Default, - ) + val paginationResult = defaultPaginationResult(members) memberListState.onQueryMoreMembers(paginationResult, queryConfig) @@ -64,16 +55,7 @@ internal class MemberListStateImplTest { @Test fun `on memberUpdated, then update specific member`() = runTest { val initialMembers = listOf(feedMemberData(), feedMemberData("user-2")) - val paginationResult = - PaginationResult( - models = initialMembers, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = MembersSort.Default, - ) + val paginationResult = defaultPaginationResult(initialMembers) memberListState.onQueryMoreMembers(paginationResult, queryConfig) val updatedMember = feedMemberData("user-1", role = "admin") @@ -87,16 +69,7 @@ internal class MemberListStateImplTest { @Test fun `on memberRemoved, then remove specific member`() = runTest { val initialMembers = listOf(feedMemberData(), feedMemberData("user-2")) - val paginationResult = - PaginationResult( - models = initialMembers, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = MembersSort.Default, - ) + val paginationResult = defaultPaginationResult(initialMembers) memberListState.onQueryMoreMembers(paginationResult, queryConfig) memberListState.onMemberRemoved(initialMembers[0].id) @@ -108,16 +81,7 @@ internal class MemberListStateImplTest { @Test fun `on membersUpdated, then apply multiple updates`() = runTest { val initialMembers = listOf(feedMemberData(), feedMemberData("user-2")) - val paginationResult = - PaginationResult( - models = initialMembers, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = MembersSort.Default, - ) + val paginationResult = defaultPaginationResult(initialMembers) memberListState.onQueryMoreMembers(paginationResult, queryConfig) val updatedMember = feedMemberData("user-1", role = "admin") @@ -138,11 +102,6 @@ internal class MemberListStateImplTest { val initialMembers = listOf(feedMemberData(), feedMemberData("user-2")) val paginationResult = PaginationResult(models = initialMembers, pagination = PaginationData()) - val queryConfig = - QueryConfiguration( - filter = null, - sort = MembersSort.Default, - ) memberListState.onQueryMoreMembers(paginationResult, queryConfig) val newMember = feedMemberData("user-3") @@ -154,16 +113,7 @@ internal class MemberListStateImplTest { @Test fun `on memberAdded with existing id, then update member`() = runTest { val initialMembers = listOf(feedMemberData(), feedMemberData("user-2")) - val paginationResult = - PaginationResult( - models = initialMembers, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = MembersSort.Default, - ) + val paginationResult = defaultPaginationResult(initialMembers) memberListState.onQueryMoreMembers(paginationResult, queryConfig) val updatedMember = feedMemberData("user-1", role = "admin") @@ -178,20 +128,15 @@ internal class MemberListStateImplTest { @Test fun `on clear, then remove all members`() = runTest { val initialMembers = listOf(feedMemberData(), feedMemberData("user-2")) - val paginationResult = - PaginationResult( - models = initialMembers, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = MembersSort.Default, - ) + val paginationResult = defaultPaginationResult(initialMembers) memberListState.onQueryMoreMembers(paginationResult, queryConfig) memberListState.clear() assertEquals(emptyList(), memberListState.members.value) } + + companion object { + private val queryConfig = MembersQueryConfig(filter = null, sort = MembersSort.Default) + } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ModerationConfigListStateImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ModerationConfigListStateImplTest.kt index 4b82d3667..196792584 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ModerationConfigListStateImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/ModerationConfigListStateImplTest.kt @@ -16,12 +16,10 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.ModerationConfigData -import io.getstream.feeds.android.client.api.model.PaginationData -import io.getstream.feeds.android.client.api.model.PaginationResult -import io.getstream.feeds.android.client.api.model.QueryConfiguration import io.getstream.feeds.android.client.api.state.query.ModerationConfigSort -import io.getstream.feeds.android.client.api.state.query.ModerationConfigsFilterField import io.getstream.feeds.android.client.api.state.query.ModerationConfigsQuery +import io.getstream.feeds.android.client.api.state.query.ModerationConfigsQueryConfig +import io.getstream.feeds.android.client.internal.test.TestData.defaultPaginationResult import io.getstream.feeds.android.client.internal.test.TestData.moderationConfigData import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals @@ -41,16 +39,7 @@ internal class ModerationConfigListStateImplTest { @Test fun `on loadMoreConfigs, then update configs and pagination`() = runTest { val configs = listOf(moderationConfigData(), moderationConfigData("config-2", "team-2")) - val paginationResult = - PaginationResult( - models = configs, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration( - filter = null, - sort = ModerationConfigSort.Default, - ) + val paginationResult = defaultPaginationResult(configs) moderationConfigListState.onLoadMoreConfigs(paginationResult, queryConfig) @@ -58,4 +47,9 @@ internal class ModerationConfigListStateImplTest { assertEquals("next-cursor", moderationConfigListState.pagination?.next) assertEquals(queryConfig, moderationConfigListState.queryConfig) } + + companion object { + private val queryConfig = + ModerationConfigsQueryConfig(filter = null, sort = ModerationConfigSort.Default) + } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollListStateImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollListStateImplTest.kt index 1c497b852..28cf76340 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollListStateImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollListStateImplTest.kt @@ -15,13 +15,11 @@ */ package io.getstream.feeds.android.client.internal.state -import io.getstream.feeds.android.client.api.model.PaginationData -import io.getstream.feeds.android.client.api.model.PaginationResult import io.getstream.feeds.android.client.api.model.PollData -import io.getstream.feeds.android.client.api.model.QueryConfiguration -import io.getstream.feeds.android.client.api.state.query.PollsFilterField import io.getstream.feeds.android.client.api.state.query.PollsQuery +import io.getstream.feeds.android.client.api.state.query.PollsQueryConfig import io.getstream.feeds.android.client.api.state.query.PollsSort +import io.getstream.feeds.android.client.internal.test.TestData.defaultPaginationResult import io.getstream.feeds.android.client.internal.test.TestData.pollData import kotlinx.coroutines.test.runTest import org.junit.Assert.assertEquals @@ -41,13 +39,7 @@ internal class PollListStateImplTest { @Test fun `on queryMorePolls, then update polls and pagination`() = runTest { val polls = listOf(pollData("poll-1", "Test Poll"), pollData("poll-2", "Test Poll 2")) - val paginationResult = - PaginationResult( - models = polls, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration(filter = null, sort = PollsSort.Default) + val paginationResult = defaultPaginationResult(polls) pollListState.onQueryMorePolls(paginationResult, queryConfig) @@ -60,13 +52,7 @@ internal class PollListStateImplTest { fun `on pollUpdated, then update specific poll`() = runTest { val initialPolls = listOf(pollData("poll-1", "Test Poll"), pollData("poll-2", "Test Poll 2")) - val paginationResult = - PaginationResult( - models = initialPolls, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration(filter = null, sort = PollsSort.Default) + val paginationResult = defaultPaginationResult(initialPolls) pollListState.onQueryMorePolls(paginationResult, queryConfig) val updatedPoll = pollData("poll-1", "Updated Poll", description = "Updated description") @@ -81,13 +67,7 @@ internal class PollListStateImplTest { fun `on pollUpdated with non-existent poll, then keep existing polls unchanged`() = runTest { val initialPolls = listOf(pollData("poll-1", "Test Poll"), pollData("poll-2", "Test Poll 2")) - val paginationResult = - PaginationResult( - models = initialPolls, - pagination = PaginationData(next = "next-cursor", previous = null), - ) - val queryConfig = - QueryConfiguration(filter = null, sort = PollsSort.Default) + val paginationResult = defaultPaginationResult(initialPolls) pollListState.onQueryMorePolls(paginationResult, queryConfig) val nonExistentPoll = pollData("non-existent", "Non-existent Poll") @@ -95,4 +75,8 @@ internal class PollListStateImplTest { assertEquals(initialPolls, pollListState.polls.value) } + + companion object { + private val queryConfig = PollsQueryConfig(filter = null, sort = PollsSort.Default) + } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListStateImplTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListStateImplTest.kt index 1148fa8d4..06bbcb5cc 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListStateImplTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/state/PollVoteListStateImplTest.kt @@ -16,9 +16,8 @@ package io.getstream.feeds.android.client.internal.state import io.getstream.feeds.android.client.api.model.PollVoteData -import io.getstream.feeds.android.client.api.model.QueryConfiguration -import io.getstream.feeds.android.client.api.state.query.PollVotesFilterField import io.getstream.feeds.android.client.api.state.query.PollVotesQuery +import io.getstream.feeds.android.client.api.state.query.PollVotesQueryConfig import io.getstream.feeds.android.client.api.state.query.PollVotesSort import io.getstream.feeds.android.client.internal.test.TestData.defaultPaginationResult import io.getstream.feeds.android.client.internal.test.TestData.pollVoteData @@ -41,11 +40,6 @@ internal class PollVoteListStateImplTest { fun `on queryMorePollVotes, then update votes and pagination`() = runTest { val votes = listOf(pollVoteData(), pollVoteData("vote-2", "poll-1", "option-2", "user-2")) val paginationResult = defaultPaginationResult(votes) - val queryConfig = - QueryConfiguration( - filter = null, - sort = PollVotesSort.Default, - ) pollVoteListState.onQueryMorePollVotes(paginationResult, queryConfig) @@ -59,11 +53,6 @@ internal class PollVoteListStateImplTest { val initialVotes = listOf(pollVoteData(), pollVoteData("vote-2", "poll-1", "option-2", "user-2")) val paginationResult = defaultPaginationResult(initialVotes) - val queryConfig = - QueryConfiguration( - filter = null, - sort = PollVotesSort.Default, - ) pollVoteListState.onQueryMorePollVotes(paginationResult, queryConfig) val updatedVote = @@ -79,11 +68,6 @@ internal class PollVoteListStateImplTest { val initialVotes = listOf(pollVoteData(), pollVoteData("vote-2", "poll-1", "option-2", "user-2")) val paginationResult = defaultPaginationResult(initialVotes) - val queryConfig = - QueryConfiguration( - filter = null, - sort = PollVotesSort.Default, - ) pollVoteListState.onQueryMorePollVotes(paginationResult, queryConfig) pollVoteListState.pollVoteRemoved(initialVotes.first().id) @@ -97,11 +81,6 @@ internal class PollVoteListStateImplTest { val initialVotes = listOf(pollVoteData(), pollVoteData("vote-2", "poll-1", "option-2", "user-2")) val paginationResult = defaultPaginationResult(initialVotes) - val queryConfig = - QueryConfiguration( - filter = null, - sort = PollVotesSort.Default, - ) pollVoteListState.onQueryMorePollVotes(paginationResult, queryConfig) val nonExistentVote = pollVoteData("non-existent", "poll-1", "option-1", "user-3") @@ -115,11 +94,6 @@ internal class PollVoteListStateImplTest { val initial = listOf(pollVoteData("vote-1"), pollVoteData("vote-3", "poll-1", "option-3", "user-3")) val pagination = defaultPaginationResult(initial) - val queryConfig = - QueryConfiguration( - filter = null, - sort = PollVotesSort.Default, - ) pollVoteListState.onQueryMorePollVotes(pagination, queryConfig) val newVote = pollVoteData("vote-2", "poll-1", "option-2", "user-2") @@ -134,11 +108,6 @@ internal class PollVoteListStateImplTest { val initial = pollVoteData("vote-1", "poll-1", "option-1", "user-1", answerText = "Original") val pagination = defaultPaginationResult(listOf(initial)) - val queryConfig = - QueryConfiguration( - filter = null, - sort = PollVotesSort.Default, - ) pollVoteListState.onQueryMorePollVotes(pagination, queryConfig) val updated = pollVoteData("vote-1", "poll-1", "option-1", "user-1", answerText = "Updated") @@ -146,4 +115,8 @@ internal class PollVoteListStateImplTest { assertEquals(listOf(updated), pollVoteListState.votes.value) } + + companion object { + private val queryConfig = PollVotesQueryConfig(filter = null, sort = PollVotesSort.Default) + } } diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/utils/ListInsertSortedTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/utils/ListInsertSortedTest.kt index 9b530675e..16eb19560 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/utils/ListInsertSortedTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/utils/ListInsertSortedTest.kt @@ -15,9 +15,9 @@ */ package io.getstream.feeds.android.client.internal.utils -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import org.junit.Assert.assertEquals import org.junit.Test diff --git a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/utils/ListUpsertSortedTest.kt b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/utils/ListUpsertSortedTest.kt index a129feb90..13ce4075c 100644 --- a/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/utils/ListUpsertSortedTest.kt +++ b/stream-feeds-android-client/src/test/kotlin/io/getstream/feeds/android/client/internal/utils/ListUpsertSortedTest.kt @@ -15,9 +15,9 @@ */ package io.getstream.feeds.android.client.internal.utils -import io.getstream.android.core.api.filter.Sort -import io.getstream.android.core.api.filter.SortDirection -import io.getstream.android.core.api.filter.SortField +import io.getstream.android.core.api.sort.Sort +import io.getstream.android.core.api.sort.SortDirection +import io.getstream.android.core.api.sort.SortField import org.junit.Assert.assertEquals import org.junit.Assert.assertNotSame import org.junit.Test