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> watchCollectionsList({String? search}) { return getIt().collectionsDao.getCollections(search); } @override Future createCollection(CrudCollectionDto dto) async { try { createCollectionApi(dto); } catch (_) {} return await getIt().collectionsDao.createCollection(dto); } @override Future updateCollection(CrudCollectionDto dto, String id) async { return await getIt().collectionsDao.updateCollection(dto, id); } @override Future deleteCollection(String id) async { return await getIt().collectionsDao.deleteCollection(id); } @override Future makeCollectionPublic(String id, bool isPublic) { // TODO: implement makeCollectionPublic throw UnimplementedError(); } @override Future getCollectionsFromApi() async { try { final List items = []; final perPage = 20; final Response response = await apiClient.get( '/collections', queryParameters: {'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 response = await apiClient.get( '/collections', queryParameters: { 'perPage': perPage, 'page': currentPage + 1, }, ); if (response.data['success'] != true) { throw Exception('Не удалось получить $currentPage страницу журнала'); } items.addAll( (response.data['result']['items'] as List) .cast>(), ); currentPage = currentPage + 1; } await getIt().collectionsDao.syncCollectionFromApi(items); } catch (e, st) { print('Response error $e'); logger.logError('Ошибка в методе getCollectionsFromApi', e, st); } } Future createCollectionApi(CrudCollectionDto dto) async { try { final Response 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); } } }