import 'package:overfast_api/client.dart'; import 'package:overfast_api/players/player.dart'; class SearchResponse { final int total; final List results; const SearchResponse({ required this.total, required this.results, }); factory SearchResponse.fromJson(Map json) { return SearchResponse( total: json['total'], results: (json['results'] as List) .map((e) => SearchResult.fromJson(e)) .toList(), ); } Map toJson() { return { 'total': total, 'results': results.map((e) => e.toJson()).toList(), }; } } class SearchResult { final String playerId; final String name; final String? avatar; final String? namecard; final String? title; final String careerUrl; final String blizzardId; const SearchResult({ required this.playerId, required this.name, this.avatar, this.namecard, this.title, required this.careerUrl, required this.blizzardId, }); factory SearchResult.fromJson(Map json) { return SearchResult( playerId: json['player_id'], name: json['name'], avatar: json['avatar'], namecard: json['namecard'], title: json['title'], careerUrl: json['career_url'], blizzardId: json['blizzard_id'], ); } Map toJson() { return { 'playerId': playerId, 'name': name, 'avatar': avatar, 'namecard': namecard, 'title': title, 'careerUrl': careerUrl, 'blizzardId': blizzardId, }; } } class Players { final Overfast _client; const Players(this._client); Future search( String query, { String orderBy = 'name:desc', int? offset, int? limit, }) async { return _client.get('/players', { 'name': query, 'orderBy': orderBy, if (offset != null) 'offset': offset.toString(), if (limit != null) 'limit': limit.toString(), }); } Player player(String playerId) => Player(_client, playerId: playerId); }