From 3886ef080e9d232a59a3ccc27c239480d3450539 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Thu, 24 Nov 2022 15:24:59 -0500 Subject: [PATCH] fix(crud)!: use FutureOrResult extension (close #42) --- .../repositories/crud_repository_impl.dart | 16 +++++++------- .../domain/repositories/crud_repository.dart | 16 +++++++------- .../lib/src/domain/usecases/create.dart | 13 ++++++++++-- .../lib/src/domain/usecases/delete.dart | 13 ++++++++++-- .../lib/src/domain/usecases/delete_all.dart | 4 ++-- .../lib/src/domain/usecases/get.dart | 13 ++++++++++-- .../lib/src/domain/usecases/get_all.dart | 5 +++-- .../lib/src/domain/usecases/query.dart | 15 ++++++++++--- .../{stream.dart => stream_query.dart} | 21 +++++++++++++++---- .../lib/src/domain/usecases/update.dart | 15 ++++++++++--- .../lib/src/domain/usecases/update_all.dart | 15 ++++++++++--- .../lib/src/domain/usecases/usecases.dart | 2 +- 12 files changed, 108 insertions(+), 40 deletions(-) rename packages/wyatt_crud_bloc/lib/src/domain/usecases/{stream.dart => stream_query.dart} (67%) diff --git a/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart b/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart index e641fa6a..1a62f179 100644 --- a/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart +++ b/packages/wyatt_crud_bloc/lib/src/data/repositories/crud_repository_impl.dart @@ -30,7 +30,7 @@ class CrudRepositoryImpl }) : _crudDataSource = crudDataSource; @override - FutureResult create(Model object, {String? id}) => + FutureOrResult create(Model object, {String? id}) => Result.tryCatchAsync( () async { await _crudDataSource.create(object, id: id); @@ -39,21 +39,21 @@ class CrudRepositoryImpl ); @override - FutureResult get(String id) => + FutureOrResult get(String id) => Result.tryCatchAsync( () async => _crudDataSource.get(id), (error) => error, ); @override - FutureResult> getAll() => + FutureOrResult> getAll() => Result.tryCatchAsync, AppException, AppException>( () async => _crudDataSource.getAll(), (error) => error, ); @override - FutureResult update( + FutureOrResult update( String id, { Model? object, Map? raw, @@ -64,28 +64,28 @@ class CrudRepositoryImpl ); @override - FutureResult updateAll(Map raw) => + FutureOrResult updateAll(Map raw) => Result.tryCatchAsync( () async => _crudDataSource.updateAll(raw), (error) => error, ); @override - FutureResult delete(String id) => + FutureOrResult delete(String id) => Result.tryCatchAsync( () async => _crudDataSource.delete(id), (error) => error, ); @override - FutureResult deleteAll() => + FutureOrResult deleteAll() => Result.tryCatchAsync( () async => _crudDataSource.deleteAll(), (error) => error, ); @override - FutureResult> query(List conditions) => + FutureOrResult> query(List conditions) => Result.tryCatchAsync, AppException, AppException>( () async => _crudDataSource.query(conditions), (error) => error, diff --git a/packages/wyatt_crud_bloc/lib/src/domain/repositories/crud_repository.dart b/packages/wyatt_crud_bloc/lib/src/domain/repositories/crud_repository.dart index 626a3bcf..f0313c44 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/repositories/crud_repository.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/repositories/crud_repository.dart @@ -20,18 +20,18 @@ import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; abstract class CrudRepository extends BaseRepository { - FutureResult create(Model object, {String? id}); - FutureResult get(String id); - FutureResult> getAll(); - FutureResult update( + FutureOrResult create(Model object, {String? id}); + FutureOrResult get(String id); + FutureOrResult> getAll(); + FutureOrResult update( String id, { Model? object, Map? raw, }); - FutureResult updateAll(Map raw); - FutureResult delete(String id); - FutureResult deleteAll(); - FutureResult> query(List conditions); + FutureOrResult updateAll(Map raw); + FutureOrResult delete(String id); + FutureOrResult deleteAll(); + FutureOrResult> query(List conditions); StreamResult> stream({ String? id, List? conditions, diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/create.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/create.dart index 35943bd9..4ddf5710 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/create.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/create.dart @@ -15,15 +15,24 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'dart:async'; + import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; -class Create extends UseCase { +class Create extends AsyncUseCase { final CrudRepository _crudRepository; Create(this._crudRepository); @override - FutureResult call(Model params) => _crudRepository.create(params); + FutureOr onStart(Model? params) { + if(params == null){ + throw ClientException('$Model cannot be null.'); + } + } + + @override + FutureOrResult call(Model? params) => _crudRepository.create(params!); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart index df706dad..3bd2e867 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete.dart @@ -14,15 +14,24 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'dart:async'; + import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; -class Delete extends UseCase { +class Delete extends AsyncUseCase { final CrudRepository _crudRepository; Delete(this._crudRepository); @override - FutureResult call(String params) => _crudRepository.delete(params); + FutureOr onStart(String? params) { + if(params == null){ + throw ClientException('Id cannot be null.'); + } + } + + @override + FutureOrResult call(String? params) => _crudRepository.delete(params!); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart index 2151cde1..d3caf9d1 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/delete_all.dart @@ -18,11 +18,11 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; -class DeleteAll extends UseCase { +class DeleteAll extends AsyncUseCase { final CrudRepository _crudRepository; DeleteAll(this._crudRepository); @override - FutureResult call(void params) => _crudRepository.deleteAll(); + FutureOrResult call(void params) => _crudRepository.deleteAll(); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart index f778e0a2..947deeca 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get.dart @@ -14,15 +14,24 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'dart:async'; + import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; -class Get extends UseCase { +class Get extends AsyncUseCase { final CrudRepository _crudRepository; Get(this._crudRepository); @override - FutureResult call(String params) => _crudRepository.get(params); + FutureOr onStart(String? params) { + if(params == null){ + throw ClientException('Id cannot be null.'); + } + } + + @override + FutureOrResult call(String? params) => _crudRepository.get(params!); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart index 6797c37c..6088193b 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/get_all.dart @@ -18,11 +18,12 @@ import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; -class GetAll extends UseCase> { +class GetAll + extends AsyncUseCase> { final CrudRepository _crudRepository; GetAll(this._crudRepository); @override - FutureResult> call(void params) => _crudRepository.getAll(); + FutureOrResult> call(void params) => _crudRepository.getAll(); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart index e7ed25df..f9b43531 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/query.dart @@ -14,18 +14,27 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'dart:async'; + import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class Query - extends UseCase, List> { + extends AsyncUseCase, List> { final CrudRepository _crudRepository; Query(this._crudRepository); @override - FutureResult> call(List params) => - _crudRepository.query(params); + FutureOr onStart(List? params) { + if(params == null){ + throw ClientException('List of conditions cannot be null.'); + } + } + + @override + FutureOrResult> call(List? params) => + _crudRepository.query(params!); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/stream.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/stream_query.dart similarity index 67% rename from packages/wyatt_crud_bloc/lib/src/domain/usecases/stream.dart rename to packages/wyatt_crud_bloc/lib/src/domain/usecases/stream_query.dart index 51255cd4..2b2c80e5 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/stream.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/stream_query.dart @@ -14,11 +14,7 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -// TODO(hpcl): add streamed usecase in wyatt_architecture -// import 'package:wyatt_architecture/wyatt_architecture.dart'; -// import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; -// import 'package:wyatt_crud_bloc/src/domain/usecases/params/stream_parameters.dart'; // class Stream extends UseCase> { // final CrudRepository _crudRepository; @@ -29,3 +25,20 @@ // StreamResult> call(StreamParameters params) => // _crudRepository.stream(id: params.id, conditions: params.conditions); // } + +// class StreamQuery +// extends StreamUseCase> { +// final CrudRepository _crudRepository; + +// StreamQuery(this._crudRepository); + +// @override +// FutureOr onStart(StreamParameters? params) { +// if(params == null){ +// throw ClientException('Stream parameters cannot be null.'); +// } +// } + +// @override +// FutureOrResult>> call(StreamParameters? params) => _crudRepository.stream(); +// } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart index f7729c8e..982045c7 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update.dart @@ -14,21 +14,30 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'dart:async'; + import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; import 'package:wyatt_crud_bloc/src/domain/usecases/params/update_parameters.dart'; class Update - extends UseCase, void> { + extends AsyncUseCase, void> { final CrudRepository _crudRepository; Update(this._crudRepository); @override - FutureResult call(UpdateParameters params) => + FutureOr onStart(UpdateParameters? params) { + if(params == null){ + throw ClientException('Update parameters cannot be null.'); + } + } + + @override + FutureOrResult call(UpdateParameters? params) => _crudRepository.update( - params.id, + params!.id, object: params.object, raw: params.raw, ); diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart index 6aab995e..35779703 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/update_all.dart @@ -14,17 +14,26 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +import 'dart:async'; + import 'package:wyatt_architecture/wyatt_architecture.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/object_model.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; class UpdateAll - extends UseCase, void> { + extends AsyncUseCase, void> { final CrudRepository _crudRepository; UpdateAll(this._crudRepository); @override - FutureResult call(Map params) => - _crudRepository.updateAll(params); + FutureOr onStart(Map? params) { + if(params == null){ + throw ClientException('Data cannot be null.'); + } + } + + @override + FutureOrResult call(Map? params) => + _crudRepository.updateAll(params!); } diff --git a/packages/wyatt_crud_bloc/lib/src/domain/usecases/usecases.dart b/packages/wyatt_crud_bloc/lib/src/domain/usecases/usecases.dart index ddfca868..984bbb28 100644 --- a/packages/wyatt_crud_bloc/lib/src/domain/usecases/usecases.dart +++ b/packages/wyatt_crud_bloc/lib/src/domain/usecases/usecases.dart @@ -21,6 +21,6 @@ export 'get.dart'; export 'get_all.dart'; export 'params/params.dart'; export 'query.dart'; -export 'stream.dart'; +export 'stream_query.dart'; export 'update.dart'; export 'update_all.dart';