import '../../core/utils/result.dart'; import '../../core/errors/failure.dart'; import '../models/collection.dart'; import '../models/post.dart'; import '../repositories/collection_repository.dart'; class CollectionService { CollectionService(this._repository); final CollectionRepository _repository; Future> createCollection( String name, String? description) { final now = DateTime.now(); return _repository.save( Collection( id: now.microsecondsSinceEpoch.toString(), name: name, description: description, createdAt: now, updatedAt: now, ), ); } Future> updateCollection( String id, { required String name, String? description, String? coverUrl, }) async { final existingResult = await _repository.getById(id); if (existingResult is Error) { return Error(existingResult.failure); } final existing = (existingResult as Success).data; if (existing == null) { return const Error( Failure(code: 'not_found', message: 'Collection not found'), ); } return _repository.save( Collection( id: id, name: name, description: description, coverUrl: coverUrl, createdAt: existing.createdAt, updatedAt: DateTime.now(), ), ); } Future> deleteCollection(String id) => _repository.delete(id); Future> addPostToCollection(String collectionId, Post post) { return _repository.addPost(collectionId, post); } Future> addPostsToCollection( String collectionId, List posts, ) { return _repository.addPosts(collectionId, posts); } Future> removePostFromCollection( String collectionId, String postId, String providerId, ) { return _repository.removePost(collectionId, postId, providerId); } Future>> getCollections() => _repository.all(); Future>> getCollectionPosts(String collectionId) { return _repository.posts(collectionId); } }