From 94513867f601cf9691fe7fe2c192c6871bb58cf9 Mon Sep 17 00:00:00 2001 From: "mr.mojtaba" Date: Sun, 27 Jul 2025 15:13:37 +0330 Subject: [PATCH] chore : delete auth package because each project has different auth , must be separated auth logic --- lib/infrastructure/di/di.dart | 3 +- lib/infrastructure/service/auth_service.dart | 33 ----- .../service/token_storage_service.dart | 0 lib/main.dart | 9 +- .../presentation/pages/modules/logic.dart | 3 +- .../presentation/pages/modules/view.dart | 17 ++- lib/presentation/pages/splash/logic.dart | 6 +- lib/presentation/routes/app_pages.dart | 7 +- lib/presentation/routes/app_paths.dart | 1 + .../routes/auth_route_resolver_impl.dart | 24 ++++ packages/auth/.gitignore | 31 ---- packages/auth/.metadata | 10 -- packages/auth/CHANGELOG.md | 3 - packages/auth/LICENSE | 1 - packages/auth/README.md | 39 ----- packages/auth/analysis_options.yaml | 4 - packages/auth/build.yaml | 6 - packages/auth/lib/auth.dart | 8 -- packages/auth/lib/data/common/constant.dart | 14 -- .../lib/data/common/dio_error_handler.dart | 58 -------- .../auth/lib/data/common/dio_manager.dart | 50 ------- packages/auth/lib/data/di/auth_di.dart | 62 -------- .../data/repositories/auth_repository.dart | 21 --- .../lib/data/services/auth_middelware.dart | 21 --- .../auth/lib/presentation/routes/pages.dart | 32 ----- .../auth/lib/presentation/routes/paths.dart | 8 -- packages/auth/pubspec.yaml | 35 ----- .../chicken/lib/data/common/dio_manager.dart | 33 ----- packages/chicken/lib/data/di/chicken_di.dart | 6 +- .../pages/buy_in_province_all/logic.dart | 1 - .../pages/buy_in_province_waiting/logic.dart | 1 - .../pages/buy_out_of_province/logic.dart | 2 +- .../lib/presentation/pages/home/logic.dart | 2 +- .../lib/presentation/pages/profile/logic.dart | 2 +- .../lib/presentation/pages/profile/view.dart | 5 +- .../lib/presentation/pages/root/logic.dart | 2 - .../lib/presentation/pages/sale/logic.dart | 2 +- .../pages/sales_in_province/logic.dart | 2 +- .../pages/sales_out_of_province/logic.dart | 2 +- .../sales_out_of_province_buyers/logic.dart | 2 +- .../logic.dart | 2 +- .../pages/segmentation/logic.dart | 2 +- .../lib/presentation/routes/pages.dart | 1 - .../lib/presentation/routes/routes.dart | 1 + .../chicken/lib/presentation/utils/utils.dart | 12 +- packages/chicken/pubspec.yaml | 3 +- packages/core/lib/core.dart | 6 +- .../model}/local/module/module_model.dart | 2 +- .../local/module/module_model.freezed.dart | 133 +++++++++++++++++- .../local/user_local/user_local_model.dart | 0 .../local/user_local/user_local_model.g.dart | 0 packages/core/lib/data/model/model.dart | 3 + .../pagination_model.freezed.dart | 133 +++++++++++++++++- .../login_request/login_request_model.dart | 0 .../login_request_model.freezed.dart | 133 +++++++++++++++++- .../login_request/login_request_model.g.dart | 8 +- .../response/auth/auth_response_model.dart | 0 .../auth/auth_response_model.freezed.dart | 133 +++++++++++++++++- .../response/auth/auth_response_model.g.dart | 4 +- .../captcha/captcha_response_model.dart | 0 .../captcha_response_model.freezed.dart | 133 +++++++++++++++++- .../captcha/captcha_response_model.g.dart | 16 +-- .../response/user_info/user_info_model.dart | 0 .../user_info/user_info_model.freezed.dart | 133 +++++++++++++++++- .../response/user_info/user_info_model.g.dart | 8 +- .../user_profile_model.dart | 0 .../user_profile_model.freezed.dart | 133 +++++++++++++++++- .../user_profile_model.g.dart | 24 ++-- .../lib/data/services/auth_middelware.dart | 23 +++ packages/core/lib/data/services/services.dart | 2 + .../data/services/token_storage_service.dart | 4 +- .../{auth => core}/lib/hive_registrar.g.dart | 2 +- packages/core/lib/injection/di.dart | 9 +- .../core/lib/routing/auth_route_resolver.dart | 6 + packages/core/lib/utils/network/network.dart | 3 +- .../lib/utils/network}/safe_call.dart | 0 .../data/repositories/auth_repository.dart | 18 +++ .../repositories/auth_repository_imp.dart | 21 +-- .../lib/presentation/pages/auth/logic.dart | 35 ++--- .../lib/presentation/pages/auth/view.dart | 13 +- .../lib/presentation/routes/app_pages.dart | 13 +- .../lib/presentation/routes/app_routes.dart | 8 +- .../presentation/widget/captcha/logic.dart | 10 +- .../lib/presentation/widget/captcha/view.dart | 4 +- .../lib/presentation/widget/clear_button.dart | 0 .../lib/presentation/widget/logo_widget.dart | 0 packages/inspection/pubspec.lock | 7 - packages/inspection/pubspec.yaml | 2 - .../lib/presentation/routes/app_pages.dart | 1 - .../lib/presentation/routes/app_routes.dart | 1 + packages/livestock/pubspec.yaml | 3 +- pubspec.lock | 37 ++--- pubspec.yaml | 5 - 93 files changed, 1140 insertions(+), 678 deletions(-) delete mode 100644 lib/infrastructure/service/auth_service.dart create mode 100644 lib/infrastructure/service/token_storage_service.dart rename {packages/auth/lib => lib}/presentation/pages/modules/logic.dart (78%) rename {packages/auth/lib => lib}/presentation/pages/modules/view.dart (68%) create mode 100644 lib/presentation/routes/auth_route_resolver_impl.dart delete mode 100644 packages/auth/.gitignore delete mode 100644 packages/auth/.metadata delete mode 100644 packages/auth/CHANGELOG.md delete mode 100644 packages/auth/LICENSE delete mode 100644 packages/auth/README.md delete mode 100644 packages/auth/analysis_options.yaml delete mode 100644 packages/auth/build.yaml delete mode 100644 packages/auth/lib/auth.dart delete mode 100644 packages/auth/lib/data/common/constant.dart delete mode 100644 packages/auth/lib/data/common/dio_error_handler.dart delete mode 100644 packages/auth/lib/data/common/dio_manager.dart delete mode 100644 packages/auth/lib/data/di/auth_di.dart delete mode 100644 packages/auth/lib/data/repositories/auth_repository.dart delete mode 100644 packages/auth/lib/data/services/auth_middelware.dart delete mode 100644 packages/auth/lib/presentation/routes/pages.dart delete mode 100644 packages/auth/lib/presentation/routes/paths.dart delete mode 100644 packages/auth/pubspec.yaml delete mode 100644 packages/chicken/lib/data/common/dio_manager.dart rename packages/{auth/lib/data/models => core/lib/data/model}/local/module/module_model.dart (78%) rename packages/{auth/lib/data/models => core/lib/data/model}/local/module/module_model.freezed.dart (58%) rename packages/{auth/lib/data/models => core/lib/data/model}/local/user_local/user_local_model.dart (100%) rename packages/{auth/lib/data/models => core/lib/data/model}/local/user_local/user_local_model.g.dart (100%) create mode 100644 packages/core/lib/data/model/model.dart rename packages/{auth/lib/data/models => core/lib/data/model}/request/login_request/login_request_model.dart (100%) rename packages/{auth/lib/data/models => core/lib/data/model}/request/login_request/login_request_model.freezed.dart (63%) rename packages/{auth/lib/data/models => core/lib/data/model}/request/login_request/login_request_model.g.dart (77%) rename packages/{auth/lib/data/models => core/lib/data/model}/response/auth/auth_response_model.dart (100%) rename packages/{auth/lib/data/models => core/lib/data/model}/response/auth/auth_response_model.freezed.dart (61%) rename packages/{auth/lib/data/models => core/lib/data/model}/response/auth/auth_response_model.g.dart (88%) rename packages/{auth/lib/data/models => core/lib/data/model}/response/captcha/captcha_response_model.dart (100%) rename packages/{auth/lib/data/models => core/lib/data/model}/response/captcha/captcha_response_model.freezed.dart (64%) rename packages/{auth/lib/data/models => core/lib/data/model}/response/captcha/captcha_response_model.g.dart (59%) rename packages/{auth/lib/data/models => core/lib/data/model}/response/user_info/user_info_model.dart (100%) rename packages/{auth/lib/data/models => core/lib/data/model}/response/user_info/user_info_model.freezed.dart (62%) rename packages/{auth/lib/data/models => core/lib/data/model}/response/user_info/user_info_model.g.dart (80%) rename packages/{auth/lib/data/models => core/lib/data/model}/response/user_profile_model/user_profile_model.dart (100%) rename packages/{auth/lib/data/models => core/lib/data/model}/response/user_profile_model/user_profile_model.freezed.dart (73%) rename packages/{auth/lib/data/models => core/lib/data/model}/response/user_profile_model/user_profile_model.g.dart (69%) create mode 100644 packages/core/lib/data/services/auth_middelware.dart create mode 100644 packages/core/lib/data/services/services.dart rename packages/{auth => core}/lib/data/services/token_storage_service.dart (95%) rename packages/{auth => core}/lib/hive_registrar.g.dart (84%) create mode 100644 packages/core/lib/routing/auth_route_resolver.dart rename packages/{auth/lib/data/utils => core/lib/utils/network}/safe_call.dart (100%) create mode 100644 packages/inspection/lib/data/repositories/auth_repository.dart rename packages/{auth => inspection}/lib/data/repositories/auth_repository_imp.dart (74%) rename packages/{auth => inspection}/lib/presentation/pages/auth/logic.dart (80%) rename packages/{auth => inspection}/lib/presentation/pages/auth/view.dart (98%) rename packages/{auth => inspection}/lib/presentation/widget/captcha/logic.dart (69%) rename packages/{auth => inspection}/lib/presentation/widget/captcha/view.dart (95%) rename packages/{auth => inspection}/lib/presentation/widget/clear_button.dart (100%) rename packages/{auth => inspection}/lib/presentation/widget/logo_widget.dart (100%) diff --git a/lib/infrastructure/di/di.dart b/lib/infrastructure/di/di.dart index c1aebef..c692350 100644 --- a/lib/infrastructure/di/di.dart +++ b/lib/infrastructure/di/di.dart @@ -1,4 +1,4 @@ -import 'package:rasadyar_auth/auth.dart'; + import 'package:rasadyar_chicken/data/di/chicken_di.dart'; import 'package:rasadyar_core/core.dart'; @@ -6,7 +6,6 @@ final di = GetIt.instance; Future setupPreInjection() async { await setupAllCoreProvider(); - await setupAuthDI(); di.registerSingleton( DioRemote(baseUrl: 'https://everestacademy.ir/'), instanceName: 'baseRemote', diff --git a/lib/infrastructure/service/auth_service.dart b/lib/infrastructure/service/auth_service.dart deleted file mode 100644 index 6ad04fa..0000000 --- a/lib/infrastructure/service/auth_service.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:rasadyar_app/presentation/routes/app_pages.dart'; -import 'package:rasadyar_auth/data/models/local/module/module_model.dart'; -import 'package:rasadyar_auth/data/services/token_storage_service.dart'; -import 'package:rasadyar_core/core.dart'; -import 'package:rasadyar_inspection/inspection.dart'; -import 'package:rasadyar_livestock/presentation/routes/app_pages.dart'; - -class AuthService extends GetxService { - var tokenService = Get.find(); - RxBool accessRes = false.obs; - RxBool refAccessRes = false.obs; - - @override - void onInit() { - super.onInit(); - - ever(tokenService.accessToken, (callback) { - accessRes.value = (callback != null); - }); - - ever(tokenService.refreshToken, (callback) { - refAccessRes.value = (callback != null); - }); - - everAll([accessRes, refAccessRes], (_) { - if (accessRes.value && refAccessRes.value) { - var targetPage = getTargetPage(tokenService.appModule.value); - Get.offAllNamed(targetPage); - } - }); - } - -} diff --git a/lib/infrastructure/service/token_storage_service.dart b/lib/infrastructure/service/token_storage_service.dart new file mode 100644 index 0000000..e69de29 diff --git a/lib/main.dart b/lib/main.dart index 3fdd903..645b2a7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,22 +1,19 @@ import 'package:flutter/material.dart'; import 'package:rasadyar_app/infrastructure/service/app_navigation_observer.dart'; import 'package:rasadyar_app/presentation/routes/app_pages.dart'; -import 'package:rasadyar_auth/auth.dart'; -import 'package:rasadyar_auth/data/services/token_storage_service.dart'; import 'package:rasadyar_core/core.dart'; - import 'infrastructure/di/di.dart'; -import 'infrastructure/service/auth_service.dart'; + Future main() async { WidgetsFlutterBinding.ensureInitialized(); - await setupPreInjection(); + await setupPreInjection(); Get.put(TokenStorageService()); await Get.find().init(); + Get.put(AuthMiddleware()); - Get.put(AuthService()); runApp(MyApp()); // runApp(DevicePreview(builder: (context) => ForDevicePreview(),)); diff --git a/packages/auth/lib/presentation/pages/modules/logic.dart b/lib/presentation/pages/modules/logic.dart similarity index 78% rename from packages/auth/lib/presentation/pages/modules/logic.dart rename to lib/presentation/pages/modules/logic.dart index 56637e5..628b7a8 100644 --- a/packages/auth/lib/presentation/pages/modules/logic.dart +++ b/lib/presentation/pages/modules/logic.dart @@ -1,5 +1,4 @@ -import 'package:rasadyar_auth/data/models/local/module/module_model.dart'; -import 'package:rasadyar_auth/data/models/local/user_local/user_local_model.dart'; + import 'package:rasadyar_core/core.dart'; class ModulesLogic extends GetxController { diff --git a/packages/auth/lib/presentation/pages/modules/view.dart b/lib/presentation/pages/modules/view.dart similarity index 68% rename from packages/auth/lib/presentation/pages/modules/view.dart rename to lib/presentation/pages/modules/view.dart index e3ebe32..464b741 100644 --- a/packages/auth/lib/presentation/pages/modules/view.dart +++ b/lib/presentation/pages/modules/view.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/presentation/routes/pages.dart'; import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_inspection/inspection.dart'; import 'logic.dart'; @@ -11,10 +11,7 @@ class ModulesPage extends GetView { Widget build(BuildContext context) { return Scaffold( appBar: AppBar( - title: Text( - 'انتخاب سامانه', - style: AppFonts.yekan18.copyWith(color: Colors.white), - ), + title: Text('انتخاب سامانه', style: AppFonts.yekan18.copyWith(color: Colors.white)), centerTitle: true, backgroundColor: AppColor.blueNormal, ), @@ -28,7 +25,15 @@ class ModulesPage extends GetView { icon: module.icon, onTap: () { controller.selectedIndex.value = index; - Get.toNamed(AuthPaths.auth, arguments: module.module); + switch (module.module) { + case Module.inspection: + Get.toNamed(InspectionRoutes.init); + break; + case Module.liveStocks: + case Module.chicken: + Get.toNamed(InspectionRoutes.init); + break; + } }, ); }, diff --git a/lib/presentation/pages/splash/logic.dart b/lib/presentation/pages/splash/logic.dart index 60bcc52..1b62220 100644 --- a/lib/presentation/pages/splash/logic.dart +++ b/lib/presentation/pages/splash/logic.dart @@ -4,10 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:rasadyar_app/data/model/app_info_model.dart'; import 'package:rasadyar_app/presentation/routes/app_pages.dart'; -import 'package:rasadyar_auth/data/services/token_storage_service.dart'; import 'package:rasadyar_core/core.dart'; -import 'package:rasadyar_inspection/inspection.dart'; -import 'package:rasadyar_inspection/presentation/routes/app_routes.dart'; class SplashLogic extends GetxController with GetTickerProviderStateMixin { late final AnimationController scaleController; @@ -158,7 +155,7 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin { final module = tokenService.appModule.value; final target = getTargetPage(module); - Get.offAndToNamed(InspectionRoutes.init); + Get.offAndToNamed(target); } catch (e, st) { debugPrint("onReady error: $e\n$st"); } @@ -227,7 +224,6 @@ class SplashLogic extends GetxController with GetTickerProviderStateMixin { if (success) { _updateFilePath.value = filePath; - } onUpdateDownload.value = false; diff --git a/lib/presentation/routes/app_pages.dart b/lib/presentation/routes/app_pages.dart index 50b39ac..2b52dad 100644 --- a/lib/presentation/routes/app_pages.dart +++ b/lib/presentation/routes/app_pages.dart @@ -1,14 +1,11 @@ import 'package:rasadyar_app/presentation/pages/splash/logic.dart'; import 'package:rasadyar_app/presentation/pages/splash/view.dart'; import 'package:rasadyar_app/presentation/pages/system_design/system_design.dart'; -import 'package:rasadyar_auth/data/models/local/user_local/user_local_model.dart'; -import 'package:rasadyar_auth/presentation/routes/pages.dart'; import 'package:rasadyar_chicken/chicken.dart'; import 'package:rasadyar_core/core.dart'; import 'package:rasadyar_inspection/inspection.dart'; import 'package:rasadyar_livestock/presentation/routes/app_pages.dart'; - part 'app_paths.dart'; sealed class AppPages { @@ -26,7 +23,7 @@ sealed class AppPages { ), ...InspectionPages.pages, - ...AuthPages.pages, + ...LiveStockPages.pages, ...ChickenPages.pages, ]; @@ -41,6 +38,6 @@ String getTargetPage(Module? value) { case Module.chicken: return ChickenRoutes.init; default: - return InspectionRoutes.init; + return AppPaths.moduleList; } } diff --git a/lib/presentation/routes/app_paths.dart b/lib/presentation/routes/app_paths.dart index cd31b8f..2003dcd 100644 --- a/lib/presentation/routes/app_paths.dart +++ b/lib/presentation/routes/app_paths.dart @@ -4,5 +4,6 @@ sealed class AppPaths { AppPaths._(); static const String splash = '/splash'; + static const String moduleList = '/moduleList'; static const String systemDesignPage = '/systemDesignPage'; } diff --git a/lib/presentation/routes/auth_route_resolver_impl.dart b/lib/presentation/routes/auth_route_resolver_impl.dart new file mode 100644 index 0000000..c932919 --- /dev/null +++ b/lib/presentation/routes/auth_route_resolver_impl.dart @@ -0,0 +1,24 @@ +import 'package:rasadyar_app/presentation/routes/app_pages.dart'; +import 'package:rasadyar_chicken/presentation/routes/routes.dart'; +import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_inspection/inspection.dart'; +import 'package:rasadyar_livestock/presentation/routes/app_pages.dart'; + +class AppAuthRouteResolver implements AuthRouteResolver { + @override + String getAuthRouteForModule(Module module) { + switch (module) { + case Module.inspection: + return InspectionRoutes.auth; + case Module.liveStocks: + return LiveStockRoutes.auth; + case Module.chicken: + return ChickenRoutes.auth; + default: + throw UnimplementedError('No auth route for module: $module'); + } + } + + @override + String getFallbackRoute() => AppPaths.moduleList; +} diff --git a/packages/auth/.gitignore b/packages/auth/.gitignore deleted file mode 100644 index eb6c05c..0000000 --- a/packages/auth/.gitignore +++ /dev/null @@ -1,31 +0,0 @@ -# Miscellaneous -*.class -*.log -*.pyc -*.swp -.DS_Store -.atom/ -.buildlog/ -.history -.svn/ -migrate_working_dir/ - -# IntelliJ related -*.iml -*.ipr -*.iws -.idea/ - -# The .vscode folder contains launch configuration and tasks you configure in -# VS Code which you may wish to be included in version control, so this line -# is commented out by default. -#.vscode/ - -# Flutter/Dart/Pub related -# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. -/pubspec.lock -**/doc/api/ -.dart_tool/ -.flutter-plugins -.flutter-plugins-dependencies -build/ diff --git a/packages/auth/.metadata b/packages/auth/.metadata deleted file mode 100644 index dfbc19f..0000000 --- a/packages/auth/.metadata +++ /dev/null @@ -1,10 +0,0 @@ -# This file tracks properties of this Flutter project. -# Used by Flutter tool to assess capabilities and perform upgrades etc. -# -# This file should be version controlled and should not be manually edited. - -version: - revision: "ea121f8859e4b13e47a8f845e4586164519588bc" - channel: "stable" - -project_type: package diff --git a/packages/auth/CHANGELOG.md b/packages/auth/CHANGELOG.md deleted file mode 100644 index 41cc7d8..0000000 --- a/packages/auth/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ -## 0.0.1 - -* TODO: Describe initial release. diff --git a/packages/auth/LICENSE b/packages/auth/LICENSE deleted file mode 100644 index ba75c69..0000000 --- a/packages/auth/LICENSE +++ /dev/null @@ -1 +0,0 @@ -TODO: Add your license here. diff --git a/packages/auth/README.md b/packages/auth/README.md deleted file mode 100644 index 4a260d8..0000000 --- a/packages/auth/README.md +++ /dev/null @@ -1,39 +0,0 @@ - - -TODO: Put a short description of the package here that helps potential users -know whether this package might be useful for them. - -## Features - -TODO: List what your package can do. Maybe include images, gifs, or videos. - -## Getting started - -TODO: List prerequisites and provide or point to information on how to -start using the package. - -## Usage - -TODO: Include short and useful examples for package users. Add longer examples -to `/example` folder. - -```dart -const like = 'sample'; -``` - -## Additional information - -TODO: Tell users more about the package: where to find more information, how to -contribute to the package, how to file issues, what response they can expect -from the package authors, and more. diff --git a/packages/auth/analysis_options.yaml b/packages/auth/analysis_options.yaml deleted file mode 100644 index a5744c1..0000000 --- a/packages/auth/analysis_options.yaml +++ /dev/null @@ -1,4 +0,0 @@ -include: package:flutter_lints/flutter.yaml - -# Additional information about this file can be found at -# https://dart.dev/guides/language/analysis-options diff --git a/packages/auth/build.yaml b/packages/auth/build.yaml deleted file mode 100644 index 840029b..0000000 --- a/packages/auth/build.yaml +++ /dev/null @@ -1,6 +0,0 @@ -targets: - $default: - builders: - json_serializable: - options: - field_rename: snake \ No newline at end of file diff --git a/packages/auth/lib/auth.dart b/packages/auth/lib/auth.dart deleted file mode 100644 index 30c7f5f..0000000 --- a/packages/auth/lib/auth.dart +++ /dev/null @@ -1,8 +0,0 @@ -/// Support for doing something awesome. -/// -/// More dartdocs go here. -library; - -export 'data/services/auth_middelware.dart'; -export 'data/di/auth_di.dart'; -export 'data/models/local/module/module_model.dart'; diff --git a/packages/auth/lib/data/common/constant.dart b/packages/auth/lib/data/common/constant.dart deleted file mode 100644 index c0b0982..0000000 --- a/packages/auth/lib/data/common/constant.dart +++ /dev/null @@ -1,14 +0,0 @@ -enum ApiEnvironment { - dam(url: 'https://api.dam.rasadyar.net/'); - - const ApiEnvironment({required this.url}); - - final String url; - - String get baseUrl { - switch (this) { - case ApiEnvironment.dam: - return url; - } - } -} diff --git a/packages/auth/lib/data/common/dio_error_handler.dart b/packages/auth/lib/data/common/dio_error_handler.dart deleted file mode 100644 index 57f29bc..0000000 --- a/packages/auth/lib/data/common/dio_error_handler.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:rasadyar_core/core.dart'; - -class DioErrorHandler { - void handle(DioException error) { - switch (error.response?.statusCode) { - case 401: - _handleGeneric(error); - break; - case 403: - _handleGeneric(error); - break; - - case 410: - _handle410(); - break; - default: - _handleGeneric(error); - } - } - - //wrong password/user name => "detail": "No active account found with the given credentials" - 401 - void _handle410() { - Get.showSnackbar(_errorSnackBar('نام کاربری یا رمز عبور اشتباه است')); - } - - //wrong captcha => "detail": "Captcha code is incorrect" - 403 - void _handle403() {} - - void _handleGeneric(DioException error) { - Get.showSnackbar( - _errorSnackBar( - error.response?.data.keys.first == 'is_user' - ? 'کاربر با این شماره تلفن وجود ندارد' - : error.response?.data[error.response?.data.keys.first] ?? - 'خطا در برقراری ارتباط با سرور', - ), - ); - } - - GetSnackBar _errorSnackBar(String message) { - return GetSnackBar( - titleText: Text( - 'خطا', - style: AppFonts.yekan14.copyWith(color: Colors.white), - ), - messageText: Text( - message, - style: AppFonts.yekan12.copyWith(color: Colors.white), - ), - backgroundColor: AppColor.error, - margin: EdgeInsets.symmetric(horizontal: 12, vertical: 8), - borderRadius: 12, - duration: Duration(milliseconds: 3500), - snackPosition: SnackPosition.TOP, - ); - } -} diff --git a/packages/auth/lib/data/common/dio_manager.dart b/packages/auth/lib/data/common/dio_manager.dart deleted file mode 100644 index bbc17b5..0000000 --- a/packages/auth/lib/data/common/dio_manager.dart +++ /dev/null @@ -1,50 +0,0 @@ -import 'package:rasadyar_auth/data/repositories/auth_repository_imp.dart'; -import 'package:rasadyar_core/core.dart'; - -import '../di/auth_di.dart'; -import 'constant.dart'; - -/* -class DioRemoteManager { - DioRemote? _currentClient; - ApiEnvironment? _currentEnv; - - Future setEnvironment([ApiEnvironment env = ApiEnvironment.dam]) async { - if (_currentEnv != env) { - _currentClient = DioRemote( - baseUrl: env.baseUrl, - interceptors: AppInterceptor( - refreshTokenCallback: () async{ - return null; - }, - ), - ); - await _currentClient?.init(); - _currentEnv = env; - } - return _currentClient!; - } - - DioRemote get currentClient { - if (_currentClient == null) { - throw Exception('Call setEnvironment() before accessing DioRemote.'); - } - - return _currentClient!; - } - - ApiEnvironment? get currentEnv => _currentEnv; -} - -Future switchAuthEnvironment(ApiEnvironment env) async { - final manager = diAuth.get(); - - final dioRemote = await manager.setEnvironment(env); - - if (diAuth.isRegistered()) { - await diAuth.unregister(); - } - - diAuth.registerLazySingleton(() => AuthRepositoryImpl(dioRemote)); -} -*/ diff --git a/packages/auth/lib/data/di/auth_di.dart b/packages/auth/lib/data/di/auth_di.dart deleted file mode 100644 index 3cb2747..0000000 --- a/packages/auth/lib/data/di/auth_di.dart +++ /dev/null @@ -1,62 +0,0 @@ -import 'package:rasadyar_auth/data/common/dio_error_handler.dart'; -import 'package:rasadyar_auth/data/models/response/auth/auth_response_model.dart'; -import 'package:rasadyar_auth/data/repositories/auth_repository_imp.dart'; -import 'package:rasadyar_auth/data/services/token_storage_service.dart'; -import 'package:rasadyar_core/core.dart'; - -import '../common/dio_manager.dart'; - -GetIt diAuth = GetIt.instance; - -Future setupAuthDI() async { - - diAuth.registerLazySingleton( - () => AppInterceptor( - refreshTokenCallback: () async { - var tokenService = Get.find(); - final authRepo = diAuth.get(); - - final refreshToken = tokenService.refreshToken.value; - if (refreshToken == null) return null; - - final result = await authRepo.loginWithRefreshToken( - authRequest: {"refresh_token": refreshToken}, - ); - - if (result is AuthResponseModel) { - await tokenService.saveAccessToken(result.access!); - return result.access; - } - return null; - }, - saveTokenCallback: (String newToken) async { - // - }, - clearTokenCallback: () async { - //await tokenService.clearTokens(); // حذف همه توکن‌ها - }, - ), - ); - - diAuth.registerLazySingleton( - () => DioRemote(interceptors: diAuth.get()), - ); - - final dioRemote = diAuth.get(); - await dioRemote.init(); - diAuth.registerSingleton(AuthRepositoryImpl(dioRemote)); - diAuth.registerLazySingleton(() => DioErrorHandler()); -} - -Future newSetupAuthDI(String newUrl) async { - diAuth.registerLazySingleton( - () => DioRemote(baseUrl: newUrl, interceptors: diAuth.get()), - instanceName: 'newRemote', - ); - final dioRemote = diAuth.get(instanceName: 'newRemote'); - await dioRemote.init(); - diAuth.registerSingleton( - AuthRepositoryImpl(dioRemote), - instanceName: 'newUrl', - ); -} diff --git a/packages/auth/lib/data/repositories/auth_repository.dart b/packages/auth/lib/data/repositories/auth_repository.dart deleted file mode 100644 index 2f5464c..0000000 --- a/packages/auth/lib/data/repositories/auth_repository.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:rasadyar_auth/data/models/response/user_info/user_info_model.dart'; - -import '../models/response/auth/auth_response_model.dart'; -import '../models/response/captcha/captcha_response_model.dart'; -import '../models/response/user_profile_model/user_profile_model.dart'; - -abstract class AuthRepository { - Future login({required Map authRequest}); - - Future captcha(); - - Future logout(); - - Future hasAuthenticated(); - - Future loginWithRefreshToken({ - required Map authRequest, - }); - - Future getUserInfo(String phoneNumber); -} diff --git a/packages/auth/lib/data/services/auth_middelware.dart b/packages/auth/lib/data/services/auth_middelware.dart deleted file mode 100644 index 14b6227..0000000 --- a/packages/auth/lib/data/services/auth_middelware.dart +++ /dev/null @@ -1,21 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/data/models/local/user_local/user_local_model.dart'; -import 'package:rasadyar_auth/data/services/token_storage_service.dart'; -import 'package:rasadyar_core/core.dart'; - -import '../../presentation/routes/pages.dart'; - -class AuthMiddleware extends GetMiddleware { - var tokenService = Get.find(); - - @override - RouteSettings? redirect(String? route) { - final refreshToken = tokenService.refreshToken.value; - final accessToken = tokenService.accessToken.value; - - if (refreshToken == null || accessToken == null) { - return RouteSettings(name: AuthPaths.auth, arguments: Module.chicken); - } - return super.redirect(route); - } -} diff --git a/packages/auth/lib/presentation/routes/pages.dart b/packages/auth/lib/presentation/routes/pages.dart deleted file mode 100644 index 5248b3d..0000000 --- a/packages/auth/lib/presentation/routes/pages.dart +++ /dev/null @@ -1,32 +0,0 @@ -import 'package:rasadyar_auth/presentation/pages/modules/logic.dart'; -import 'package:rasadyar_auth/presentation/pages/modules/view.dart'; -import 'package:rasadyar_auth/presentation/widget/captcha/logic.dart'; -import 'package:rasadyar_core/core.dart'; - -import '../pages/auth/logic.dart'; -import '../pages/auth/view.dart'; - -part 'paths.dart'; - -sealed class AuthPages { - AuthPages._(); - - static List pages = [ - GetPage( - name: AuthPaths.moduleList, - page: () => ModulesPage(), - binding: BindingsBuilder(() { - Get.lazyPut(() => ModulesLogic()); - }), - ), - - GetPage( - name: AuthPaths.auth, - page: () => AuthPage(), - binding: BindingsBuilder(() { - Get.lazyPut(() => AuthLogic()); - Get.lazyPut(() => CaptchaWidgetLogic()); - }), - ), - ]; -} diff --git a/packages/auth/lib/presentation/routes/paths.dart b/packages/auth/lib/presentation/routes/paths.dart deleted file mode 100644 index 85dfe5c..0000000 --- a/packages/auth/lib/presentation/routes/paths.dart +++ /dev/null @@ -1,8 +0,0 @@ -part of 'pages.dart'; - -sealed class AuthPaths { - AuthPaths._(); - - static const String moduleList = '/moduleList'; - static const String auth = '/Auth'; -} diff --git a/packages/auth/pubspec.yaml b/packages/auth/pubspec.yaml deleted file mode 100644 index 15678f6..0000000 --- a/packages/auth/pubspec.yaml +++ /dev/null @@ -1,35 +0,0 @@ -name: rasadyar_auth -description: "A new Flutter project." -version: 1.0.3 -publish_to: 'none' - - -environment: - sdk: ^3.8.1 - flutter: ">=1.17.0" - -dependencies: - flutter: - sdk: flutter - - rasadyar_core: - path: ../core - ##code generation - freezed_annotation: ^3.1.0 - json_annotation: ^4.9.0 -dev_dependencies: - flutter_test: - sdk: flutter - flutter_lints: ^6.0.0 - ##code generation - build_runner: ^2.6.0 - hive_ce_generator: ^1.9.3 - freezed: ^3.2.0 - json_serializable: ^6.10.0 - - ##test - mocktail: ^1.0.4 - get_test: ^4.0.1 - -flutter: - uses-material-design: true \ No newline at end of file diff --git a/packages/chicken/lib/data/common/dio_manager.dart b/packages/chicken/lib/data/common/dio_manager.dart deleted file mode 100644 index 3b1a566..0000000 --- a/packages/chicken/lib/data/common/dio_manager.dart +++ /dev/null @@ -1,33 +0,0 @@ -import 'package:rasadyar_auth/data/repositories/auth_repository_imp.dart'; -import 'package:rasadyar_core/core.dart'; - -import '../di/chicken_di.dart'; -import 'constant.dart'; - -/*class DioRemoteManager { - DioRemote? _currentClient; - ApiEnvironment? _currentEnv; - - Future setEnvironment([ - ApiEnvironment env = ApiEnvironment.dam, - ]) async { - if (_currentEnv != env) { - _currentClient = DioRemote(baseUrl: env.baseUrl); - await _currentClient?.init(); - _currentEnv = env; - } - return _currentClient!; - } - - DioRemote get currentClient { - if (_currentClient == null) { - throw Exception('Call setEnvironment() before accessing DioRemote.'); - } - - return _currentClient!; - } - - ApiEnvironment? get currentEnv => _currentEnv; -}*/ - - diff --git a/packages/chicken/lib/data/di/chicken_di.dart b/packages/chicken/lib/data/di/chicken_di.dart index bf68d7b..45bf9ef 100644 --- a/packages/chicken/lib/data/di/chicken_di.dart +++ b/packages/chicken/lib/data/di/chicken_di.dart @@ -1,10 +1,8 @@ -import 'package:rasadyar_auth/data/models/local/user_local/user_local_model.dart'; -import 'package:rasadyar_auth/data/services/token_storage_service.dart'; -import 'package:rasadyar_auth/presentation/routes/pages.dart'; import 'package:rasadyar_chicken/data/datasource/local/chicken_local_imp.dart'; import 'package:rasadyar_chicken/data/datasource/remote/chicken_remote_imp.dart'; import 'package:rasadyar_chicken/data/repositories/chicken_repository_imp.dart'; import 'package:rasadyar_chicken/hive_registrar.g.dart'; +import 'package:rasadyar_chicken/presentation/routes/routes.dart'; import 'package:rasadyar_core/core.dart'; GetIt diChicken = GetIt.instance; @@ -24,7 +22,7 @@ Future setupChickenDI() async { }, clearTokenCallback: () async { await tokenService.deleteTokens(); - Get.offAllNamed(AuthPaths.auth, arguments: Module.chicken); + Get.offAllNamed(ChickenRoutes.auth, arguments: Module.chicken); }, authArguments: Module.chicken, ), diff --git a/packages/chicken/lib/presentation/pages/buy_in_province_all/logic.dart b/packages/chicken/lib/presentation/pages/buy_in_province_all/logic.dart index b9dfcef..8c08473 100644 --- a/packages/chicken/lib/presentation/pages/buy_in_province_all/logic.dart +++ b/packages/chicken/lib/presentation/pages/buy_in_province_all/logic.dart @@ -1,4 +1,3 @@ -import 'package:rasadyar_auth/data/utils/safe_call.dart'; import 'package:rasadyar_chicken/data/models/request/steward_allocation/steward_allocation_request.dart'; import 'package:rasadyar_chicken/data/models/response/waiting_arrival/waiting_arrival.dart'; import 'package:rasadyar_chicken/presentation/pages/root/logic.dart'; diff --git a/packages/chicken/lib/presentation/pages/buy_in_province_waiting/logic.dart b/packages/chicken/lib/presentation/pages/buy_in_province_waiting/logic.dart index c2efb00..8d3ccd4 100644 --- a/packages/chicken/lib/presentation/pages/buy_in_province_waiting/logic.dart +++ b/packages/chicken/lib/presentation/pages/buy_in_province_waiting/logic.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/data/utils/safe_call.dart'; import 'package:rasadyar_chicken/data/models/request/steward_allocation/steward_allocation_request.dart'; import 'package:rasadyar_chicken/data/models/response/waiting_arrival/waiting_arrival.dart'; import 'package:rasadyar_chicken/presentation/pages/root/logic.dart'; diff --git a/packages/chicken/lib/presentation/pages/buy_out_of_province/logic.dart b/packages/chicken/lib/presentation/pages/buy_out_of_province/logic.dart index 2defabc..4a0e78a 100644 --- a/packages/chicken/lib/presentation/pages/buy_out_of_province/logic.dart +++ b/packages/chicken/lib/presentation/pages/buy_out_of_province/logic.dart @@ -1,5 +1,5 @@ import 'package:flutter/cupertino.dart'; -import 'package:rasadyar_auth/data/utils/safe_call.dart'; + import 'package:rasadyar_chicken/data/models/request/create_steward_free_bar/create_steward_free_bar.dart'; import 'package:rasadyar_chicken/data/models/response/iran_province_city/iran_province_city_model.dart'; import 'package:rasadyar_chicken/data/models/response/roles_products/roles_products.dart'; diff --git a/packages/chicken/lib/presentation/pages/home/logic.dart b/packages/chicken/lib/presentation/pages/home/logic.dart index d1b89f9..e348934 100644 --- a/packages/chicken/lib/presentation/pages/home/logic.dart +++ b/packages/chicken/lib/presentation/pages/home/logic.dart @@ -1,4 +1,4 @@ -import 'package:rasadyar_auth/data/utils/safe_call.dart'; + import 'package:rasadyar_chicken/chicken.dart'; import 'package:rasadyar_chicken/data/models/response/bar_information/bar_information.dart'; import 'package:rasadyar_chicken/data/models/response/kill_house_distribution_info/kill_house_distribution_info.dart'; diff --git a/packages/chicken/lib/presentation/pages/profile/logic.dart b/packages/chicken/lib/presentation/pages/profile/logic.dart index 65b318f..e339341 100644 --- a/packages/chicken/lib/presentation/pages/profile/logic.dart +++ b/packages/chicken/lib/presentation/pages/profile/logic.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/data/utils/safe_call.dart'; + import 'package:rasadyar_chicken/data/models/request/change_password/change_password_request_model.dart'; import 'package:rasadyar_chicken/data/models/response/iran_province_city/iran_province_city_model.dart'; import 'package:rasadyar_chicken/data/models/response/user_profile/user_profile.dart'; diff --git a/packages/chicken/lib/presentation/pages/profile/view.dart b/packages/chicken/lib/presentation/pages/profile/view.dart index 41451ad..23ccba7 100644 --- a/packages/chicken/lib/presentation/pages/profile/view.dart +++ b/packages/chicken/lib/presentation/pages/profile/view.dart @@ -2,8 +2,7 @@ import 'dart:io'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/data/models/local/user_local/user_local_model.dart'; -import 'package:rasadyar_auth/presentation/routes/pages.dart'; +import 'package:rasadyar_chicken/chicken.dart'; import 'package:rasadyar_chicken/data/models/response/iran_province_city/iran_province_city_model.dart'; import 'package:rasadyar_chicken/data/models/response/user_profile/user_profile.dart'; @@ -621,7 +620,7 @@ class ProfilePage extends GetView { onPressed: () async { await controller.rootLogic.tokenService.deleteTokens().then((value) { Get.back(); - Get.offAllNamed(AuthPaths.auth, arguments: Module.chicken); + Get.offAllNamed(ChickenRoutes.auth, arguments: Module.chicken); }); }, ), diff --git a/packages/chicken/lib/presentation/pages/root/logic.dart b/packages/chicken/lib/presentation/pages/root/logic.dart index 1994afc..bc67ca1 100644 --- a/packages/chicken/lib/presentation/pages/root/logic.dart +++ b/packages/chicken/lib/presentation/pages/root/logic.dart @@ -1,8 +1,6 @@ import 'dart:async'; import 'package:flutter/widgets.dart'; -import 'package:rasadyar_auth/data/services/token_storage_service.dart'; -import 'package:rasadyar_auth/data/utils/safe_call.dart'; import 'package:rasadyar_chicken/data/datasource/local/chicken_local_imp.dart'; import 'package:rasadyar_chicken/data/di/chicken_di.dart'; import 'package:rasadyar_chicken/data/models/local/widely_used_local_model.dart'; diff --git a/packages/chicken/lib/presentation/pages/sale/logic.dart b/packages/chicken/lib/presentation/pages/sale/logic.dart index 5f3ff7e..0b39907 100644 --- a/packages/chicken/lib/presentation/pages/sale/logic.dart +++ b/packages/chicken/lib/presentation/pages/sale/logic.dart @@ -1,4 +1,4 @@ -import 'package:rasadyar_auth/data/utils/safe_call.dart'; + import 'package:rasadyar_chicken/data/models/request/conform_allocation/conform_allocation.dart'; import 'package:rasadyar_chicken/data/models/response/allocated_made/allocated_made.dart'; import 'package:rasadyar_chicken/data/models/response/guild/guild_model.dart'; diff --git a/packages/chicken/lib/presentation/pages/sales_in_province/logic.dart b/packages/chicken/lib/presentation/pages/sales_in_province/logic.dart index 27f86a7..2d255d8 100644 --- a/packages/chicken/lib/presentation/pages/sales_in_province/logic.dart +++ b/packages/chicken/lib/presentation/pages/sales_in_province/logic.dart @@ -1,7 +1,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/data/utils/safe_call.dart'; + import 'package:rasadyar_chicken/data/models/request/conform_allocation/conform_allocation.dart'; import 'package:rasadyar_chicken/data/models/request/submit_steward_allocation/submit_steward_allocation.dart'; import 'package:rasadyar_chicken/data/models/response/allocated_made/allocated_made.dart'; diff --git a/packages/chicken/lib/presentation/pages/sales_out_of_province/logic.dart b/packages/chicken/lib/presentation/pages/sales_out_of_province/logic.dart index 53c3f3a..d031d0b 100644 --- a/packages/chicken/lib/presentation/pages/sales_out_of_province/logic.dart +++ b/packages/chicken/lib/presentation/pages/sales_out_of_province/logic.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/data/utils/safe_call.dart'; + import 'package:rasadyar_chicken/data/models/request/steward_free_sale_bar/steward_free_sale_bar_request.dart'; import 'package:rasadyar_chicken/data/models/response/iran_province_city/iran_province_city_model.dart'; import 'package:rasadyar_chicken/data/models/response/out_province_carcasses_buyer/out_province_carcasses_buyer.dart'; diff --git a/packages/chicken/lib/presentation/pages/sales_out_of_province_buyers/logic.dart b/packages/chicken/lib/presentation/pages/sales_out_of_province_buyers/logic.dart index 39344b8..9893557 100644 --- a/packages/chicken/lib/presentation/pages/sales_out_of_province_buyers/logic.dart +++ b/packages/chicken/lib/presentation/pages/sales_out_of_province_buyers/logic.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/data/utils/safe_call.dart'; + import 'package:rasadyar_chicken/data/models/response/iran_province_city/iran_province_city_model.dart'; import 'package:rasadyar_chicken/data/models/response/out_province_carcasses_buyer/out_province_carcasses_buyer.dart'; import 'package:rasadyar_chicken/presentation/pages/root/logic.dart'; diff --git a/packages/chicken/lib/presentation/pages/sales_out_of_province_sales_list/logic.dart b/packages/chicken/lib/presentation/pages/sales_out_of_province_sales_list/logic.dart index 944f546..8713c36 100644 --- a/packages/chicken/lib/presentation/pages/sales_out_of_province_sales_list/logic.dart +++ b/packages/chicken/lib/presentation/pages/sales_out_of_province_sales_list/logic.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/data/utils/safe_call.dart'; + import 'package:rasadyar_chicken/data/models/request/steward_free_sale_bar/steward_free_sale_bar_request.dart'; import 'package:rasadyar_chicken/data/models/response/iran_province_city/iran_province_city_model.dart'; import 'package:rasadyar_chicken/data/models/response/out_province_carcasses_buyer/out_province_carcasses_buyer.dart'; diff --git a/packages/chicken/lib/presentation/pages/segmentation/logic.dart b/packages/chicken/lib/presentation/pages/segmentation/logic.dart index 7844168..3e673d0 100644 --- a/packages/chicken/lib/presentation/pages/segmentation/logic.dart +++ b/packages/chicken/lib/presentation/pages/segmentation/logic.dart @@ -1,6 +1,6 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/data/utils/safe_call.dart'; + import 'package:rasadyar_chicken/data/models/response/guild/guild_model.dart'; import 'package:rasadyar_chicken/data/models/response/roles_products/roles_products.dart'; import 'package:rasadyar_chicken/data/models/response/segmentation_model/segmentation_model.dart'; diff --git a/packages/chicken/lib/presentation/routes/pages.dart b/packages/chicken/lib/presentation/routes/pages.dart index 531fa16..09f4f78 100644 --- a/packages/chicken/lib/presentation/routes/pages.dart +++ b/packages/chicken/lib/presentation/routes/pages.dart @@ -1,4 +1,3 @@ -import 'package:rasadyar_auth/auth.dart'; import 'package:rasadyar_chicken/presentation/pages/buy/logic.dart'; import 'package:rasadyar_chicken/presentation/pages/buy/view.dart'; import 'package:rasadyar_chicken/presentation/pages/buy_in_province/logic.dart'; diff --git a/packages/chicken/lib/presentation/routes/routes.dart b/packages/chicken/lib/presentation/routes/routes.dart index f880d94..ae174ee 100644 --- a/packages/chicken/lib/presentation/routes/routes.dart +++ b/packages/chicken/lib/presentation/routes/routes.dart @@ -1,6 +1,7 @@ sealed class ChickenRoutes { ChickenRoutes._(); + static const auth = '/AuthChicken'; static const _base = '/chicken'; static const init = '$_base/'; static const home = '$_base/home'; diff --git a/packages/chicken/lib/presentation/utils/utils.dart b/packages/chicken/lib/presentation/utils/utils.dart index e3fd48d..f6f89f3 100644 --- a/packages/chicken/lib/presentation/utils/utils.dart +++ b/packages/chicken/lib/presentation/utils/utils.dart @@ -1,17 +1,13 @@ import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/data/models/local/user_local/user_local_model.dart'; -import 'package:rasadyar_auth/presentation/routes/pages.dart'; +import 'package:rasadyar_chicken/presentation/routes/routes.dart'; import 'package:rasadyar_core/core.dart'; - - const int timeDebounce = 1200; - -void handleGeneric(DioException error,[void Function()? onError]) { +void handleGeneric(DioException error, [void Function()? onError]) { Get.showSnackbar(_errorSnackBar('اعتبار توکن شما منقضی شده است لطفا دوباره وارد شوید')); - Get.offAllNamed(AuthPaths.auth, arguments: Module.chicken); + Get.offAllNamed(ChickenRoutes.auth, arguments: Module.chicken); } GetSnackBar _errorSnackBar(String message) { @@ -24,4 +20,4 @@ GetSnackBar _errorSnackBar(String message) { duration: Duration(milliseconds: 3500), snackPosition: SnackPosition.TOP, ); -} \ No newline at end of file +} diff --git a/packages/chicken/pubspec.yaml b/packages/chicken/pubspec.yaml index ed00202..55b6790 100644 --- a/packages/chicken/pubspec.yaml +++ b/packages/chicken/pubspec.yaml @@ -11,8 +11,7 @@ dependencies: sdk: flutter rasadyar_core: path: ../core - rasadyar_auth: - path: ../auth + ##code generation freezed_annotation: ^3.1.0 json_annotation: ^4.9.0 diff --git a/packages/core/lib/core.dart b/packages/core/lib/core.dart index c4a96f8..ce05d09 100644 --- a/packages/core/lib/core.dart +++ b/packages/core/lib/core.dart @@ -38,11 +38,15 @@ export 'package:rasadyar_core/presentation/utils/utils.dart'; export 'package:rasadyar_core/presentation/widget/widget.dart'; //models -export 'data/model/pagination_model/pagination_model.dart'; +export 'data/model/model.dart'; +//data +export 'data/services/services.dart'; //infrastructure export 'infrastructure/infrastructure.dart'; export 'infrastructure/local/hive_local_storage.dart'; export 'injection/di.dart'; +//routing +export 'routing/auth_route_resolver.dart'; export 'utils/extension/date_time_utils.dart'; export 'utils/extension/num_utils.dart'; export 'utils/extension/string_utils.dart'; diff --git a/packages/auth/lib/data/models/local/module/module_model.dart b/packages/core/lib/data/model/local/module/module_model.dart similarity index 78% rename from packages/auth/lib/data/models/local/module/module_model.dart rename to packages/core/lib/data/model/local/module/module_model.dart index f543681..3ca5760 100644 --- a/packages/auth/lib/data/models/local/module/module_model.dart +++ b/packages/core/lib/data/model/local/module/module_model.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/data/models/local/user_local/user_local_model.dart'; import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_core/data/model/local/user_local/user_local_model.dart'; part 'module_model.freezed.dart'; diff --git a/packages/auth/lib/data/models/local/module/module_model.freezed.dart b/packages/core/lib/data/model/local/module/module_model.freezed.dart similarity index 58% rename from packages/auth/lib/data/models/local/module/module_model.freezed.dart rename to packages/core/lib/data/model/local/module/module_model.freezed.dart index 48feb37..aedd18f 100644 --- a/packages/auth/lib/data/models/local/module/module_model.freezed.dart +++ b/packages/core/lib/data/model/local/module/module_model.freezed.dart @@ -1,6 +1,5 @@ -// dart format width=80 -// coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file // ignore_for_file: type=lint // ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark @@ -75,6 +74,136 @@ as Module, } +/// Adds pattern-matching-related methods to [ModuleModel]. +extension ModuleModelPatterns on ModuleModel { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _ModuleModel value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _ModuleModel() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _ModuleModel value) $default,){ +final _that = this; +switch (_that) { +case _ModuleModel(): +return $default(_that);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _ModuleModel value)? $default,){ +final _that = this; +switch (_that) { +case _ModuleModel() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( String title, String icon, Module module)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _ModuleModel() when $default != null: +return $default(_that.title,_that.icon,_that.module);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( String title, String icon, Module module) $default,) {final _that = this; +switch (_that) { +case _ModuleModel(): +return $default(_that.title,_that.icon,_that.module);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String title, String icon, Module module)? $default,) {final _that = this; +switch (_that) { +case _ModuleModel() when $default != null: +return $default(_that.title,_that.icon,_that.module);case _: + return null; + +} +} + +} + /// @nodoc diff --git a/packages/auth/lib/data/models/local/user_local/user_local_model.dart b/packages/core/lib/data/model/local/user_local/user_local_model.dart similarity index 100% rename from packages/auth/lib/data/models/local/user_local/user_local_model.dart rename to packages/core/lib/data/model/local/user_local/user_local_model.dart diff --git a/packages/auth/lib/data/models/local/user_local/user_local_model.g.dart b/packages/core/lib/data/model/local/user_local/user_local_model.g.dart similarity index 100% rename from packages/auth/lib/data/models/local/user_local/user_local_model.g.dart rename to packages/core/lib/data/model/local/user_local/user_local_model.g.dart diff --git a/packages/core/lib/data/model/model.dart b/packages/core/lib/data/model/model.dart new file mode 100644 index 0000000..4a8a622 --- /dev/null +++ b/packages/core/lib/data/model/model.dart @@ -0,0 +1,3 @@ +export 'local/module/module_model.dart'; +export 'local/user_local/user_local_model.dart'; +export 'pagination_model/pagination_model.dart'; diff --git a/packages/core/lib/data/model/pagination_model/pagination_model.freezed.dart b/packages/core/lib/data/model/pagination_model/pagination_model.freezed.dart index cb35b63..2d77be8 100644 --- a/packages/core/lib/data/model/pagination_model/pagination_model.freezed.dart +++ b/packages/core/lib/data/model/pagination_model/pagination_model.freezed.dart @@ -1,6 +1,5 @@ -// dart format width=80 -// coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file // ignore_for_file: type=lint // ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark @@ -79,6 +78,136 @@ as List?, } +/// Adds pattern-matching-related methods to [PaginationModel]. +extension PaginationModelPatterns on PaginationModel { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _PaginationModel value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _PaginationModel() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _PaginationModel value) $default,){ +final _that = this; +switch (_that) { +case _PaginationModel(): +return $default(_that);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _PaginationModel value)? $default,){ +final _that = this; +switch (_that) { +case _PaginationModel() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( int? count, String? next, String? previous, List? results)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _PaginationModel() when $default != null: +return $default(_that.count,_that.next,_that.previous,_that.results);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( int? count, String? next, String? previous, List? results) $default,) {final _that = this; +switch (_that) { +case _PaginationModel(): +return $default(_that.count,_that.next,_that.previous,_that.results);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( int? count, String? next, String? previous, List? results)? $default,) {final _that = this; +switch (_that) { +case _PaginationModel() when $default != null: +return $default(_that.count,_that.next,_that.previous,_that.results);case _: + return null; + +} +} + +} + /// @nodoc @JsonSerializable(genericArgumentFactories: true) diff --git a/packages/auth/lib/data/models/request/login_request/login_request_model.dart b/packages/core/lib/data/model/request/login_request/login_request_model.dart similarity index 100% rename from packages/auth/lib/data/models/request/login_request/login_request_model.dart rename to packages/core/lib/data/model/request/login_request/login_request_model.dart diff --git a/packages/auth/lib/data/models/request/login_request/login_request_model.freezed.dart b/packages/core/lib/data/model/request/login_request/login_request_model.freezed.dart similarity index 63% rename from packages/auth/lib/data/models/request/login_request/login_request_model.freezed.dart rename to packages/core/lib/data/model/request/login_request/login_request_model.freezed.dart index c9f60aa..9b91ad6 100644 --- a/packages/auth/lib/data/models/request/login_request/login_request_model.freezed.dart +++ b/packages/core/lib/data/model/request/login_request/login_request_model.freezed.dart @@ -1,6 +1,5 @@ -// dart format width=80 -// coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file // ignore_for_file: type=lint // ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark @@ -79,6 +78,136 @@ as String?, } +/// Adds pattern-matching-related methods to [LoginRequestModel]. +extension LoginRequestModelPatterns on LoginRequestModel { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _LoginRequestModel value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _LoginRequestModel() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _LoginRequestModel value) $default,){ +final _that = this; +switch (_that) { +case _LoginRequestModel(): +return $default(_that);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _LoginRequestModel value)? $default,){ +final _that = this; +switch (_that) { +case _LoginRequestModel() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( String? username, String? password, String? captchaCode, String? captchaKey)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _LoginRequestModel() when $default != null: +return $default(_that.username,_that.password,_that.captchaCode,_that.captchaKey);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( String? username, String? password, String? captchaCode, String? captchaKey) $default,) {final _that = this; +switch (_that) { +case _LoginRequestModel(): +return $default(_that.username,_that.password,_that.captchaCode,_that.captchaKey);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String? username, String? password, String? captchaCode, String? captchaKey)? $default,) {final _that = this; +switch (_that) { +case _LoginRequestModel() when $default != null: +return $default(_that.username,_that.password,_that.captchaCode,_that.captchaKey);case _: + return null; + +} +} + +} + /// @nodoc @JsonSerializable() diff --git a/packages/auth/lib/data/models/request/login_request/login_request_model.g.dart b/packages/core/lib/data/model/request/login_request/login_request_model.g.dart similarity index 77% rename from packages/auth/lib/data/models/request/login_request/login_request_model.g.dart rename to packages/core/lib/data/model/request/login_request/login_request_model.g.dart index 4504142..f10c8a6 100644 --- a/packages/auth/lib/data/models/request/login_request/login_request_model.g.dart +++ b/packages/core/lib/data/model/request/login_request/login_request_model.g.dart @@ -10,14 +10,14 @@ _LoginRequestModel _$LoginRequestModelFromJson(Map json) => _LoginRequestModel( username: json['username'] as String?, password: json['password'] as String?, - captchaCode: json['captcha_code'] as String?, - captchaKey: json['captcha_key'] as String?, + captchaCode: json['captchaCode'] as String?, + captchaKey: json['captchaKey'] as String?, ); Map _$LoginRequestModelToJson(_LoginRequestModel instance) => { 'username': instance.username, 'password': instance.password, - 'captcha_code': instance.captchaCode, - 'captcha_key': instance.captchaKey, + 'captchaCode': instance.captchaCode, + 'captchaKey': instance.captchaKey, }; diff --git a/packages/auth/lib/data/models/response/auth/auth_response_model.dart b/packages/core/lib/data/model/response/auth/auth_response_model.dart similarity index 100% rename from packages/auth/lib/data/models/response/auth/auth_response_model.dart rename to packages/core/lib/data/model/response/auth/auth_response_model.dart diff --git a/packages/auth/lib/data/models/response/auth/auth_response_model.freezed.dart b/packages/core/lib/data/model/response/auth/auth_response_model.freezed.dart similarity index 61% rename from packages/auth/lib/data/models/response/auth/auth_response_model.freezed.dart rename to packages/core/lib/data/model/response/auth/auth_response_model.freezed.dart index c0c505f..fdca0fc 100644 --- a/packages/auth/lib/data/models/response/auth/auth_response_model.freezed.dart +++ b/packages/core/lib/data/model/response/auth/auth_response_model.freezed.dart @@ -1,6 +1,5 @@ -// dart format width=80 -// coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file // ignore_for_file: type=lint // ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark @@ -78,6 +77,136 @@ as bool?, } +/// Adds pattern-matching-related methods to [AuthResponseModel]. +extension AuthResponseModelPatterns on AuthResponseModel { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _AuthResponseModel value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _AuthResponseModel() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _AuthResponseModel value) $default,){ +final _that = this; +switch (_that) { +case _AuthResponseModel(): +return $default(_that);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _AuthResponseModel value)? $default,){ +final _that = this; +switch (_that) { +case _AuthResponseModel() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( String? refresh, String? access, bool? otpStatus)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _AuthResponseModel() when $default != null: +return $default(_that.refresh,_that.access,_that.otpStatus);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( String? refresh, String? access, bool? otpStatus) $default,) {final _that = this; +switch (_that) { +case _AuthResponseModel(): +return $default(_that.refresh,_that.access,_that.otpStatus);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String? refresh, String? access, bool? otpStatus)? $default,) {final _that = this; +switch (_that) { +case _AuthResponseModel() when $default != null: +return $default(_that.refresh,_that.access,_that.otpStatus);case _: + return null; + +} +} + +} + /// @nodoc @JsonSerializable() diff --git a/packages/auth/lib/data/models/response/auth/auth_response_model.g.dart b/packages/core/lib/data/model/response/auth/auth_response_model.g.dart similarity index 88% rename from packages/auth/lib/data/models/response/auth/auth_response_model.g.dart rename to packages/core/lib/data/model/response/auth/auth_response_model.g.dart index dc5d66d..642fa02 100644 --- a/packages/auth/lib/data/models/response/auth/auth_response_model.g.dart +++ b/packages/core/lib/data/model/response/auth/auth_response_model.g.dart @@ -10,12 +10,12 @@ _AuthResponseModel _$AuthResponseModelFromJson(Map json) => _AuthResponseModel( refresh: json['refresh'] as String?, access: json['access'] as String?, - otpStatus: json['otp_status'] as bool?, + otpStatus: json['otpStatus'] as bool?, ); Map _$AuthResponseModelToJson(_AuthResponseModel instance) => { 'refresh': instance.refresh, 'access': instance.access, - 'otp_status': instance.otpStatus, + 'otpStatus': instance.otpStatus, }; diff --git a/packages/auth/lib/data/models/response/captcha/captcha_response_model.dart b/packages/core/lib/data/model/response/captcha/captcha_response_model.dart similarity index 100% rename from packages/auth/lib/data/models/response/captcha/captcha_response_model.dart rename to packages/core/lib/data/model/response/captcha/captcha_response_model.dart diff --git a/packages/auth/lib/data/models/response/captcha/captcha_response_model.freezed.dart b/packages/core/lib/data/model/response/captcha/captcha_response_model.freezed.dart similarity index 64% rename from packages/auth/lib/data/models/response/captcha/captcha_response_model.freezed.dart rename to packages/core/lib/data/model/response/captcha/captcha_response_model.freezed.dart index 0e12301..33d0167 100644 --- a/packages/auth/lib/data/models/response/captcha/captcha_response_model.freezed.dart +++ b/packages/core/lib/data/model/response/captcha/captcha_response_model.freezed.dart @@ -1,6 +1,5 @@ -// dart format width=80 -// coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file // ignore_for_file: type=lint // ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark @@ -79,6 +78,136 @@ as String?, } +/// Adds pattern-matching-related methods to [CaptchaResponseModel]. +extension CaptchaResponseModelPatterns on CaptchaResponseModel { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _CaptchaResponseModel value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _CaptchaResponseModel() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _CaptchaResponseModel value) $default,){ +final _that = this; +switch (_that) { +case _CaptchaResponseModel(): +return $default(_that);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _CaptchaResponseModel value)? $default,){ +final _that = this; +switch (_that) { +case _CaptchaResponseModel() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( String? captchaKey, String? captchaImage, String? imageType, String? imageDecode)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _CaptchaResponseModel() when $default != null: +return $default(_that.captchaKey,_that.captchaImage,_that.imageType,_that.imageDecode);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( String? captchaKey, String? captchaImage, String? imageType, String? imageDecode) $default,) {final _that = this; +switch (_that) { +case _CaptchaResponseModel(): +return $default(_that.captchaKey,_that.captchaImage,_that.imageType,_that.imageDecode);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String? captchaKey, String? captchaImage, String? imageType, String? imageDecode)? $default,) {final _that = this; +switch (_that) { +case _CaptchaResponseModel() when $default != null: +return $default(_that.captchaKey,_that.captchaImage,_that.imageType,_that.imageDecode);case _: + return null; + +} +} + +} + /// @nodoc @JsonSerializable() diff --git a/packages/auth/lib/data/models/response/captcha/captcha_response_model.g.dart b/packages/core/lib/data/model/response/captcha/captcha_response_model.g.dart similarity index 59% rename from packages/auth/lib/data/models/response/captcha/captcha_response_model.g.dart rename to packages/core/lib/data/model/response/captcha/captcha_response_model.g.dart index 8d69248..a0ffdcb 100644 --- a/packages/auth/lib/data/models/response/captcha/captcha_response_model.g.dart +++ b/packages/core/lib/data/model/response/captcha/captcha_response_model.g.dart @@ -9,17 +9,17 @@ part of 'captcha_response_model.dart'; _CaptchaResponseModel _$CaptchaResponseModelFromJson( Map json, ) => _CaptchaResponseModel( - captchaKey: json['captcha_key'] as String?, - captchaImage: json['captcha_image'] as String?, - imageType: json['image_type'] as String?, - imageDecode: json['image_decode'] as String?, + captchaKey: json['captchaKey'] as String?, + captchaImage: json['captchaImage'] as String?, + imageType: json['imageType'] as String?, + imageDecode: json['imageDecode'] as String?, ); Map _$CaptchaResponseModelToJson( _CaptchaResponseModel instance, ) => { - 'captcha_key': instance.captchaKey, - 'captcha_image': instance.captchaImage, - 'image_type': instance.imageType, - 'image_decode': instance.imageDecode, + 'captchaKey': instance.captchaKey, + 'captchaImage': instance.captchaImage, + 'imageType': instance.imageType, + 'imageDecode': instance.imageDecode, }; diff --git a/packages/auth/lib/data/models/response/user_info/user_info_model.dart b/packages/core/lib/data/model/response/user_info/user_info_model.dart similarity index 100% rename from packages/auth/lib/data/models/response/user_info/user_info_model.dart rename to packages/core/lib/data/model/response/user_info/user_info_model.dart diff --git a/packages/auth/lib/data/models/response/user_info/user_info_model.freezed.dart b/packages/core/lib/data/model/response/user_info/user_info_model.freezed.dart similarity index 62% rename from packages/auth/lib/data/models/response/user_info/user_info_model.freezed.dart rename to packages/core/lib/data/model/response/user_info/user_info_model.freezed.dart index bbb225d..7d28ca0 100644 --- a/packages/auth/lib/data/models/response/user_info/user_info_model.freezed.dart +++ b/packages/core/lib/data/model/response/user_info/user_info_model.freezed.dart @@ -1,6 +1,5 @@ -// dart format width=80 -// coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file // ignore_for_file: type=lint // ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark @@ -79,6 +78,136 @@ as String?, } +/// Adds pattern-matching-related methods to [UserInfoModel]. +extension UserInfoModelPatterns on UserInfoModel { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _UserInfoModel value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _UserInfoModel() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _UserInfoModel value) $default,){ +final _that = this; +switch (_that) { +case _UserInfoModel(): +return $default(_that);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _UserInfoModel value)? $default,){ +final _that = this; +switch (_that) { +case _UserInfoModel() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( bool? isUser, String? address, String? backend, String? apiKey)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _UserInfoModel() when $default != null: +return $default(_that.isUser,_that.address,_that.backend,_that.apiKey);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( bool? isUser, String? address, String? backend, String? apiKey) $default,) {final _that = this; +switch (_that) { +case _UserInfoModel(): +return $default(_that.isUser,_that.address,_that.backend,_that.apiKey);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( bool? isUser, String? address, String? backend, String? apiKey)? $default,) {final _that = this; +switch (_that) { +case _UserInfoModel() when $default != null: +return $default(_that.isUser,_that.address,_that.backend,_that.apiKey);case _: + return null; + +} +} + +} + /// @nodoc @JsonSerializable() diff --git a/packages/auth/lib/data/models/response/user_info/user_info_model.g.dart b/packages/core/lib/data/model/response/user_info/user_info_model.g.dart similarity index 80% rename from packages/auth/lib/data/models/response/user_info/user_info_model.g.dart rename to packages/core/lib/data/model/response/user_info/user_info_model.g.dart index 2c8f1c4..13ceb8e 100644 --- a/packages/auth/lib/data/models/response/user_info/user_info_model.g.dart +++ b/packages/core/lib/data/model/response/user_info/user_info_model.g.dart @@ -8,16 +8,16 @@ part of 'user_info_model.dart'; _UserInfoModel _$UserInfoModelFromJson(Map json) => _UserInfoModel( - isUser: json['is_user'] as bool?, + isUser: json['isUser'] as bool?, address: json['address'] as String?, backend: json['backend'] as String?, - apiKey: json['api_key'] as String?, + apiKey: json['apiKey'] as String?, ); Map _$UserInfoModelToJson(_UserInfoModel instance) => { - 'is_user': instance.isUser, + 'isUser': instance.isUser, 'address': instance.address, 'backend': instance.backend, - 'api_key': instance.apiKey, + 'apiKey': instance.apiKey, }; diff --git a/packages/auth/lib/data/models/response/user_profile_model/user_profile_model.dart b/packages/core/lib/data/model/response/user_profile_model/user_profile_model.dart similarity index 100% rename from packages/auth/lib/data/models/response/user_profile_model/user_profile_model.dart rename to packages/core/lib/data/model/response/user_profile_model/user_profile_model.dart diff --git a/packages/auth/lib/data/models/response/user_profile_model/user_profile_model.freezed.dart b/packages/core/lib/data/model/response/user_profile_model/user_profile_model.freezed.dart similarity index 73% rename from packages/auth/lib/data/models/response/user_profile_model/user_profile_model.freezed.dart rename to packages/core/lib/data/model/response/user_profile_model/user_profile_model.freezed.dart index 0f5e570..407cb7c 100644 --- a/packages/auth/lib/data/models/response/user_profile_model/user_profile_model.freezed.dart +++ b/packages/core/lib/data/model/response/user_profile_model/user_profile_model.freezed.dart @@ -1,6 +1,5 @@ -// dart format width=80 -// coverage:ignore-file // GENERATED CODE - DO NOT MODIFY BY HAND +// coverage:ignore-file // ignore_for_file: type=lint // ignore_for_file: unused_element, deprecated_member_use, deprecated_member_use_from_same_package, use_function_type_syntax_for_parameters, unnecessary_const, avoid_init_to_null, invalid_override_different_default_values_named, prefer_expression_function_bodies, annotate_overrides, invalid_annotation_target, unnecessary_question_mark @@ -91,6 +90,136 @@ as List?, } +/// Adds pattern-matching-related methods to [UserProfileModel]. +extension UserProfileModelPatterns on UserProfileModel { +/// A variant of `map` that fallback to returning `orElse`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeMap(TResult Function( _UserProfileModel value)? $default,{required TResult orElse(),}){ +final _that = this; +switch (_that) { +case _UserProfileModel() when $default != null: +return $default(_that);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// Callbacks receives the raw object, upcasted. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case final Subclass2 value: +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult map(TResult Function( _UserProfileModel value) $default,){ +final _that = this; +switch (_that) { +case _UserProfileModel(): +return $default(_that);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `map` that fallback to returning `null`. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case final Subclass value: +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? mapOrNull(TResult? Function( _UserProfileModel value)? $default,){ +final _that = this; +switch (_that) { +case _UserProfileModel() when $default != null: +return $default(_that);case _: + return null; + +} +} +/// A variant of `when` that fallback to an `orElse` callback. +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return orElse(); +/// } +/// ``` + +@optionalTypeArgs TResult maybeWhen(TResult Function( String? accessToken, String? expiresIn, String? scope, String? expireTime, String? mobile, String? fullname, String? firstname, String? lastname, String? city, String? province, String? nationalCode, String? nationalId, String? birthday, String? image, int? baseOrder, List? role)? $default,{required TResult orElse(),}) {final _that = this; +switch (_that) { +case _UserProfileModel() when $default != null: +return $default(_that.accessToken,_that.expiresIn,_that.scope,_that.expireTime,_that.mobile,_that.fullname,_that.firstname,_that.lastname,_that.city,_that.province,_that.nationalCode,_that.nationalId,_that.birthday,_that.image,_that.baseOrder,_that.role);case _: + return orElse(); + +} +} +/// A `switch`-like method, using callbacks. +/// +/// As opposed to `map`, this offers destructuring. +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case Subclass2(:final field2): +/// return ...; +/// } +/// ``` + +@optionalTypeArgs TResult when(TResult Function( String? accessToken, String? expiresIn, String? scope, String? expireTime, String? mobile, String? fullname, String? firstname, String? lastname, String? city, String? province, String? nationalCode, String? nationalId, String? birthday, String? image, int? baseOrder, List? role) $default,) {final _that = this; +switch (_that) { +case _UserProfileModel(): +return $default(_that.accessToken,_that.expiresIn,_that.scope,_that.expireTime,_that.mobile,_that.fullname,_that.firstname,_that.lastname,_that.city,_that.province,_that.nationalCode,_that.nationalId,_that.birthday,_that.image,_that.baseOrder,_that.role);case _: + throw StateError('Unexpected subclass'); + +} +} +/// A variant of `when` that fallback to returning `null` +/// +/// It is equivalent to doing: +/// ```dart +/// switch (sealedClass) { +/// case Subclass(:final field): +/// return ...; +/// case _: +/// return null; +/// } +/// ``` + +@optionalTypeArgs TResult? whenOrNull(TResult? Function( String? accessToken, String? expiresIn, String? scope, String? expireTime, String? mobile, String? fullname, String? firstname, String? lastname, String? city, String? province, String? nationalCode, String? nationalId, String? birthday, String? image, int? baseOrder, List? role)? $default,) {final _that = this; +switch (_that) { +case _UserProfileModel() when $default != null: +return $default(_that.accessToken,_that.expiresIn,_that.scope,_that.expireTime,_that.mobile,_that.fullname,_that.firstname,_that.lastname,_that.city,_that.province,_that.nationalCode,_that.nationalId,_that.birthday,_that.image,_that.baseOrder,_that.role);case _: + return null; + +} +} + +} + /// @nodoc @JsonSerializable() diff --git a/packages/auth/lib/data/models/response/user_profile_model/user_profile_model.g.dart b/packages/core/lib/data/model/response/user_profile_model/user_profile_model.g.dart similarity index 69% rename from packages/auth/lib/data/models/response/user_profile_model/user_profile_model.g.dart rename to packages/core/lib/data/model/response/user_profile_model/user_profile_model.g.dart index df72e0e..170f03f 100644 --- a/packages/auth/lib/data/models/response/user_profile_model/user_profile_model.g.dart +++ b/packages/core/lib/data/model/response/user_profile_model/user_profile_model.g.dart @@ -8,40 +8,40 @@ part of 'user_profile_model.dart'; _UserProfileModel _$UserProfileModelFromJson(Map json) => _UserProfileModel( - accessToken: json['access_token'] as String?, - expiresIn: json['expires_in'] as String?, + accessToken: json['accessToken'] as String?, + expiresIn: json['expiresIn'] as String?, scope: json['scope'] as String?, - expireTime: json['expire_time'] as String?, + expireTime: json['expireTime'] as String?, mobile: json['mobile'] as String?, fullname: json['fullname'] as String?, firstname: json['firstname'] as String?, lastname: json['lastname'] as String?, city: json['city'] as String?, province: json['province'] as String?, - nationalCode: json['national_code'] as String?, - nationalId: json['national_id'] as String?, + nationalCode: json['nationalCode'] as String?, + nationalId: json['nationalId'] as String?, birthday: json['birthday'] as String?, image: json['image'] as String?, - baseOrder: (json['base_order'] as num?)?.toInt(), + baseOrder: (json['baseOrder'] as num?)?.toInt(), role: (json['role'] as List?)?.map((e) => e as String).toList(), ); Map _$UserProfileModelToJson(_UserProfileModel instance) => { - 'access_token': instance.accessToken, - 'expires_in': instance.expiresIn, + 'accessToken': instance.accessToken, + 'expiresIn': instance.expiresIn, 'scope': instance.scope, - 'expire_time': instance.expireTime, + 'expireTime': instance.expireTime, 'mobile': instance.mobile, 'fullname': instance.fullname, 'firstname': instance.firstname, 'lastname': instance.lastname, 'city': instance.city, 'province': instance.province, - 'national_code': instance.nationalCode, - 'national_id': instance.nationalId, + 'nationalCode': instance.nationalCode, + 'nationalId': instance.nationalId, 'birthday': instance.birthday, 'image': instance.image, - 'base_order': instance.baseOrder, + 'baseOrder': instance.baseOrder, 'role': instance.role, }; diff --git a/packages/core/lib/data/services/auth_middelware.dart b/packages/core/lib/data/services/auth_middelware.dart new file mode 100644 index 0000000..d0ec70c --- /dev/null +++ b/packages/core/lib/data/services/auth_middelware.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:rasadyar_core/core.dart'; + +class AuthMiddleware extends GetMiddleware { + final tokenService = Get.find(); + final authRouteResolver = Get.find(); + + @override + RouteSettings? redirect(String? route) { + final refreshToken = tokenService.refreshToken.value; + final accessToken = tokenService.accessToken.value; + final module = tokenService.appModule.value; + + if (refreshToken == null || accessToken == null) { + if (module != null) { + final authRoute = authRouteResolver.getAuthRouteForModule(module); + return RouteSettings(name: authRoute, arguments: module); + } + return RouteSettings(name: authRouteResolver.getFallbackRoute()); + } + return super.redirect(route); + } +} diff --git a/packages/core/lib/data/services/services.dart b/packages/core/lib/data/services/services.dart new file mode 100644 index 0000000..893fe8b --- /dev/null +++ b/packages/core/lib/data/services/services.dart @@ -0,0 +1,2 @@ +export 'auth_middelware.dart'; +export 'token_storage_service.dart'; diff --git a/packages/auth/lib/data/services/token_storage_service.dart b/packages/core/lib/data/services/token_storage_service.dart similarity index 95% rename from packages/auth/lib/data/services/token_storage_service.dart rename to packages/core/lib/data/services/token_storage_service.dart index d81c591..c62c2ba 100644 --- a/packages/auth/lib/data/services/token_storage_service.dart +++ b/packages/core/lib/data/services/token_storage_service.dart @@ -1,8 +1,6 @@ import 'dart:convert'; - -import 'package:rasadyar_auth/data/models/local/user_local/user_local_model.dart'; -import 'package:rasadyar_auth/hive_registrar.g.dart'; import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_core/hive_registrar.g.dart'; class TokenStorageService extends GetxService { static const String _tokenBoxName = 'TokenBox'; diff --git a/packages/auth/lib/hive_registrar.g.dart b/packages/core/lib/hive_registrar.g.dart similarity index 84% rename from packages/auth/lib/hive_registrar.g.dart rename to packages/core/lib/hive_registrar.g.dart index 166b5cb..b5b6dfa 100644 --- a/packages/auth/lib/hive_registrar.g.dart +++ b/packages/core/lib/hive_registrar.g.dart @@ -3,7 +3,7 @@ // Check in to version control import 'package:hive_ce/hive.dart'; -import 'package:rasadyar_auth/data/models/local/user_local/user_local_model.dart'; +import 'package:rasadyar_core/data/model/local/user_local/user_local_model.dart'; extension HiveRegistrar on HiveInterface { void registerAdapters() { diff --git a/packages/core/lib/injection/di.dart b/packages/core/lib/injection/di.dart index 9df3a5f..d2308c4 100644 --- a/packages/core/lib/injection/di.dart +++ b/packages/core/lib/injection/di.dart @@ -1,27 +1,26 @@ import 'package:get_it/get_it.dart'; import 'package:logger/logger.dart'; +import 'package:rasadyar_core/data/services/auth_middelware.dart'; import 'package:rasadyar_core/infrastructure/local/hive_local_storage.dart'; final diCore = GetIt.instance; Future setupAllCoreProvider() async { + diCore.registerSingleton(AuthMiddleware()); await _setUpLogger(); await _setupLocalStorage(); await _setupRemote(); await diCore.allReady(); } -Future _setUpLogger() async{ +Future _setUpLogger() async { diCore.registerSingleton(Logger()); } Future _setupLocalStorage() async { diCore.registerSingleton(HiveLocalStorage()); - print('====> HiveLocalStorage registered'); } - - Future _setupRemote() async { -// diCore.registerSingleton(HiveLocalStorage()); + // diCore.registerSingleton(HiveLocalStorage()); } diff --git a/packages/core/lib/routing/auth_route_resolver.dart b/packages/core/lib/routing/auth_route_resolver.dart new file mode 100644 index 0000000..b79adac --- /dev/null +++ b/packages/core/lib/routing/auth_route_resolver.dart @@ -0,0 +1,6 @@ +import 'package:rasadyar_core/data/model/local/user_local/user_local_model.dart'; + +abstract class AuthRouteResolver { + String getAuthRouteForModule(Module module); + String getFallbackRoute(); +} \ No newline at end of file diff --git a/packages/core/lib/utils/network/network.dart b/packages/core/lib/utils/network/network.dart index 0ff8a3c..ae65c6a 100644 --- a/packages/core/lib/utils/network/network.dart +++ b/packages/core/lib/utils/network/network.dart @@ -1,2 +1,3 @@ export 'resource.dart'; -export 'safe_call_utils.dart'; \ No newline at end of file +export 'safe_call_utils.dart'; +export 'safe_call.dart'; \ No newline at end of file diff --git a/packages/auth/lib/data/utils/safe_call.dart b/packages/core/lib/utils/network/safe_call.dart similarity index 100% rename from packages/auth/lib/data/utils/safe_call.dart rename to packages/core/lib/utils/network/safe_call.dart diff --git a/packages/inspection/lib/data/repositories/auth_repository.dart b/packages/inspection/lib/data/repositories/auth_repository.dart new file mode 100644 index 0000000..179483a --- /dev/null +++ b/packages/inspection/lib/data/repositories/auth_repository.dart @@ -0,0 +1,18 @@ +import 'package:rasadyar_core/data/model/response/auth/auth_response_model.dart'; +import 'package:rasadyar_core/data/model/response/captcha/captcha_response_model.dart'; +import 'package:rasadyar_core/data/model/response/user_info/user_info_model.dart'; +import 'package:rasadyar_core/data/model/response/user_profile_model/user_profile_model.dart'; + +abstract class AuthRepository { + Future login({required Map authRequest}); + + Future captcha(); + + Future logout(); + + Future hasAuthenticated(); + + Future loginWithRefreshToken({required Map authRequest}); + + Future getUserInfo(String phoneNumber); +} diff --git a/packages/auth/lib/data/repositories/auth_repository_imp.dart b/packages/inspection/lib/data/repositories/auth_repository_imp.dart similarity index 74% rename from packages/auth/lib/data/repositories/auth_repository_imp.dart rename to packages/inspection/lib/data/repositories/auth_repository_imp.dart index c2ef5d1..25a3ff6 100644 --- a/packages/auth/lib/data/repositories/auth_repository_imp.dart +++ b/packages/inspection/lib/data/repositories/auth_repository_imp.dart @@ -1,9 +1,8 @@ -import 'package:rasadyar_auth/data/models/response/user_info/user_info_model.dart'; -import 'package:rasadyar_auth/data/models/response/user_profile_model/user_profile_model.dart'; import 'package:rasadyar_core/core.dart'; - -import '../models/response/auth/auth_response_model.dart'; -import '../models/response/captcha/captcha_response_model.dart'; +import 'package:rasadyar_core/data/model/response/auth/auth_response_model.dart'; +import 'package:rasadyar_core/data/model/response/captcha/captcha_response_model.dart'; +import 'package:rasadyar_core/data/model/response/user_info/user_info_model.dart'; +import 'package:rasadyar_core/data/model/response/user_profile_model/user_profile_model.dart'; import 'auth_repository.dart'; class AuthRepositoryImpl implements AuthRepository { @@ -13,10 +12,8 @@ class AuthRepositoryImpl implements AuthRepository { AuthRepositoryImpl(this._httpClient); @override - Future login({ - required Map authRequest, - }) async { - var res = await _httpClient.post( + Future login({required Map authRequest}) async { + var res = await _httpClient.post( '/api/login/', data: authRequest, fromJson: UserProfileModel.fromJson, @@ -66,14 +63,10 @@ class AuthRepositoryImpl implements AuthRepository { Future getUserInfo(String phoneNumber) async { var res = await _httpClient.post( 'https://userbackend.rasadyaar.ir/api/send_otp/', - data: { - "mobile": phoneNumber, - "state": "" - }, + data: {"mobile": phoneNumber, "state": ""}, fromJson: UserInfoModel.fromJson, headers: {'Content-Type': 'application/json'}, ); return res.data; - } } diff --git a/packages/auth/lib/presentation/pages/auth/logic.dart b/packages/inspection/lib/presentation/pages/auth/logic.dart similarity index 80% rename from packages/auth/lib/presentation/pages/auth/logic.dart rename to packages/inspection/lib/presentation/pages/auth/logic.dart index 76fdc40..126589b 100644 --- a/packages/auth/lib/presentation/pages/auth/logic.dart +++ b/packages/inspection/lib/presentation/pages/auth/logic.dart @@ -1,18 +1,12 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/auth.dart'; -import 'package:rasadyar_auth/data/common/dio_error_handler.dart'; -import 'package:rasadyar_auth/data/models/request/login_request/login_request_model.dart'; -import 'package:rasadyar_auth/data/models/response/user_info/user_info_model.dart'; -import 'package:rasadyar_auth/data/models/response/user_profile_model/user_profile_model.dart'; -import 'package:rasadyar_auth/data/repositories/auth_repository_imp.dart'; -import 'package:rasadyar_auth/data/services/token_storage_service.dart'; -import 'package:rasadyar_auth/data/utils/safe_call.dart'; -import 'package:rasadyar_auth/presentation/widget/captcha/logic.dart'; import 'package:rasadyar_core/core.dart'; - -import '../../../data/models/local/user_local/user_local_model.dart'; +import 'package:rasadyar_core/data/model/request/login_request/login_request_model.dart'; +import 'package:rasadyar_core/data/model/response/user_info/user_info_model.dart'; +import 'package:rasadyar_core/data/model/response/user_profile_model/user_profile_model.dart'; +import 'package:rasadyar_inspection/data/repositories/auth_repository_imp.dart'; +import 'package:rasadyar_inspection/presentation/widget/captcha/logic.dart'; enum AuthType { useAndPass, otp } @@ -44,7 +38,7 @@ class AuthLogic extends GetxController { RxInt secondsRemaining = 120.obs; Timer? _timer; - AuthRepositoryImpl authRepository = diAuth.get(); + //AuthRepositoryImpl authRepository = diAuth.get(); final Module _module = Get.arguments; @@ -71,7 +65,6 @@ class AuthLogic extends GetxController { return '${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}'; } - @override void onReady() { super.onReady(); @@ -128,9 +121,9 @@ class AuthLogic extends GetxController { Future submitLoginForm2() async { if (!_isFormValid()) return; - AuthRepositoryImpl authTmp = diAuth.get(instanceName: 'newUrl'); + //AuthRepositoryImpl authTmp = diAuth.get(instanceName: 'newUrl'); isLoading.value = true; - await safeCall( + /* await safeCall( call: () => authTmp.login( authRequest: { "username": usernameController.value.text, @@ -144,32 +137,32 @@ class AuthLogic extends GetxController { }, onError: (error, stackTrace) { if (error is DioException) { - diAuth.get().handle(error); + // diAuth.get().handle(error); } captchaController.getCaptcha(); }, - ); + );*/ isLoading.value = false; } Future getUserInfo(String value) async { isLoading.value = true; - await safeCall( + /*await safeCall( call: () async => await authRepository.getUserInfo(value), onSuccess: (result) async { if (result != null) { - await newSetupAuthDI(result.backend ?? ''); + //await newSetupAuthDI(result.backend ?? ''); await tokenStorageService.saveApiKey(result.apiKey ?? ''); await tokenStorageService.saveBaseUrl(result.backend ?? ''); } }, onError: (error, stackTrace) { if (error is DioException) { - diAuth.get().handle(error); + // diAuth.get().handle(error); } captchaController.getCaptcha(); }, - ); + );*/ isLoading.value = false; } } diff --git a/packages/auth/lib/presentation/pages/auth/view.dart b/packages/inspection/lib/presentation/pages/auth/view.dart similarity index 98% rename from packages/auth/lib/presentation/pages/auth/view.dart rename to packages/inspection/lib/presentation/pages/auth/view.dart index 60fe93a..213c747 100644 --- a/packages/auth/lib/presentation/pages/auth/view.dart +++ b/packages/inspection/lib/presentation/pages/auth/view.dart @@ -1,9 +1,9 @@ import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/presentation/widget/captcha/view.dart'; -import 'package:rasadyar_auth/presentation/widget/clear_button.dart'; -import 'package:rasadyar_auth/presentation/widget/logo_widget.dart'; import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_inspection/presentation/widget/captcha/view.dart'; +import 'package:rasadyar_inspection/presentation/widget/clear_button.dart'; +import 'package:rasadyar_inspection/presentation/widget/logo_widget.dart'; import 'logic.dart'; @@ -109,9 +109,6 @@ class AuthPage extends GetView { onChanged: (value) async { controller.usernameController.value.text = value; controller.usernameController.refresh(); - if (value.length == 11) { - await controller.getUserInfo(value); - } }, prefixIcon: Padding( padding: const EdgeInsets.fromLTRB(0, 8, 6, 8), @@ -124,11 +121,11 @@ class AuthPage extends GetView { }) : null, validator: (value) { - /* if (value == null || value.isEmpty) { + if (value == null || value.isEmpty) { return '⚠️ شماره موبایل را وارد کنید'; } else if (value.length < 10) { return '⚠️ شماره موبایل باید 11 رقم باشد'; - }*/ + } return null; }, style: AppFonts.yekan13, diff --git a/packages/inspection/lib/presentation/routes/app_pages.dart b/packages/inspection/lib/presentation/routes/app_pages.dart index 5492bfe..dcf3ac9 100644 --- a/packages/inspection/lib/presentation/routes/app_pages.dart +++ b/packages/inspection/lib/presentation/routes/app_pages.dart @@ -1,4 +1,6 @@ import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_inspection/presentation/pages/auth/logic.dart'; +import 'package:rasadyar_inspection/presentation/pages/auth/view.dart'; import 'package:rasadyar_inspection/presentation/pages/filter/logic.dart'; import 'package:rasadyar_inspection/presentation/pages/pages.dart'; import 'package:rasadyar_inspection/presentation/pages/users/logic.dart'; @@ -12,10 +14,10 @@ sealed class InspectionPages { GetPage( name: InspectionRoutes.init, page: () => RootPage(), - + middlewares:[ AuthMiddleware()], binding: BindingsBuilder(() { - Get.lazyPut(() =>RootLogic()); - Get.lazyPut(() =>InspectorFilterLogic()); + Get.lazyPut(() => RootLogic()); + Get.lazyPut(() => InspectorFilterLogic()); Get.lazyPut(() => InspectionMapLogic()); Get.lazyPut(() => BaseLogic()); Get.lazyPut(() => UsersLogic()); @@ -59,5 +61,10 @@ sealed class InspectionPages { page: () => AddMobileInspectorPage(), binding: BindingsBuilder.put(() => AddMobileInspectorLogic()), ), + GetPage( + name: InspectionRoutes.auth, + page: () => AuthPage(), + binding: BindingsBuilder.put(() => AuthLogic()), + ), ]; } diff --git a/packages/inspection/lib/presentation/routes/app_routes.dart b/packages/inspection/lib/presentation/routes/app_routes.dart index 97b9549..72c0c48 100644 --- a/packages/inspection/lib/presentation/routes/app_routes.dart +++ b/packages/inspection/lib/presentation/routes/app_routes.dart @@ -2,11 +2,13 @@ sealed class InspectionRoutes { InspectionRoutes._(); static const init = '/supervision'; - static const inspectionAction = '$init/action'; + static const auth = '/AuthSupervision'; static const inspectionUserProfile = '$init/userSettings'; static const inspectionLocationDetails = '$init/locationDetails'; static const inspectionAddSupervision = '$inspectionLocationDetails/addSupervision'; static const inspectionAddMobileInspector = '$inspectionLocationDetails/addMobileInspector'; - static const inspectionRegistrationOfViolation = '$inspectionAddSupervision/RegistrationOfViolation'; - static const inspectionDisplayInformation = '$inspectionRegistrationOfViolation/DisplayInformation'; + static const inspectionRegistrationOfViolation = + '$inspectionAddSupervision/RegistrationOfViolation'; + static const inspectionDisplayInformation = + '$inspectionRegistrationOfViolation/DisplayInformation'; } diff --git a/packages/auth/lib/presentation/widget/captcha/logic.dart b/packages/inspection/lib/presentation/widget/captcha/logic.dart similarity index 69% rename from packages/auth/lib/presentation/widget/captcha/logic.dart rename to packages/inspection/lib/presentation/widget/captcha/logic.dart index 7a5ebcf..1ed9b15 100644 --- a/packages/auth/lib/presentation/widget/captcha/logic.dart +++ b/packages/inspection/lib/presentation/widget/captcha/logic.dart @@ -1,16 +1,15 @@ import 'dart:math'; import 'package:flutter/material.dart'; -import 'package:rasadyar_auth/data/di/auth_di.dart'; -import 'package:rasadyar_auth/data/models/response/captcha/captcha_response_model.dart'; -import 'package:rasadyar_auth/data/repositories/auth_repository_imp.dart'; import 'package:rasadyar_core/core.dart'; +import 'package:rasadyar_core/data/model/response/captcha/captcha_response_model.dart'; +import 'package:rasadyar_inspection/data/repositories/auth_repository_imp.dart'; class CaptchaWidgetLogic extends GetxController with StateMixin { TextEditingController textController = TextEditingController(); RxnString captchaKey = RxnString(); GlobalKey formKey = GlobalKey(); - AuthRepositoryImpl authRepository = diAuth.get(); + //AuthRepositoryImpl authRepository = .get(); final Random random = Random(); @override @@ -31,8 +30,7 @@ class CaptchaWidgetLogic extends GetxController with StateMixin