Skip to content

refactor(llc, core): Improve query sorts and provide defaults. #2188

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Apr 9, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ linter:
- missing_whitespace_between_adjacent_strings
- non_constant_identifier_names
- null_closures
- one_member_abstracts
- only_throw_errors
- package_prefixed_library_names
- parameter_assignments
Expand Down
7 changes: 4 additions & 3 deletions packages/stream_chat/lib/src/client/channel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'dart:math';
import 'package:collection/collection.dart';
import 'package:rxdart/rxdart.dart';
import 'package:stream_chat/src/client/retry_queue.dart';
import 'package:stream_chat/src/core/models/banned_user.dart';
import 'package:stream_chat/src/core/util/utils.dart';
import 'package:stream_chat/stream_chat.dart';
import 'package:synchronized/synchronized.dart';
Expand Down Expand Up @@ -1223,7 +1224,7 @@ class Channel {
Future<QueryPollVotesResponse> queryPollVotes(
String pollId, {
Filter? filter,
List<SortOption>? sort,
SortOrder<PollVote>? sort,
PaginationParams pagination = const PaginationParams(),
}) {
_checkInitialized();
Expand Down Expand Up @@ -1782,7 +1783,7 @@ class Channel {
/// Query channel members.
Future<QueryMembersResponse> queryMembers({
Filter? filter,
List<SortOption>? sort,
SortOrder<Member>? sort,
PaginationParams? pagination,
}) =>
_client.queryMembers(
Expand All @@ -1797,7 +1798,7 @@ class Channel {
/// Query channel banned users.
Future<QueryBannedUsersResponse> queryBannedUsers({
Filter? filter,
List<SortOption>? sort,
SortOrder<BannedUser>? sort,
PaginationParams? pagination,
}) {
_checkInitialized();
Expand Down
20 changes: 11 additions & 9 deletions packages/stream_chat/lib/src/client/client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import 'package:stream_chat/src/client/retry_policy.dart';
import 'package:stream_chat/src/core/api/attachment_file_uploader.dart';
import 'package:stream_chat/src/core/api/requests.dart';
import 'package:stream_chat/src/core/api/responses.dart';
import 'package:stream_chat/src/core/api/sort_order.dart';
import 'package:stream_chat/src/core/api/stream_chat_api.dart';
import 'package:stream_chat/src/core/error/error.dart';
import 'package:stream_chat/src/core/http/connection_id_manager.dart';
Expand All @@ -17,6 +18,7 @@ import 'package:stream_chat/src/core/http/system_environment_manager.dart';
import 'package:stream_chat/src/core/http/token.dart';
import 'package:stream_chat/src/core/http/token_manager.dart';
import 'package:stream_chat/src/core/models/attachment_file.dart';
import 'package:stream_chat/src/core/models/banned_user.dart';
import 'package:stream_chat/src/core/models/channel_state.dart';
import 'package:stream_chat/src/core/models/event.dart';
import 'package:stream_chat/src/core/models/filter.dart';
Expand Down Expand Up @@ -608,7 +610,7 @@ class StreamChatClient {
/// Requests channels with a given query.
Stream<List<Channel>> queryChannels({
Filter? filter,
List<SortOption<ChannelState>>? channelStateSort,
SortOrder<ChannelState>? channelStateSort,
bool state = true,
bool watch = true,
bool presence = false,
Expand Down Expand Up @@ -717,7 +719,7 @@ class StreamChatClient {
/// Requests channels with a given query from the API.
Future<List<Channel>> queryChannelsOnline({
Filter? filter,
List<SortOption>? sort,
SortOrder<ChannelState>? sort,
bool state = true,
bool watch = true,
bool presence = false,
Expand Down Expand Up @@ -791,7 +793,7 @@ class StreamChatClient {
/// Requests channels with a given query from the Persistence client.
Future<List<Channel>> queryChannelsOffline({
Filter? filter,
List<SortOption<ChannelState>>? channelStateSort,
SortOrder<ChannelState>? channelStateSort,
PaginationParams paginationParams = const PaginationParams(),
}) async {
final offlineChannels = (await chatPersistenceClient?.getChannelStates(
Expand Down Expand Up @@ -830,7 +832,7 @@ class StreamChatClient {
Future<QueryUsersResponse> queryUsers({
bool? presence,
Filter? filter,
List<SortOption>? sort,
SortOrder<User>? sort,
PaginationParams? pagination,
}) async {
final response = await _chatApi.user.queryUsers(
Expand All @@ -846,7 +848,7 @@ class StreamChatClient {
/// Query banned users.
Future<QueryBannedUsersResponse> queryBannedUsers({
required Filter filter,
List<SortOption>? sort,
SortOrder<BannedUser>? sort,
PaginationParams? pagination,
}) =>
_chatApi.moderation.queryBannedUsers(
Expand All @@ -859,7 +861,7 @@ class StreamChatClient {
Future<SearchMessagesResponse> search(
Filter filter, {
String? query,
List<SortOption>? sort,
SortOrder? sort,
PaginationParams? paginationParams,
Filter? messageFilters,
}) =>
Expand Down Expand Up @@ -1064,7 +1066,7 @@ class StreamChatClient {
Filter? filter,
String? channelId,
List<Member>? members,
List<SortOption>? sort,
SortOrder<Member>? sort,
PaginationParams? pagination,
}) =>
_chatApi.general.queryMembers(
Expand Down Expand Up @@ -1385,7 +1387,7 @@ class StreamChatClient {
/// Queries Polls with the given [filter] and [sort] options.
Future<QueryPollsResponse> queryPolls({
Filter? filter,
List<SortOption>? sort,
SortOrder<Poll>? sort,
PaginationParams pagination = const PaginationParams(),
}) =>
_chatApi.polls.queryPolls(
Expand All @@ -1399,7 +1401,7 @@ class StreamChatClient {
Future<QueryPollVotesResponse> queryPollVotes(
String pollId, {
Filter? filter,
List<SortOption>? sort,
SortOrder<PollVote>? sort,
PaginationParams pagination = const PaginationParams(),
}) =>
_chatApi.polls.queryPollVotes(
Expand Down
3 changes: 2 additions & 1 deletion packages/stream_chat/lib/src/core/api/channel_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:convert';

import 'package:stream_chat/src/core/api/requests.dart';
import 'package:stream_chat/src/core/api/responses.dart';
import 'package:stream_chat/src/core/api/sort_order.dart';
import 'package:stream_chat/src/core/http/stream_http_client.dart';
import 'package:stream_chat/src/core/models/channel_state.dart';
import 'package:stream_chat/src/core/models/event.dart';
Expand Down Expand Up @@ -50,7 +51,7 @@ class ChannelApi {
/// Requests channels with a given query from the API.
Future<QueryChannelsResponse> queryChannels({
Filter? filter,
List<SortOption>? sort,
SortOrder<ChannelState>? sort,
int? memberLimit,
int? messageLimit,
bool state = true,
Expand Down
5 changes: 3 additions & 2 deletions packages/stream_chat/lib/src/core/api/general_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:convert';

import 'package:stream_chat/src/core/api/requests.dart';
import 'package:stream_chat/src/core/api/responses.dart';
import 'package:stream_chat/src/core/api/sort_order.dart';
import 'package:stream_chat/src/core/http/stream_http_client.dart';
import 'package:stream_chat/src/core/models/filter.dart';
import 'package:stream_chat/src/core/models/member.dart';
Expand Down Expand Up @@ -32,7 +33,7 @@ class GeneralApi {
Future<SearchMessagesResponse> searchMessages(
Filter filter, {
String? query,
List<SortOption>? sort,
SortOrder? sort,
PaginationParams? pagination,
Filter? messageFilters,
}) async {
Expand Down Expand Up @@ -75,7 +76,7 @@ class GeneralApi {
Filter? filter,
String? channelId,
List<Member>? members,
List<SortOption>? sort,
SortOrder<Member>? sort,
PaginationParams? pagination,
}) async {
final response = await _client.get(
Expand Down
3 changes: 2 additions & 1 deletion packages/stream_chat/lib/src/core/api/moderation_api.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'dart:convert';

import 'package:stream_chat/src/core/models/banned_user.dart';
import 'package:stream_chat/stream_chat.dart';

/// Defines the api dedicated to moderation operations
Expand Down Expand Up @@ -130,7 +131,7 @@ class ModerationApi {
/// Queries banned users.
Future<QueryBannedUsersResponse> queryBannedUsers({
Filter? filter,
List<SortOption>? sort,
SortOrder<BannedUser>? sort,
PaginationParams? pagination,
}) async {
final response = await _client.get(
Expand Down
5 changes: 3 additions & 2 deletions packages/stream_chat/lib/src/core/api/polls_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:convert';

import 'package:stream_chat/src/core/api/requests.dart';
import 'package:stream_chat/src/core/api/responses.dart';
import 'package:stream_chat/src/core/api/sort_order.dart';
import 'package:stream_chat/src/core/http/stream_http_client.dart';
import 'package:stream_chat/src/core/models/filter.dart';
import 'package:stream_chat/src/core/models/poll.dart';
Expand Down Expand Up @@ -162,7 +163,7 @@ class PollsApi {
/// parameters.
Future<QueryPollsResponse> queryPolls({
Filter? filter,
List<SortOption>? sort,
SortOrder<Poll>? sort,
PaginationParams pagination = const PaginationParams(),
}) async {
final response = await _client.post(
Expand All @@ -181,7 +182,7 @@ class PollsApi {
Future<QueryPollVotesResponse> queryPollVotes(
String pollId, {
Filter? filter,
List<SortOption>? sort,
SortOrder<PollVote>? sort,
PaginationParams pagination = const PaginationParams(),
}) async {
final response = await _client.post(
Expand Down
42 changes: 0 additions & 42 deletions packages/stream_chat/lib/src/core/api/requests.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,48 +3,6 @@ import 'package:json_annotation/json_annotation.dart';

part 'requests.g.dart';

/// Sorting options
@JsonSerializable(includeIfNull: false)
class SortOption<T> {
/// Creates a new SortOption instance
///
/// For example:
/// ```dart
/// // Sort channels by the last message date:
/// final sorting = SortOption("last_message_at")
/// ```
const SortOption(
this.field, {
this.direction = SortOption.DESC,
this.comparator,
});

/// Create a new instance from a json
factory SortOption.fromJson(Map<String, dynamic> json) =>
_$SortOptionFromJson(json);

/// Ascending order
// ignore: constant_identifier_names
static const ASC = 1;

/// Descending order
// ignore: constant_identifier_names
static const DESC = -1;

/// A sorting field name
final String field;

/// A sorting direction
final int direction;

/// Sorting field Comparator required for offline sorting
@JsonKey(includeToJson: false, includeFromJson: false)
final Comparator<T>? comparator;

/// Serialize model to json
Map<String, dynamic> toJson() => _$SortOptionToJson(this);
}

/// Pagination options.
@JsonSerializable(includeIfNull: false)
class PaginationParams extends Equatable {
Expand Down
12 changes: 0 additions & 12 deletions packages/stream_chat/lib/src/core/api/requests.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading