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

View File

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

View File

@ -15,15 +15,24 @@
// You should have received a copy of the GNU General Public License
// 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_crud_bloc/src/domain/entities/object_model.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;
Create(this._crudRepository);
@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
// 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_crud_bloc/src/domain/entities/object_model.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;
Delete(this._crudRepository);
@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/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;
DeleteAll(this._crudRepository);
@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
// 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_crud_bloc/src/domain/entities/object_model.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;
Get(this._crudRepository);
@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/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;
GetAll(this._crudRepository);
@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
// 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_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<Model extends ObjectModel>
extends UseCase<List<QueryInterface>, List<Model?>> {
extends AsyncUseCase<List<QueryInterface>, List<Model?>> {
final CrudRepository<Model> _crudRepository;
Query(this._crudRepository);
@override
FutureResult<List<Model?>> call(List<QueryInterface> params) =>
_crudRepository.query(params);
FutureOr<void> onStart(List<QueryInterface>? 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
// 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?>> {
// final CrudRepository<Model> _crudRepository;
@ -29,3 +25,20 @@
// StreamResult<List<Model?>> call(StreamParameters params) =>
// _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
// 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_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<Model extends ObjectModel>
extends UseCase<UpdateParameters<Model>, void> {
extends AsyncUseCase<UpdateParameters<Model>, void> {
final CrudRepository<Model> _crudRepository;
Update(this._crudRepository);
@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(
params.id,
params!.id,
object: params.object,
raw: params.raw,
);

View File

@ -14,17 +14,26 @@
// You should have received a copy of the GNU General Public License
// 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_crud_bloc/src/domain/entities/object_model.dart';
import 'package:wyatt_crud_bloc/src/domain/repositories/crud_repository.dart';
class UpdateAll<Model extends ObjectModel>
extends UseCase<Map<String, Object?>, void> {
extends AsyncUseCase<Map<String, Object?>, void> {
final CrudRepository<Model> _crudRepository;
UpdateAll(this._crudRepository);
@override
FutureResult<void> call(Map<String, Object?> params) =>
_crudRepository.updateAll(params);
FutureOr<void> onStart(Map<String, Object?>? 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 'params/params.dart';
export 'query.dart';
export 'stream.dart';
export 'stream_query.dart';
export 'update.dart';
export 'update_all.dart';