import 'dart:async'; import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:mnemo_cards/di/injector.dart'; import 'package:mnemo_cards/features/packs/packs_api.dart'; import 'package:mnemo_cards/managers/repository/api.dart'; import 'package:mnemo_cards_common/mnemo_cards_common.dart'; class AdminApi with Api { final Dio _dio; AdminApi(this._dio); Future addCard(GameCardDto dto) async { final r = await _dio.post( '$path/cards/add', data: jsonEncode(dto.toJson()), ); return r.statusCode == 200; } Future deleteCard(GameCardDto dto) async { final r = await _dio.post( '$path/cards/delete', data: jsonEncode({'id': dto.id.toString()}), ); return r.statusCode == 200; } Future> getCardIds() async { final r = await _dio.get( '$path/cards/ids', ); return (jsonDecode(r.data!)['ids'] as String).split(',').cast(); } Future> getCards(List ids) async { final r = await _dio.get( '$path/cards', queryParameters: {'ids': ids.join(',')}, ); return (r.data as String).decodeList(GameCardDto.fromJson); } Future> getUsers(List ids) async { final r = await _dio.get( '$path/users', queryParameters: {'ids': ids.join(',')}, ); return (jsonDecode(r.data!) as List) .map((e) => UserDto.fromJson(e as Map)) .toList() .cast(); } Future> getUserIds() async { final r = await _dio.get( '$path/users/ids', ); return (jsonDecode(r.data!)['ids'] as String).split(',').cast(); } Future> getUserPurchases(String userId) async { final r = await _dio .get('$path/user/purchases', queryParameters: {'id': userId}); return (jsonDecode(r.data!)['payments'] as List) .cast>() .map(PaymentDto.fromJson) .toList(); } Future deleteUser(UserDto dto) async { final r = await _dio.post( '$path/users/delete', data: jsonEncode({'id': dto.id.toString()}), ); return r.statusCode == 200; } Future editUser(UserDto dto) async { final r = await _dio.post( '$path/users/add', data: jsonEncode(dto.toJson()), ); return r.statusCode == 200; } Future getEditPack(String id) async { final r = await _dio.get( '$path/pack/edit/$id', ); return (r.data as String).decode(EditCardPackDto.fromJson); } Future deletePack(EditCardPackDto dto) async { final r = await _dio.post( '$path/pack/delete', data: jsonEncode({'id': dto.id.toString()}), ); return r.statusCode == 200; } Future editPack(EditCardPackDto dto) async { final r = await _dio.post( '$path/pack/edit', data: jsonEncode(dto.toJson()), ); return r.statusCode == 200; } Future> packs() => getIt.get().getPacksPreviews(null); Future> getSubscriptionPlans() async { final r = await _dio.get( '$path/subscriptions', ); return (jsonDecode(r.data!)['plans'] as List) .cast>() .map(SubscriptionPlanAdminDto.fromJson) .toList(); } Future addSubscriptionPlan(SubscriptionPlanAdminDto dto) async { final r = await _dio.post( '$path/subscription/add', data: jsonEncode(dto.toJson()), ); return r.statusCode == 200; } Future deleteSubscriptionPlan(String id) async { final r = await _dio.post( '$path/subscription/delete/$id', ); return r.statusCode == 200; } }