diff --git a/CHANGELOG.md b/CHANGELOG.md index 80302687..3784a778 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,6 +34,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Implemented Event2 duplication API, make satellite classes immutable [#5013](https://github.com/rokwire/illinois-app/issues/5013). - Events2.loadGroupEvents updated to get time filter parameter, cleaned up sort type setting [#5022](https://github.com/rokwire/illinois-app/issues/5022). - Make Auth2UserProfile.fromFieldsVisibility a factory constructor [#5026](https://github.com/rokwire/illinois-app/issues/5026). +- Update directory accounts loading [#590](https://github.com/rokwire/app-flutter-plugin/issues/590). ## [1.8.3] - 2025-03-12 ### Added diff --git a/lib/model/auth2.directory.dart b/lib/model/auth2.directory.dart index b35ee620..ad19cf2c 100644 --- a/lib/model/auth2.directory.dart +++ b/lib/model/auth2.directory.dart @@ -4,6 +4,40 @@ import 'package:collection/collection.dart'; import 'package:rokwire_plugin/model/auth2.dart'; import 'package:rokwire_plugin/utils/utils.dart'; +////////////////////////////////////////// +// Auth2PublicAccountsResult + +class Auth2PublicAccountsResult { + final List? accounts; + final Map? indexCounts; + final int? totalCount; + + Auth2PublicAccountsResult({this.accounts, this.indexCounts, this.totalCount}); + + static Auth2PublicAccountsResult? fromJson(Map? json) { + if (json != null) { + Map indexCounts = {}; + Map? indexCountsJson = JsonUtils.mapValue(json['counts']); + for (MapEntry count in indexCountsJson?.entries ?? []) { + indexCounts[count.key] = (count.value is int) ? count.value : 0; + } + + return Auth2PublicAccountsResult( + accounts: Auth2PublicAccount.listFromJson(JsonUtils.listValue(json['accounts'])), + indexCounts: indexCounts, + totalCount: JsonUtils.intValue(json['total']), + ); + } + return null; + } + + Map toJson() => { + 'accounts': Auth2PublicAccount.listToJson(accounts), + 'counts': indexCounts, + 'total': totalCount, + }; +} + ////////////////////////////////////////// // Auth2PublicAccount diff --git a/lib/service/auth2.directory.dart b/lib/service/auth2.directory.dart index 1254b914..c0fb5cb9 100644 --- a/lib/service/auth2.directory.dart +++ b/lib/service/auth2.directory.dart @@ -15,15 +15,17 @@ List? _sampleDirectoryAccounts; extension Auh2Directory on Auth2 { static const String attributesScope = 'app-directory'; + static const String loadDirectoryAccountsAscending = 'asc'; + static const String loadDirectoryAccountsDescending = 'desc'; ContentAttributes? get directoryAttributes => Content().contentAttributes(attributesScope); - Future?> loadDirectoryAccounts({String? search, + Future loadDirectoryAccounts({String? search, String? userName, String? firstName, String? lastName, Iterable? ids, String? followingId, String? followerId, - Map? attriutes, - int? offset, int? limit}) async { + Map? attributes, + String? offset, int? limit, bool reverse = false}) async { //TMP: //return _sampleAccounts; @@ -33,7 +35,7 @@ extension Auh2Directory on Auth2 { // ignore: dead_code if (Config().coreUrl != null) { - String url = UrlUtils.addQueryParameters("${Config().coreUrl}/services/accounts/public", { + String url = UrlUtils.addQueryParameters("${Config().coreUrl}/services/v2/accounts/public", { if (search != null) 'search': search, @@ -53,16 +55,17 @@ extension Auh2Directory on Auth2 { 'follower-id': followerId, if (offset != null) - 'offset': offset.toString(), + 'offset': offset, if (limit != null) 'limit': limit.toString(), - - if (attriutes != null) - ...attriutes.map((k, v) => MapEntry(k, (v is List) ? v.join(',') : v.toString())) + 'order': reverse ? loadDirectoryAccountsDescending : loadDirectoryAccountsAscending, + + if (attributes != null) + ...attributes.map((k, v) => MapEntry(k, (v is List) ? v.join(',') : v.toString())) }); Response? response = await Network().get(url, auth: Auth2()); - return (response?.statusCode == 200) ? Auth2PublicAccount.listFromJson(JsonUtils.decodeList(response?.body)) : null; + return (response?.statusCode == 200) ? Auth2PublicAccountsResult.fromJson(JsonUtils.decodeMap(response?.body)) : null; } return null; }