From 35aa6bb7c2af6fc8af26656fc7e8da08f9b27c79 Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Tue, 8 Nov 2022 20:07:55 -0500 Subject: [PATCH] feat(arch): add exceptions, datasources, repositories, and usecases --- .../lib/src/{package.dart => core/core.dart} | 2 +- .../lib/src/core/exceptions/exceptions.dart | 40 +++++++++++++++++++ .../src/domain/data_sources/data_sources.dart | 19 +++++++++ .../src/domain/data_sources/local/local.dart | 17 ++++++++ .../domain/data_sources/remote/remote.dart | 17 ++++++++ .../lib/src/domain/domain.dart | 20 ++++++++++ .../lib/src/domain/entities/entities.dart | 17 ++++++++ .../lib/src/domain/entities/entity.dart | 4 +- .../domain/repositories/base_repository.dart | 17 ++++++++ .../src/domain/repositories/repositories.dart | 17 ++++++++ .../lib/src/domain/usecases/no_param.dart | 21 ++++++++++ .../lib/src/domain/usecases/usecase.dart | 25 ++++++++++++ .../lib/src/domain/usecases/usecases.dart | 17 ++++++++ packages/wyatt_architecture/lib/src/src.dart | 9 +++-- 14 files changed, 236 insertions(+), 6 deletions(-) rename packages/wyatt_architecture/lib/src/{package.dart => core/core.dart} (94%) create mode 100644 packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart create mode 100644 packages/wyatt_architecture/lib/src/domain/data_sources/data_sources.dart create mode 100644 packages/wyatt_architecture/lib/src/domain/data_sources/local/local.dart create mode 100644 packages/wyatt_architecture/lib/src/domain/data_sources/remote/remote.dart create mode 100644 packages/wyatt_architecture/lib/src/domain/domain.dart create mode 100644 packages/wyatt_architecture/lib/src/domain/entities/entities.dart create mode 100644 packages/wyatt_architecture/lib/src/domain/repositories/base_repository.dart create mode 100644 packages/wyatt_architecture/lib/src/domain/repositories/repositories.dart create mode 100644 packages/wyatt_architecture/lib/src/domain/usecases/no_param.dart create mode 100644 packages/wyatt_architecture/lib/src/domain/usecases/usecase.dart create mode 100644 packages/wyatt_architecture/lib/src/domain/usecases/usecases.dart diff --git a/packages/wyatt_architecture/lib/src/package.dart b/packages/wyatt_architecture/lib/src/core/core.dart similarity index 94% rename from packages/wyatt_architecture/lib/src/package.dart rename to packages/wyatt_architecture/lib/src/core/core.dart index 95c31e2f..122e2dfa 100644 --- a/packages/wyatt_architecture/lib/src/package.dart +++ b/packages/wyatt_architecture/lib/src/core/core.dart @@ -14,4 +14,4 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -String wyatt() => "wyatt_architecture"; \ No newline at end of file +export 'exceptions/exceptions.dart'; diff --git a/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart b/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart new file mode 100644 index 00000000..96a3bf8c --- /dev/null +++ b/packages/wyatt_architecture/lib/src/core/exceptions/exceptions.dart @@ -0,0 +1,40 @@ +// Copyright (C) 2022 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +import 'package:wyatt_type_utils/wyatt_type_utils.dart'; + +abstract class AppException implements Exception { + final String? message; + + AppException([this.message]); + + @override + String toString() { + if (message.isNotNullOrEmpty) { + return '$runtimeType: $message'; + } else { + return '$runtimeType: An exception occured'; + } + } +} + +class ClientException extends AppException { + ClientException([super.message]); +} + +class ServerException extends AppException { + ServerException([super.message]); +} diff --git a/packages/wyatt_architecture/lib/src/domain/data_sources/data_sources.dart b/packages/wyatt_architecture/lib/src/domain/data_sources/data_sources.dart new file mode 100644 index 00000000..c226b67b --- /dev/null +++ b/packages/wyatt_architecture/lib/src/domain/data_sources/data_sources.dart @@ -0,0 +1,19 @@ +// Copyright (C) 2022 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +export 'base_data_source.dart'; +export 'local/local.dart'; +export 'remote/remote.dart'; diff --git a/packages/wyatt_architecture/lib/src/domain/data_sources/local/local.dart b/packages/wyatt_architecture/lib/src/domain/data_sources/local/local.dart new file mode 100644 index 00000000..08fce718 --- /dev/null +++ b/packages/wyatt_architecture/lib/src/domain/data_sources/local/local.dart @@ -0,0 +1,17 @@ +// Copyright (C) 2022 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +export 'base_local_data_source.dart'; diff --git a/packages/wyatt_architecture/lib/src/domain/data_sources/remote/remote.dart b/packages/wyatt_architecture/lib/src/domain/data_sources/remote/remote.dart new file mode 100644 index 00000000..81d8f125 --- /dev/null +++ b/packages/wyatt_architecture/lib/src/domain/data_sources/remote/remote.dart @@ -0,0 +1,17 @@ +// Copyright (C) 2022 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +export 'base_remote_data_source.dart'; diff --git a/packages/wyatt_architecture/lib/src/domain/domain.dart b/packages/wyatt_architecture/lib/src/domain/domain.dart new file mode 100644 index 00000000..35c41307 --- /dev/null +++ b/packages/wyatt_architecture/lib/src/domain/domain.dart @@ -0,0 +1,20 @@ +// Copyright (C) 2022 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +export 'data_sources/data_sources.dart'; +export 'entities/entities.dart'; +export 'repositories/repositories.dart'; +export 'usecases/usecases.dart'; diff --git a/packages/wyatt_architecture/lib/src/domain/entities/entities.dart b/packages/wyatt_architecture/lib/src/domain/entities/entities.dart new file mode 100644 index 00000000..47ef61fa --- /dev/null +++ b/packages/wyatt_architecture/lib/src/domain/entities/entities.dart @@ -0,0 +1,17 @@ +// Copyright (C) 2022 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +export 'entity.dart'; diff --git a/packages/wyatt_architecture/lib/src/domain/entities/entity.dart b/packages/wyatt_architecture/lib/src/domain/entities/entity.dart index cd66df2b..67df1106 100644 --- a/packages/wyatt_architecture/lib/src/domain/entities/entity.dart +++ b/packages/wyatt_architecture/lib/src/domain/entities/entity.dart @@ -14,4 +14,6 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -abstract class Entity {} +abstract class Entity { + const Entity(); +} diff --git a/packages/wyatt_architecture/lib/src/domain/repositories/base_repository.dart b/packages/wyatt_architecture/lib/src/domain/repositories/base_repository.dart new file mode 100644 index 00000000..f6127411 --- /dev/null +++ b/packages/wyatt_architecture/lib/src/domain/repositories/base_repository.dart @@ -0,0 +1,17 @@ +// Copyright (C) 2022 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +class BaseRepository {} diff --git a/packages/wyatt_architecture/lib/src/domain/repositories/repositories.dart b/packages/wyatt_architecture/lib/src/domain/repositories/repositories.dart new file mode 100644 index 00000000..bc97c14e --- /dev/null +++ b/packages/wyatt_architecture/lib/src/domain/repositories/repositories.dart @@ -0,0 +1,17 @@ +// Copyright (C) 2022 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +export 'base_repository.dart'; diff --git a/packages/wyatt_architecture/lib/src/domain/usecases/no_param.dart b/packages/wyatt_architecture/lib/src/domain/usecases/no_param.dart new file mode 100644 index 00000000..7452af67 --- /dev/null +++ b/packages/wyatt_architecture/lib/src/domain/usecases/no_param.dart @@ -0,0 +1,21 @@ +// Copyright (C) 2022 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +import 'package:wyatt_architecture/src/domain/entities/entity.dart'; + +class NoParam extends Entity { + const NoParam(); +} diff --git a/packages/wyatt_architecture/lib/src/domain/usecases/usecase.dart b/packages/wyatt_architecture/lib/src/domain/usecases/usecase.dart new file mode 100644 index 00000000..417695ca --- /dev/null +++ b/packages/wyatt_architecture/lib/src/domain/usecases/usecase.dart @@ -0,0 +1,25 @@ +// Copyright (C) 2022 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +import 'package:wyatt_architecture/src/core/exceptions/exceptions.dart'; +import 'package:wyatt_type_utils/wyatt_type_utils.dart'; + +typedef FutureResult = Future>; + +// ignore: one_member_abstracts +abstract class UseCase { + FutureResult call(Parameters params); +} diff --git a/packages/wyatt_architecture/lib/src/domain/usecases/usecases.dart b/packages/wyatt_architecture/lib/src/domain/usecases/usecases.dart new file mode 100644 index 00000000..31b702da --- /dev/null +++ b/packages/wyatt_architecture/lib/src/domain/usecases/usecases.dart @@ -0,0 +1,17 @@ +// Copyright (C) 2022 WYATT GROUP +// Please see the AUTHORS file for details. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +export 'usecase.dart'; diff --git a/packages/wyatt_architecture/lib/src/src.dart b/packages/wyatt_architecture/lib/src/src.dart index 72924ab1..50ef204e 100644 --- a/packages/wyatt_architecture/lib/src/src.dart +++ b/packages/wyatt_architecture/lib/src/src.dart @@ -1,17 +1,18 @@ // Copyright (C) 2022 WYATT GROUP // Please see the AUTHORS file for details. -// +// // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // any later version. -// +// // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. -// +// // You should have received a copy of the GNU General Public License // along with this program. If not, see . -export 'package.dart'; \ No newline at end of file +export 'core/core.dart'; +export 'domain/domain.dart';