fix(crud)!: use FutureOrResult extension (close #42)

This commit is contained in:
Hugo Pointcheval 2022-11-24 15:24:59 -05:00
parent 626d951443
commit 3886ef080e
Signed by: hugo
GPG Key ID: A9E8E9615379254F
12 changed files with 108 additions and 40 deletions

View File

@ -30,7 +30,7 @@ class CrudRepositoryImpl<Model extends ObjectModel>
}) : _crudDataSource = crudDataSource; }) : _crudDataSource = crudDataSource;
@override @override
FutureResult<void> create(Model object, {String? id}) => FutureOrResult<void> create(Model object, {String? id}) =>
Result.tryCatchAsync<void, AppException, AppException>( Result.tryCatchAsync<void, AppException, AppException>(
() async { () async {
await _crudDataSource.create(object, id: id); await _crudDataSource.create(object, id: id);
@ -39,21 +39,21 @@ class CrudRepositoryImpl<Model extends ObjectModel>
); );
@override @override
FutureResult<Model?> get(String id) => FutureOrResult<Model?> get(String id) =>
Result.tryCatchAsync<Model?, AppException, AppException>( Result.tryCatchAsync<Model?, AppException, AppException>(
() async => _crudDataSource.get(id), () async => _crudDataSource.get(id),
(error) => error, (error) => error,
); );
@override @override
FutureResult<List<Model?>> getAll() => FutureOrResult<List<Model?>> getAll() =>
Result.tryCatchAsync<List<Model?>, AppException, AppException>( Result.tryCatchAsync<List<Model?>, AppException, AppException>(
() async => _crudDataSource.getAll(), () async => _crudDataSource.getAll(),
(error) => error, (error) => error,
); );
@override @override
FutureResult<void> update( FutureOrResult<void> update(
String id, { String id, {
Model? object, Model? object,
Map<String, dynamic>? raw, Map<String, dynamic>? raw,
@ -64,28 +64,28 @@ class CrudRepositoryImpl<Model extends ObjectModel>
); );
@override @override
FutureResult<void> updateAll(Map<String, Object?> raw) => FutureOrResult<void> updateAll(Map<String, Object?> raw) =>
Result.tryCatchAsync<void, AppException, AppException>( Result.tryCatchAsync<void, AppException, AppException>(
() async => _crudDataSource.updateAll(raw), () async => _crudDataSource.updateAll(raw),
(error) => error, (error) => error,
); );
@override @override
FutureResult<void> delete(String id) => FutureOrResult<void> delete(String id) =>
Result.tryCatchAsync<void, AppException, AppException>( Result.tryCatchAsync<void, AppException, AppException>(
() async => _crudDataSource.delete(id), () async => _crudDataSource.delete(id),
(error) => error, (error) => error,
); );
@override @override
FutureResult<void> deleteAll() => FutureOrResult<void> deleteAll() =>
Result.tryCatchAsync<void, AppException, AppException>( Result.tryCatchAsync<void, AppException, AppException>(
() async => _crudDataSource.deleteAll(), () async => _crudDataSource.deleteAll(),
(error) => error, (error) => error,
); );
@override @override
FutureResult<List<Model?>> query(List<QueryInterface> conditions) => FutureOrResult<List<Model?>> query(List<QueryInterface> conditions) =>
Result.tryCatchAsync<List<Model?>, AppException, AppException>( Result.tryCatchAsync<List<Model?>, AppException, AppException>(
() async => _crudDataSource.query(conditions), () async => _crudDataSource.query(conditions),
(error) => error, (error) => error,

View File

@ -20,18 +20,18 @@ import 'package:wyatt_crud_bloc/src/domain/entities/query.dart';
abstract class CrudRepository<Model extends ObjectModel> abstract class CrudRepository<Model extends ObjectModel>
extends BaseRepository { extends BaseRepository {
FutureResult<void> create(Model object, {String? id}); FutureOrResult<void> create(Model object, {String? id});
FutureResult<Model?> get(String id); FutureOrResult<Model?> get(String id);
FutureResult<List<Model?>> getAll(); FutureOrResult<List<Model?>> getAll();
FutureResult<void> update( FutureOrResult<void> update(
String id, { String id, {
Model? object, Model? object,
Map<String, dynamic>? raw, Map<String, dynamic>? raw,
}); });
FutureResult<void> updateAll(Map<String, Object?> raw); FutureOrResult<void> updateAll(Map<String, Object?> raw);
FutureResult<void> delete(String id); FutureOrResult<void> delete(String id);
FutureResult<void> deleteAll(); FutureOrResult<void> deleteAll();
FutureResult<List<Model?>> query(List<QueryInterface> conditions); FutureOrResult<List<Model?>> query(List<QueryInterface> conditions);
StreamResult<List<Model?>> stream({ StreamResult<List<Model?>> stream({
String? id, String? id,
List<QueryInterface>? conditions, List<QueryInterface>? conditions,

View File

@ -15,15 +15,24 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
import 'dart:async';
import 'package:wyatt_architecture/wyatt_architecture.dart'; 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/object_model.dart';
import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart';
class Create<Model extends ObjectModel> extends UseCase<Model, void> { class Create<Model extends ObjectModel> extends AsyncUseCase<Model, void> {
final CrudRepository<Model> _crudRepository; final CrudRepository<Model> _crudRepository;
Create(this._crudRepository); Create(this._crudRepository);
@override @override
FutureResult<void> call(Model params) => _crudRepository.create(params); FutureOr<void> onStart(Model? params) {
if(params == null){
throw ClientException('$Model cannot be null.');
}
}
@override
FutureOrResult<void> call(Model? params) => _crudRepository.create(params!);
} }

View File

@ -14,15 +14,24 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
import 'dart:async';
import 'package:wyatt_architecture/wyatt_architecture.dart'; 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/object_model.dart';
import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart';
class Delete<Model extends ObjectModel> extends UseCase<String, void> { class Delete<Model extends ObjectModel> extends AsyncUseCase<String, void> {
final CrudRepository<Model> _crudRepository; final CrudRepository<Model> _crudRepository;
Delete(this._crudRepository); Delete(this._crudRepository);
@override @override
FutureResult<void> call(String params) => _crudRepository.delete(params); FutureOr<void> onStart(String? params) {
if(params == null){
throw ClientException('Id cannot be null.');
}
}
@override
FutureOrResult<void> call(String? params) => _crudRepository.delete(params!);
} }

View File

@ -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/entities/object_model.dart';
import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart';
class DeleteAll<Model extends ObjectModel> extends UseCase<void, void> { class DeleteAll<Model extends ObjectModel> extends AsyncUseCase<void, void> {
final CrudRepository<Model> _crudRepository; final CrudRepository<Model> _crudRepository;
DeleteAll(this._crudRepository); DeleteAll(this._crudRepository);
@override @override
FutureResult<void> call(void params) => _crudRepository.deleteAll(); FutureOrResult<void> call(void params) => _crudRepository.deleteAll();
} }

View File

@ -14,15 +14,24 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
import 'dart:async';
import 'package:wyatt_architecture/wyatt_architecture.dart'; 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/object_model.dart';
import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart';
class Get<Model extends ObjectModel> extends UseCase<String, Model?> { class Get<Model extends ObjectModel> extends AsyncUseCase<String, Model?> {
final CrudRepository<Model> _crudRepository; final CrudRepository<Model> _crudRepository;
Get(this._crudRepository); Get(this._crudRepository);
@override @override
FutureResult<Model?> call(String params) => _crudRepository.get(params); FutureOr<void> onStart(String? params) {
if(params == null){
throw ClientException('Id cannot be null.');
}
}
@override
FutureOrResult<Model?> call(String? params) => _crudRepository.get(params!);
} }

View File

@ -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/entities/object_model.dart';
import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart';
class GetAll<Model extends ObjectModel> extends UseCase<void, List<Model?>> { class GetAll<Model extends ObjectModel>
extends AsyncUseCase<void, List<Model?>> {
final CrudRepository<Model> _crudRepository; final CrudRepository<Model> _crudRepository;
GetAll(this._crudRepository); GetAll(this._crudRepository);
@override @override
FutureResult<List<Model?>> call(void params) => _crudRepository.getAll(); FutureOrResult<List<Model?>> call(void params) => _crudRepository.getAll();
} }

View File

@ -14,18 +14,27 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
import 'dart:async';
import 'package:wyatt_architecture/wyatt_architecture.dart'; 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/object_model.dart';
import 'package:wyatt_crud_bloc/src/domain/entities/query.dart'; import 'package:wyatt_crud_bloc/src/domain/entities/query.dart';
import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart';
class Query<Model extends ObjectModel> class Query<Model extends ObjectModel>
extends UseCase<List<QueryInterface>, List<Model?>> { extends AsyncUseCase<List<QueryInterface>, List<Model?>> {
final CrudRepository<Model> _crudRepository; final CrudRepository<Model> _crudRepository;
Query(this._crudRepository); Query(this._crudRepository);
@override @override
FutureResult<List<Model?>> call(List<QueryInterface> params) => FutureOr<void> onStart(List<QueryInterface>? params) {
_crudRepository.query(params); if(params == null){
throw ClientException('List of conditions cannot be null.');
}
}
@override
FutureOrResult<List<Model?>> call(List<QueryInterface>? params) =>
_crudRepository.query(params!);
} }

View File

@ -14,11 +14,7 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
// 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<Model extends ObjectModel> extends UseCase<StreamParameters, List<Model?>> { // class Stream<Model extends ObjectModel> extends UseCase<StreamParameters, List<Model?>> {
// final CrudRepository<Model> _crudRepository; // final CrudRepository<Model> _crudRepository;
@ -29,3 +25,20 @@
// StreamResult<List<Model?>> call(StreamParameters params) => // StreamResult<List<Model?>> call(StreamParameters params) =>
// _crudRepository.stream(id: params.id, conditions: params.conditions); // _crudRepository.stream(id: params.id, conditions: params.conditions);
// } // }
// class StreamQuery<Model extends ObjectModel>
// extends StreamUseCase<StreamParameters, List<Model?>> {
// final CrudRepository<Model> _crudRepository;
// StreamQuery(this._crudRepository);
// @override
// FutureOr<void> onStart(StreamParameters? params) {
// if(params == null){
// throw ClientException('Stream parameters cannot be null.');
// }
// }
// @override
// FutureOrResult<Stream<List<Model?>>> call(StreamParameters? params) => _crudRepository.stream();
// }

View File

@ -14,21 +14,30 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
import 'dart:async';
import 'package:wyatt_architecture/wyatt_architecture.dart'; 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/object_model.dart';
import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart';
import 'package:wyatt_crud_bloc/src/domain/usecases/params/update_parameters.dart'; import 'package:wyatt_crud_bloc/src/domain/usecases/params/update_parameters.dart';
class Update<Model extends ObjectModel> class Update<Model extends ObjectModel>
extends UseCase<UpdateParameters<Model>, void> { extends AsyncUseCase<UpdateParameters<Model>, void> {
final CrudRepository<Model> _crudRepository; final CrudRepository<Model> _crudRepository;
Update(this._crudRepository); Update(this._crudRepository);
@override @override
FutureResult<void> call(UpdateParameters<Model> params) => FutureOr<void> onStart(UpdateParameters<Model>? params) {
if(params == null){
throw ClientException('Update parameters cannot be null.');
}
}
@override
FutureOrResult<void> call(UpdateParameters<Model>? params) =>
_crudRepository.update( _crudRepository.update(
params.id, params!.id,
object: params.object, object: params.object,
raw: params.raw, raw: params.raw,
); );

View File

@ -14,17 +14,26 @@
// You should have received a copy of the GNU General Public License // You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
import 'dart:async';
import 'package:wyatt_architecture/wyatt_architecture.dart'; 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/object_model.dart';
import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart'; import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart';
class UpdateAll<Model extends ObjectModel> class UpdateAll<Model extends ObjectModel>
extends UseCase<Map<String, Object?>, void> { extends AsyncUseCase<Map<String, Object?>, void> {
final CrudRepository<Model> _crudRepository; final CrudRepository<Model> _crudRepository;
UpdateAll(this._crudRepository); UpdateAll(this._crudRepository);
@override @override
FutureResult<void> call(Map<String, Object?> params) => FutureOr<void> onStart(Map<String, Object?>? params) {
_crudRepository.updateAll(params); if(params == null){
throw ClientException('Data cannot be null.');
}
}
@override
FutureOrResult<void> call(Map<String, Object?>? params) =>
_crudRepository.updateAll(params!);
} }

View File

@ -21,6 +21,6 @@ export 'get.dart';
export 'get_all.dart'; export 'get_all.dart';
export 'params/params.dart'; export 'params/params.dart';
export 'query.dart'; export 'query.dart';
export 'stream.dart'; export 'stream_query.dart';
export 'update.dart'; export 'update.dart';
export 'update_all.dart'; export 'update_all.dart';