From 1492745e54faebcfc2ad869d7821c14d25b01118 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Sun, 18 Feb 2024 23:00:01 +0100 Subject: [PATCH] docs(wyatt_architecture): update readme --- packages/wyatt_architecture/README.md | 58 ++++++++++++++++++--------- 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/packages/wyatt_architecture/README.md b/packages/wyatt_architecture/README.md index e077fbec..657355cb 100644 --- a/packages/wyatt_architecture/README.md +++ b/packages/wyatt_architecture/README.md @@ -50,10 +50,10 @@ class Photo extends Entity { } ``` -Then create the data sources by extending `BaseLocalDataSource` or `BaseRemoteDataSource` depending the type of data source. +Then create the data sources by extending `BaseDataSource` : ```dart -abstract class PhotoRemoteDataSource extends BaseRemoteDataSource { +abstract class PhotoRemoteDataSource extends BaseDataSource { Future getPhoto(int id); Future> getAllPhotos({int? start, int? limit}); } @@ -78,14 +78,31 @@ Several use cases are supported : * Classic usecase : ```dart -class Test extends AsyncUseCase>> { +class RetrieveAllAlbums extends AsyncUseCase> { + const RetrieveAllAlbums(this._photoRepository); + final PhotoRepository _photoRepository; @override - FuturOrResult>> call(QueryParameters? params) { - final photos = _photoRepository.getAllPhotos( + FutureOrResult> execute(QueryParameters params) { + final albums = _photoRepository.getAllAlbums( start: params.start, limit: params.limit, ); + return albums; + } +} +``` + +* No parameter usecase : + +```dart +class DisplayFavorites extends NoParamsAsyncUseCase> { + const DisplayFavorites(this._photoRepository); + final PhotoRepository _photoRepository; + + @override + FutureOrResult> execute() { + final photos = _photoRepository.getAllPhotosFromFavorites(); return photos; } } @@ -94,48 +111,51 @@ class Test extends AsyncUseCase>> { You can add alternatve scenarios and check pre/post conditions using our extensions : ```dart -class SearchPhotos extends AsyncUseCase>> { +class RetrieveAllAlbums extends AsyncUseCase> { + const RetrieveAllAlbums(this._photoRepository); + final PhotoRepository _photoRepository; @override - FutureOrResult>> call(QueryParameters? params) { - final photos = _photoRepository.getAllPhotos( + FutureOrResult> execute(QueryParameters params) { + final albums = _photoRepository.getAllAlbums( start: params.start, limit: params.limit, ); - return photos; + return albums; } @override FutureOr onStart(QueryParameters? params) { - if(params.start == null || params.limit == null){ - throw ClientException('Préconndition non valides'); + if (params.start < 0) { + throw const ClientException('Invalid start parameter'); } } - } ``` -You can implement error scenarios overriding `onError` , or check postconditions by overriding `onComplete` . +You can implement error scenarios overriding `onException` , or check postconditions by overriding `onComplete` . * Stream usecase : ```dart -class SearchPhotos extends StreamUseCase>> { +class RetrieveAllAlbums extends AsyncUseCase> { + const RetrieveAllAlbums(this._photoRepository); + final PhotoRepository _photoRepository; @override - FutureOrResult>>> call(QueryParameters? params) { - final photos = _photoRepository.getAllPhotos( + FutureOrResult> execute(QueryParameters params) { + final albums = _photoRepository.getAllAlbums( start: params.start, limit: params.limit, ); - return photos; + return albums; } + @override + FutureOrResult> onException(Object e) => Ok([]); } ``` -On this case, observers allow you to add alternative scenarios when data changed, overriding `onData` or `onDone` . - Please note that to use handlers, call `call` method and not `execute` . > In fact, here we need a new parameter object, so let's create it: