// Package imports: import 'dart:io'; import 'package:drift/drift.dart'; import 'package:remever/common/functions.dart'; import 'package:remever/common/typedef.dart'; import 'package:remever/database/database.dart'; import 'package:remever/database/tables.dart'; import 'package:remever/models/crud_collection_dto.dart'; part 'collections_dao.g.dart'; @DriftAccessor(tables: [Collections]) class CollectionsDao extends DatabaseAccessor with _$CollectionsDaoMixin { /// /// Репозиторий для работы с коллекциями /// CollectionsDao(super.attachedDatabase); /// Получение коллекций из базы данных Stream> getCollections(String? search) { try { return db.managers.collections .filter((f) => f.title.contains(search ?? '')) .watch(); } catch (e, st) { logger.logError('Ошибка в методе getCollections', e, st); throw ('EXEPTION'); } } Future getCollectionById(String? id) { try { return db.managers.collections .filter((f) => f.id.equals(id)) .getSingleOrNull(); } catch (e, st) { logger.logError('Ошибка в методе getCollectionById', e, st); throw ('EXEPTION'); } } /// Создание коллекции Future createCollection(CrudCollectionDto dto) async { try { await db.managers.collections.create( (o) => o( title: dto.title, desc: dto.desc, isPublic: Value(dto.isPublic), image: Value(dto.avatar), ), ); } catch (e, st) { logger.logError('Ошибка в методе createCollection', e, st); } } /// Синхронизация коллекций Future syncCollectionFromApi(List data) async { for (final item in data) { try { await db.managers.collections.create( (o) => o( // id: Value(item['id'].toString()), title: item['title'], desc: item['description'], isPublic: Value(item['is_public']), image: Value(null), createdAt: Value(DateTime.parse(item['created_at'])), updatedAt: Value(DateTime.parse(item['updated_at'])), ), ); } catch (e, st) { logger.logError( 'Не смог добавить колекцию в методе syncCollectionFromApi', e, st, ); continue; } } } /// Обновление коллекции Future updateCollection(CrudCollectionDto dto, String id) async { try { await db.managers.collections .filter((f) => f.id(id)) .update( (o) => o( title: Value(dto.title), desc: Value(dto.desc), isPublic: Value(dto.isPublic), image: Value(dto.avatar), ), ); } catch (e, st) { logger.logError('Ошибка в методе updateCollection', e, st); } } /// Удаление коллекции Future deleteCollection(String id) async { try { await db.managers.collections.filter((f) => f.id(id)).delete(); } catch (e, st) { logger.logError('Ошибка в методе deleteCollection', e, st); } } }