mnemo_cards/lib/admin/admin_api.dart
2024-05-31 17:35:41 +03:00

120 lines
3.2 KiB
Dart

import 'dart:async';
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<bool> addCard(GameCardDto dto) async {
final r = await _dio.post<String>(
'$path/cards/add',
data: jsonEncode(dto.toJson()),
);
return r.statusCode == 200;
}
Future<bool> deleteCard(GameCardDto dto) async {
final r = await _dio.post<String>(
'$path/cards/delete',
data: jsonEncode({'id': dto.id.toString()}),
);
return r.statusCode == 200;
}
Future<List<String>> getCardIds() async {
final r = await _dio.get<String>(
'$path/cards/ids',
);
return (jsonDecode(r.data!)['ids'] as String).split(',').cast();
}
Future<List<GameCardDto>> getCards(List<String> ids) async {
final r = await _dio.get<String>(
'$path/cards',
queryParameters: {'ids': ids.join(',')},
);
return (jsonDecode(r.data!) as List)
.map((e) => GameCardDto.fromJson(e as Map<String, dynamic>))
.toList()
.cast();
}
Future<List<UserDto>> getUsers(List<String> ids) async {
final r = await _dio.get<String>(
'$path/users',
queryParameters: {'ids': ids.join(',')},
);
return (jsonDecode(r.data!) as List)
.map((e) => UserDto.fromJson(e as Map<String, dynamic>))
.toList()
.cast();
}
Future<List<String>> getUserIds() async {
final r = await _dio.get<String>(
'$path/users/ids',
);
return (jsonDecode(r.data!)['ids'] as String).split(',').cast();
}
Future<List<PaymentDto>> getUserPurchases(String userId) async {
final r = await _dio
.get<String>('$path/user/purchases', queryParameters: {'id': userId});
return (jsonDecode(r.data!)['payments'] as List)
.cast<Map<String, Object?>>()
.map(PaymentDto.fromJson)
.toList();
}
Future<bool> deleteUser(UserDto dto) async {
final r = await _dio.post<String>(
'$path/users/delete',
data: jsonEncode({'id': dto.id.toString()}),
);
return r.statusCode == 200;
}
Future<bool> editUser(UserDto dto) async {
final r = await _dio.post<String>(
'$path/users/add',
data: jsonEncode(dto.toJson()),
);
return r.statusCode == 200;
}
Future<EditCardPackDto?> getEditPack(String id) async {
final r = await _dio.get<String>(
'$path/pack/edit/$id',
);
return EditCardPackDto.fromJson(
jsonDecode(r.data as String) as Map<String, Object?>,
);
}
Future<bool> deletePack(EditCardPackDto dto) async {
final r = await _dio.post<String>(
'$path/pack/delete',
data: jsonEncode({'id': dto.id.toString()}),
);
return r.statusCode == 200;
}
Future<bool> editPack(EditCardPackDto dto) async {
final r = await _dio.post<String>(
'$path/pack/edit',
data: jsonEncode(dto.toJson()),
);
return r.statusCode == 200;
}
Future<List<CardPackPreviewDto>> packs() =>
getIt.get<PacksApi>().getPacksPreviews(null);
}