feat: add characters
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
import '../../../../../core/locator/locator.dart';
|
||||
import '../../../../../core/network/api_provider_imp.dart';
|
||||
import '../../../domain/entities/avatar_character.dart';
|
||||
|
||||
/// دادهٔ شخصیتهای آواتار از backend (دریافت، خرید، انتخاب).
|
||||
class AvatarApiProvider {
|
||||
ApiProviderImp get _api => locator<ApiProviderImp>();
|
||||
|
||||
Future<AvatarCatalog> getAvatars() async {
|
||||
final res = await _api.get('/avatars');
|
||||
if (res.statusCode != 200) {
|
||||
throw Exception('avatars: ${res.statusCode}');
|
||||
}
|
||||
final list = (res.data['avatars'] as List?) ?? const [];
|
||||
final avatars = list
|
||||
.map((e) => AvatarCharacter.fromJson(Map<String, dynamic>.from(e as Map)))
|
||||
.toList();
|
||||
return AvatarCatalog(
|
||||
avatars: avatars,
|
||||
selected: (res.data['selected'] ?? '') as String,
|
||||
);
|
||||
}
|
||||
|
||||
/// خرید؛ null یعنی موفق، وگرنه پیامِ خطای فارسی.
|
||||
Future<String?> buyAvatar(String id) => _post('/shop/buy-avatar', id);
|
||||
|
||||
/// انتخاب؛ id خالی ⇒ بازگشت به آواتارِ تصادفی. null یعنی موفق.
|
||||
Future<String?> selectAvatar(String id) => _post('/shop/select-avatar', id);
|
||||
|
||||
Future<String?> _post(String path, String id) async {
|
||||
final res = await _api.post(path, body: {'avatar_id': id});
|
||||
if (res.statusCode == 200) return null;
|
||||
switch (res.statusCode) {
|
||||
case 402:
|
||||
return 'سکهٔ کافی ندارید';
|
||||
case 403:
|
||||
return 'این شخصیت را ندارید';
|
||||
case 409:
|
||||
return 'این شخصیت را دارید';
|
||||
default:
|
||||
return 'عملیات ناموفق بود';
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user