117 lines
3.4 KiB
Dart
117 lines
3.4 KiB
Dart
import 'package:dio/dio.dart';
|
||
import 'package:injectable/injectable.dart';
|
||
import 'package:remever/common/functions.dart';
|
||
import 'package:remever/common/services/api_client.dart';
|
||
import 'package:remever/common/typedef.dart';
|
||
import 'package:remever/database/database.dart';
|
||
import 'package:remever/inject.dart';
|
||
import 'package:remever/models/crud_collection_dto.dart';
|
||
import 'package:remever/services/collection/collections_interface.dart';
|
||
|
||
///
|
||
/// Сервис авторизации
|
||
///
|
||
|
||
@Singleton(as: CollectionsInterface)
|
||
final class CollectionsService implements CollectionsInterface {
|
||
@override
|
||
Stream<List<Collection>> watchCollectionsList({String? search}) {
|
||
return getIt<AppDatabase>().collectionsDao.getCollections(search);
|
||
}
|
||
|
||
@override
|
||
Future<void> createCollection(CrudCollectionDto dto) async {
|
||
try {
|
||
createCollectionApi(dto);
|
||
} catch (_) {}
|
||
|
||
return await getIt<AppDatabase>().collectionsDao.createCollection(dto);
|
||
}
|
||
|
||
@override
|
||
Future<void> updateCollection(CrudCollectionDto dto, String id) async {
|
||
return await getIt<AppDatabase>().collectionsDao.updateCollection(dto, id);
|
||
}
|
||
|
||
@override
|
||
Future<void> deleteCollection(String id) async {
|
||
return await getIt<AppDatabase>().collectionsDao.deleteCollection(id);
|
||
}
|
||
|
||
@override
|
||
Future<bool> makeCollectionPublic(String id, bool isPublic) {
|
||
// TODO: implement makeCollectionPublic
|
||
throw UnimplementedError();
|
||
}
|
||
|
||
@override
|
||
Future<void> getCollectionsFromApi() async {
|
||
try {
|
||
final List<Json> items = [];
|
||
|
||
final perPage = 20;
|
||
|
||
final Response<dynamic> response = await apiClient.get(
|
||
'/collections',
|
||
queryParameters: <String, dynamic>{'perPage': perPage, 'page': 9999},
|
||
);
|
||
|
||
if (response.data['success'] != true) {
|
||
logger.logInfo('В методе getCollectionsFromApi success false');
|
||
throw Exception('Не удалось получить коллекции');
|
||
}
|
||
|
||
int totalCount = response.data['result']['totalCount'];
|
||
|
||
if (totalCount == 0) {
|
||
return;
|
||
}
|
||
|
||
int pagesCount = (totalCount / perPage).ceil();
|
||
int currentPage = 0;
|
||
|
||
while (pagesCount != currentPage) {
|
||
final Response<dynamic> response = await apiClient.get(
|
||
'/collections',
|
||
queryParameters: <String, dynamic>{
|
||
'perPage': perPage,
|
||
'page': currentPage + 1,
|
||
},
|
||
);
|
||
|
||
if (response.data['success'] != true) {
|
||
throw Exception('Не удалось получить $currentPage страницу журнала');
|
||
}
|
||
|
||
items.addAll(
|
||
(response.data['result']['items'] as List)
|
||
.cast<Map<String, dynamic>>(),
|
||
);
|
||
|
||
currentPage = currentPage + 1;
|
||
}
|
||
|
||
await getIt<AppDatabase>().collectionsDao.syncCollectionFromApi(items);
|
||
} catch (e, st) {
|
||
print('Response error $e');
|
||
logger.logError('Ошибка в методе getCollectionsFromApi', e, st);
|
||
}
|
||
}
|
||
|
||
Future<void> createCollectionApi(CrudCollectionDto dto) async {
|
||
try {
|
||
final Response<dynamic> response = await apiClient.post(
|
||
'/collections',
|
||
data: {
|
||
"title": dto.title,
|
||
"description": dto.desc,
|
||
"is_public": dto.isPublic,
|
||
},
|
||
);
|
||
} catch (e, st) {
|
||
print('Response error $e');
|
||
logger.logError('Ошибка в методе createCollectionApi', e, st);
|
||
}
|
||
}
|
||
}
|