overfast_api/lib/players/players.dart
2024-05-07 00:14:45 +02:00

94 lines
2.1 KiB
Dart

import 'package:overfast_api/client.dart';
import 'package:overfast_api/players/player.dart';
class SearchResponse {
final int total;
final List<SearchResult> results;
const SearchResponse({
required this.total,
required this.results,
});
factory SearchResponse.fromJson(Map<String, dynamic> json) {
return SearchResponse(
total: json['total'],
results: (json['results'] as List)
.map((e) => SearchResult.fromJson(e))
.toList(),
);
}
Map<String, dynamic> 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<String, dynamic> 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<String, dynamic> 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<SearchResponse> search(
String query, {
String orderBy = 'name:desc',
int? offset,
int? limit,
}) async {
return _client.get<SearchResponse>('/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);
}