feat(llc): Add queryBannedUsers endpoint.

Signed-off-by: xsahil03x <[email protected]>
This commit is contained in:
Sahil Kumar
2022-01-31 12:57:54 +05:30
committed by xsahil03x
parent 4bddff5918
commit 1b6051a38d
7 changed files with 188 additions and 1 deletions
@@ -1268,6 +1268,21 @@ class Channel {
pagination: pagination,
);
/// Query channel banned users.
Future<QueryBannedUsersResponse> queryBannedUsers({
Filter? filter,
List<SortOption>? sort,
PaginationParams? pagination,
}) {
_checkInitialized();
filter ??= Filter.equal('channel_cid', cid!);
return _client.queryBannedUsers(
filter: filter,
sort: sort,
pagination: pagination,
);
}
/// Mutes the channel.
Future<EmptyResponse> mute({Duration? expiration}) {
_checkInitialized();
@@ -687,6 +687,18 @@ class StreamChatClient {
return response;
}
/// Query banned users.
Future<QueryBannedUsersResponse> queryBannedUsers({
required Filter filter,
List<SortOption>? sort,
PaginationParams? pagination,
}) =>
_chatApi.moderation.queryBannedUsers(
filter: filter,
sort: sort,
pagination: pagination,
);
/// A message search.
Future<SearchMessagesResponse> search(
Filter filter, {
@@ -1,5 +1,7 @@
import 'package:stream_chat/src/core/api/responses.dart';
import 'dart:convert';
import 'package:stream_chat/src/core/http/stream_http_client.dart';
import 'package:stream_chat/stream_chat.dart';
/// Defines the api dedicated to moderation operations
class ModerationApi {
@@ -125,4 +127,24 @@ class ModerationApi {
);
return EmptyResponse.fromJson(response.data);
}
/// Queries banned users.
Future<QueryBannedUsersResponse> queryBannedUsers({
Filter? filter,
List<SortOption>? sort,
PaginationParams? pagination,
}) async {
final response = await _client.get(
'/query_banned_users',
queryParameters: {
'payload': jsonEncode({
if (sort != null) 'sort': sort,
if (filter != null) 'filter_conditions': filter,
if (pagination != null) ...pagination.toJson(),
}),
},
);
return QueryBannedUsersResponse.fromJson(response.data);
}
}
@@ -1,6 +1,7 @@
import 'package:json_annotation/json_annotation.dart';
import 'package:stream_chat/src/client/client.dart';
import 'package:stream_chat/src/core/error/error.dart';
import 'package:stream_chat/src/core/models/banned_user.dart';
import 'package:stream_chat/src/core/models/channel_model.dart';
import 'package:stream_chat/src/core/models/channel_state.dart';
import 'package:stream_chat/src/core/models/device.dart';
@@ -106,6 +107,18 @@ class QueryUsersResponse extends _BaseResponse {
_$QueryUsersResponseFromJson(json);
}
/// Model response for [StreamChatClient.queryBannedUsers] api call
@JsonSerializable(createToJson: false)
class QueryBannedUsersResponse extends _BaseResponse {
/// List of users returned by the query
@JsonKey(defaultValue: [])
late List<BannedUser> bans;
/// Create a new instance from a json
static QueryBannedUsersResponse fromJson(Map<String, dynamic> json) =>
_$QueryBannedUsersResponseFromJson(json);
}
/// Model response for [channel.getReactions] api call
@JsonSerializable(createToJson: false)
class QueryReactionsResponse extends _BaseResponse {
@@ -62,6 +62,15 @@ QueryUsersResponse _$QueryUsersResponseFromJson(Map<String, dynamic> json) =>
.toList() ??
[];
QueryBannedUsersResponse _$QueryBannedUsersResponseFromJson(
Map<String, dynamic> json) =>
QueryBannedUsersResponse()
..duration = json['duration'] as String?
..bans = (json['bans'] as List<dynamic>?)
?.map((e) => BannedUser.fromJson(e as Map<String, dynamic>))
.toList() ??
[];
QueryReactionsResponse _$QueryReactionsResponseFromJson(
Map<String, dynamic> json) =>
QueryReactionsResponse()
@@ -0,0 +1,80 @@
import 'package:equatable/equatable.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:stream_chat/src/core/models/channel_model.dart';
import 'package:stream_chat/src/core/models/user.dart';
part 'banned_user.g.dart';
/// Contains information about a [User] that was banned from a [Channel] or App.
@JsonSerializable()
class BannedUser extends Equatable {
/// Creates a new instance of [BannedUser]
const BannedUser({
required this.user,
this.bannedBy,
this.channel,
this.createdAt,
this.expires,
this.shadow = false,
this.reason,
});
/// Create a new instance from a json
factory BannedUser.fromJson(Map<String, dynamic> json) =>
_$BannedUserFromJson(json);
/// Banned user.
final User user;
/// User that banned the [user].
final User? bannedBy;
/// Channel where the [user] was banned.
final ChannelModel? channel;
/// Timestamp when the [user] was banned.
final DateTime? createdAt;
/// Timestamp when the [user] will be unbanned.
final DateTime? expires;
/// Whether the [user] is a shadow banned user.
final bool shadow;
/// Reason for the ban.
final String? reason;
/// Serialize to json
Map<String, dynamic> toJson() => _$BannedUserToJson(this);
/// Returns a copy of this object with the given fields updated.
BannedUser copyWith({
User? user,
User? bannedBy,
ChannelModel? channel,
DateTime? createdAt,
DateTime? expires,
bool? shadow,
String? reason,
}) =>
BannedUser(
user: user ?? this.user,
bannedBy: bannedBy ?? this.bannedBy,
channel: channel ?? this.channel,
createdAt: createdAt ?? this.createdAt,
expires: expires ?? this.expires,
shadow: shadow ?? this.shadow,
reason: reason ?? this.reason,
);
@override
List<Object?> get props => [
user,
bannedBy,
channel,
createdAt,
expires,
shadow,
reason,
];
}
@@ -0,0 +1,36 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'banned_user.dart';
// **************************************************************************
// JsonSerializableGenerator
// **************************************************************************
BannedUser _$BannedUserFromJson(Map<String, dynamic> json) => BannedUser(
user: User.fromJson(json['user'] as Map<String, dynamic>),
bannedBy: json['banned_by'] == null
? null
: User.fromJson(json['banned_by'] as Map<String, dynamic>),
channel: json['channel'] == null
? null
: ChannelModel.fromJson(json['channel'] as Map<String, dynamic>),
createdAt: json['created_at'] == null
? null
: DateTime.parse(json['created_at'] as String),
expires: json['expires'] == null
? null
: DateTime.parse(json['expires'] as String),
shadow: json['shadow'] as bool? ?? false,
reason: json['reason'] as String?,
);
Map<String, dynamic> _$BannedUserToJson(BannedUser instance) =>
<String, dynamic>{
'user': instance.user.toJson(),
'banned_by': instance.bannedBy?.toJson(),
'channel': instance.channel?.toJson(),
'created_at': instance.createdAt?.toIso8601String(),
'expires': instance.expires?.toIso8601String(),
'shadow': instance.shadow,
'reason': instance.reason,
};