Skip to content

Commit 83bba81

Browse files
authored
refactor(llc, core): Improve query sorts and provide defaults. (#2188)
* refactor!(llc, core): Improve query sorts and provide defaults. * chore: rename Sort to SortOrder * refactor: convert ComparableFieldProvider to an interface * chore: remove `one_member_abstracts` lint rule * chore: update doc * refactor: move sortOrder out of requests * chore: fix formatting * test: fix tests * test: add more tests
1 parent 0e56281 commit 83bba81

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+2159
-312
lines changed

analysis_options.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ linter:
6868
- missing_whitespace_between_adjacent_strings
6969
- non_constant_identifier_names
7070
- null_closures
71-
- one_member_abstracts
7271
- only_throw_errors
7372
- package_prefixed_library_names
7473
- parameter_assignments

packages/stream_chat/lib/src/client/channel.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'dart:math';
44
import 'package:collection/collection.dart';
55
import 'package:rxdart/rxdart.dart';
66
import 'package:stream_chat/src/client/retry_queue.dart';
7+
import 'package:stream_chat/src/core/models/banned_user.dart';
78
import 'package:stream_chat/src/core/util/utils.dart';
89
import 'package:stream_chat/stream_chat.dart';
910
import 'package:synchronized/synchronized.dart';
@@ -1223,7 +1224,7 @@ class Channel {
12231224
Future<QueryPollVotesResponse> queryPollVotes(
12241225
String pollId, {
12251226
Filter? filter,
1226-
List<SortOption>? sort,
1227+
SortOrder<PollVote>? sort,
12271228
PaginationParams pagination = const PaginationParams(),
12281229
}) {
12291230
_checkInitialized();
@@ -1782,7 +1783,7 @@ class Channel {
17821783
/// Query channel members.
17831784
Future<QueryMembersResponse> queryMembers({
17841785
Filter? filter,
1785-
List<SortOption>? sort,
1786+
SortOrder<Member>? sort,
17861787
PaginationParams? pagination,
17871788
}) =>
17881789
_client.queryMembers(
@@ -1797,7 +1798,7 @@ class Channel {
17971798
/// Query channel banned users.
17981799
Future<QueryBannedUsersResponse> queryBannedUsers({
17991800
Filter? filter,
1800-
List<SortOption>? sort,
1801+
SortOrder<BannedUser>? sort,
18011802
PaginationParams? pagination,
18021803
}) {
18031804
_checkInitialized();

packages/stream_chat/lib/src/client/client.dart

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:stream_chat/src/client/retry_policy.dart';
99
import 'package:stream_chat/src/core/api/attachment_file_uploader.dart';
1010
import 'package:stream_chat/src/core/api/requests.dart';
1111
import 'package:stream_chat/src/core/api/responses.dart';
12+
import 'package:stream_chat/src/core/api/sort_order.dart';
1213
import 'package:stream_chat/src/core/api/stream_chat_api.dart';
1314
import 'package:stream_chat/src/core/error/error.dart';
1415
import 'package:stream_chat/src/core/http/connection_id_manager.dart';
@@ -17,6 +18,7 @@ import 'package:stream_chat/src/core/http/system_environment_manager.dart';
1718
import 'package:stream_chat/src/core/http/token.dart';
1819
import 'package:stream_chat/src/core/http/token_manager.dart';
1920
import 'package:stream_chat/src/core/models/attachment_file.dart';
21+
import 'package:stream_chat/src/core/models/banned_user.dart';
2022
import 'package:stream_chat/src/core/models/channel_state.dart';
2123
import 'package:stream_chat/src/core/models/event.dart';
2224
import 'package:stream_chat/src/core/models/filter.dart';
@@ -608,7 +610,7 @@ class StreamChatClient {
608610
/// Requests channels with a given query.
609611
Stream<List<Channel>> queryChannels({
610612
Filter? filter,
611-
List<SortOption<ChannelState>>? channelStateSort,
613+
SortOrder<ChannelState>? channelStateSort,
612614
bool state = true,
613615
bool watch = true,
614616
bool presence = false,
@@ -717,7 +719,7 @@ class StreamChatClient {
717719
/// Requests channels with a given query from the API.
718720
Future<List<Channel>> queryChannelsOnline({
719721
Filter? filter,
720-
List<SortOption>? sort,
722+
SortOrder<ChannelState>? sort,
721723
bool state = true,
722724
bool watch = true,
723725
bool presence = false,
@@ -791,7 +793,7 @@ class StreamChatClient {
791793
/// Requests channels with a given query from the Persistence client.
792794
Future<List<Channel>> queryChannelsOffline({
793795
Filter? filter,
794-
List<SortOption<ChannelState>>? channelStateSort,
796+
SortOrder<ChannelState>? channelStateSort,
795797
PaginationParams paginationParams = const PaginationParams(),
796798
}) async {
797799
final offlineChannels = (await chatPersistenceClient?.getChannelStates(
@@ -830,7 +832,7 @@ class StreamChatClient {
830832
Future<QueryUsersResponse> queryUsers({
831833
bool? presence,
832834
Filter? filter,
833-
List<SortOption>? sort,
835+
SortOrder<User>? sort,
834836
PaginationParams? pagination,
835837
}) async {
836838
final response = await _chatApi.user.queryUsers(
@@ -846,7 +848,7 @@ class StreamChatClient {
846848
/// Query banned users.
847849
Future<QueryBannedUsersResponse> queryBannedUsers({
848850
required Filter filter,
849-
List<SortOption>? sort,
851+
SortOrder<BannedUser>? sort,
850852
PaginationParams? pagination,
851853
}) =>
852854
_chatApi.moderation.queryBannedUsers(
@@ -859,7 +861,7 @@ class StreamChatClient {
859861
Future<SearchMessagesResponse> search(
860862
Filter filter, {
861863
String? query,
862-
List<SortOption>? sort,
864+
SortOrder? sort,
863865
PaginationParams? paginationParams,
864866
Filter? messageFilters,
865867
}) =>
@@ -1064,7 +1066,7 @@ class StreamChatClient {
10641066
Filter? filter,
10651067
String? channelId,
10661068
List<Member>? members,
1067-
List<SortOption>? sort,
1069+
SortOrder<Member>? sort,
10681070
PaginationParams? pagination,
10691071
}) =>
10701072
_chatApi.general.queryMembers(
@@ -1385,7 +1387,7 @@ class StreamChatClient {
13851387
/// Queries Polls with the given [filter] and [sort] options.
13861388
Future<QueryPollsResponse> queryPolls({
13871389
Filter? filter,
1388-
List<SortOption>? sort,
1390+
SortOrder<Poll>? sort,
13891391
PaginationParams pagination = const PaginationParams(),
13901392
}) =>
13911393
_chatApi.polls.queryPolls(
@@ -1399,7 +1401,7 @@ class StreamChatClient {
13991401
Future<QueryPollVotesResponse> queryPollVotes(
14001402
String pollId, {
14011403
Filter? filter,
1402-
List<SortOption>? sort,
1404+
SortOrder<PollVote>? sort,
14031405
PaginationParams pagination = const PaginationParams(),
14041406
}) =>
14051407
_chatApi.polls.queryPollVotes(

packages/stream_chat/lib/src/core/api/channel_api.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'dart:convert';
22

33
import 'package:stream_chat/src/core/api/requests.dart';
44
import 'package:stream_chat/src/core/api/responses.dart';
5+
import 'package:stream_chat/src/core/api/sort_order.dart';
56
import 'package:stream_chat/src/core/http/stream_http_client.dart';
67
import 'package:stream_chat/src/core/models/channel_state.dart';
78
import 'package:stream_chat/src/core/models/event.dart';
@@ -50,7 +51,7 @@ class ChannelApi {
5051
/// Requests channels with a given query from the API.
5152
Future<QueryChannelsResponse> queryChannels({
5253
Filter? filter,
53-
List<SortOption>? sort,
54+
SortOrder<ChannelState>? sort,
5455
int? memberLimit,
5556
int? messageLimit,
5657
bool state = true,

packages/stream_chat/lib/src/core/api/general_api.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'dart:convert';
22

33
import 'package:stream_chat/src/core/api/requests.dart';
44
import 'package:stream_chat/src/core/api/responses.dart';
5+
import 'package:stream_chat/src/core/api/sort_order.dart';
56
import 'package:stream_chat/src/core/http/stream_http_client.dart';
67
import 'package:stream_chat/src/core/models/filter.dart';
78
import 'package:stream_chat/src/core/models/member.dart';
@@ -32,7 +33,7 @@ class GeneralApi {
3233
Future<SearchMessagesResponse> searchMessages(
3334
Filter filter, {
3435
String? query,
35-
List<SortOption>? sort,
36+
SortOrder? sort,
3637
PaginationParams? pagination,
3738
Filter? messageFilters,
3839
}) async {
@@ -75,7 +76,7 @@ class GeneralApi {
7576
Filter? filter,
7677
String? channelId,
7778
List<Member>? members,
78-
List<SortOption>? sort,
79+
SortOrder<Member>? sort,
7980
PaginationParams? pagination,
8081
}) async {
8182
final response = await _client.get(

packages/stream_chat/lib/src/core/api/moderation_api.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'dart:convert';
22

3+
import 'package:stream_chat/src/core/models/banned_user.dart';
34
import 'package:stream_chat/stream_chat.dart';
45

56
/// Defines the api dedicated to moderation operations
@@ -130,7 +131,7 @@ class ModerationApi {
130131
/// Queries banned users.
131132
Future<QueryBannedUsersResponse> queryBannedUsers({
132133
Filter? filter,
133-
List<SortOption>? sort,
134+
SortOrder<BannedUser>? sort,
134135
PaginationParams? pagination,
135136
}) async {
136137
final response = await _client.get(

packages/stream_chat/lib/src/core/api/polls_api.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'dart:convert';
22

33
import 'package:stream_chat/src/core/api/requests.dart';
44
import 'package:stream_chat/src/core/api/responses.dart';
5+
import 'package:stream_chat/src/core/api/sort_order.dart';
56
import 'package:stream_chat/src/core/http/stream_http_client.dart';
67
import 'package:stream_chat/src/core/models/filter.dart';
78
import 'package:stream_chat/src/core/models/poll.dart';
@@ -162,7 +163,7 @@ class PollsApi {
162163
/// parameters.
163164
Future<QueryPollsResponse> queryPolls({
164165
Filter? filter,
165-
List<SortOption>? sort,
166+
SortOrder<Poll>? sort,
166167
PaginationParams pagination = const PaginationParams(),
167168
}) async {
168169
final response = await _client.post(
@@ -181,7 +182,7 @@ class PollsApi {
181182
Future<QueryPollVotesResponse> queryPollVotes(
182183
String pollId, {
183184
Filter? filter,
184-
List<SortOption>? sort,
185+
SortOrder<PollVote>? sort,
185186
PaginationParams pagination = const PaginationParams(),
186187
}) async {
187188
final response = await _client.post(

packages/stream_chat/lib/src/core/api/requests.dart

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,6 @@ import 'package:json_annotation/json_annotation.dart';
33

44
part 'requests.g.dart';
55

6-
/// Sorting options
7-
@JsonSerializable(includeIfNull: false)
8-
class SortOption<T> {
9-
/// Creates a new SortOption instance
10-
///
11-
/// For example:
12-
/// ```dart
13-
/// // Sort channels by the last message date:
14-
/// final sorting = SortOption("last_message_at")
15-
/// ```
16-
const SortOption(
17-
this.field, {
18-
this.direction = SortOption.DESC,
19-
this.comparator,
20-
});
21-
22-
/// Create a new instance from a json
23-
factory SortOption.fromJson(Map<String, dynamic> json) =>
24-
_$SortOptionFromJson(json);
25-
26-
/// Ascending order
27-
// ignore: constant_identifier_names
28-
static const ASC = 1;
29-
30-
/// Descending order
31-
// ignore: constant_identifier_names
32-
static const DESC = -1;
33-
34-
/// A sorting field name
35-
final String field;
36-
37-
/// A sorting direction
38-
final int direction;
39-
40-
/// Sorting field Comparator required for offline sorting
41-
@JsonKey(includeToJson: false, includeFromJson: false)
42-
final Comparator<T>? comparator;
43-
44-
/// Serialize model to json
45-
Map<String, dynamic> toJson() => _$SortOptionToJson(this);
46-
}
47-
486
/// Pagination options.
497
@JsonSerializable(includeIfNull: false)
508
class PaginationParams extends Equatable {

packages/stream_chat/lib/src/core/api/requests.g.dart

Lines changed: 0 additions & 12 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)