From 0cf5053f8b735777b89f1d5ab99b9f12a4ceb783 Mon Sep 17 00:00:00 2001 From: mohammad Date: Tue, 20 Aug 2024 10:44:15 +0300 Subject: [PATCH] visitor password api --- lib/main.dart | 4 +- .../view/access_management.dart | 2 +- .../bloc/visitor_password_bloc.dart | 62 ++++++++++++++-- .../bloc/visitor_password_event.dart | 23 +++++- .../view/add_device_dialog.dart | 4 +- .../view/visitor_password_dialog.dart | 11 ++- lib/services/access_mang_api.dart | 73 ++++++++++++++++++- lib/utils/constants/api_const.dart | 8 +- 8 files changed, 170 insertions(+), 17 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index ad7b1260..776847e7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -59,8 +59,8 @@ class MyApp extends StatelessWidget { colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), // Set up color scheme useMaterial3: true, // Enable Material 3 ), - home: VisitorPasswordDialog() - // home:isLoggedIn == 'Success' ? const HomePage() : const LoginPage(), + // home: VisitorPasswordDialog() + home:isLoggedIn == 'Success' ? const HomePage() : const LoginPage(), )); } } diff --git a/lib/pages/access_management/view/access_management.dart b/lib/pages/access_management/view/access_management.dart index 2e543b09..b7a678f2 100644 --- a/lib/pages/access_management/view/access_management.dart +++ b/lib/pages/access_management/view/access_management.dart @@ -234,7 +234,7 @@ class AccessManagementPage extends StatelessWidget { ), Expanded( child: state is TableLoaded - ? DynamicTable( + ? DynamicTable( withCheckBox: false, size: size, // cellDecoration: containerDecoration, diff --git a/lib/pages/visitor_password/bloc/visitor_password_bloc.dart b/lib/pages/visitor_password/bloc/visitor_password_bloc.dart index 0b4b3388..c84d6498 100644 --- a/lib/pages/visitor_password/bloc/visitor_password_bloc.dart +++ b/lib/pages/visitor_password/bloc/visitor_password_bloc.dart @@ -10,6 +10,7 @@ import 'package:syncrow_web/pages/visitor_password/model/schedule_model.dart'; import 'package:syncrow_web/services/access_mang_api.dart'; import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/snack_bar.dart'; + List selectedDevices = []; // Define the BLoC class VisitorPasswordBloc @@ -17,14 +18,18 @@ class VisitorPasswordBloc VisitorPasswordBloc() : super(VisitorPasswordInitial()) { on(selectUsageFrequency); on(_onFetchDevice); - on(selectAccessType); on(selectTimeVisitorPassword); on(toggleRepeat); on(toggleDaySelection); on(selectDevice); + on(postOnlineOneTimePassword); on(postOnlineMultipleTimePassword); + + on(postOfflineMultipleTimePassword); + on(postOfflineOneTimePassword); + } final TextEditingController userNameController = TextEditingController(); final TextEditingController emailController = TextEditingController(); @@ -35,7 +40,10 @@ class VisitorPasswordBloc final TextEditingController virtualAddressController = TextEditingController(); List data = []; - List selectedDeviceIds = ['909e052c-6934-48f3-b22d-67ee04ad7265']; + List selectedDeviceIds = []; + + + final forgetFormKey = GlobalKey(); String accessTypeSelected = 'Online Password'; @@ -191,20 +199,24 @@ class VisitorPasswordBloc } } + //online password + Future postOnlineOneTimePassword( OnlineOneTimePasswordEvent event, Emitter emit) async { try { + print('selectedDevices$selectedDevices'); // emit(DeviceLoaded()); await AccessMangApi().postOnlineOneTime( email: event.email, - devicesUuid: selectedDeviceIds, + devicesUuid: selectedDevices, passwordName: event.passwordName); // emit(TableLoaded(data)); } catch (e) { emit(FailedState(e.toString())); } } + Future postOnlineMultipleTimePassword( OnlineMultipleTimePasswordEvent event, Emitter emit) async { @@ -224,7 +236,7 @@ class VisitorPasswordBloc invalidTime:event.invalidTime , effectiveTime:event.effectiveTime , email: event.email, - devicesUuid: selectedDeviceIds, + devicesUuid: selectedDevices, passwordName: event.passwordName ); // emit(TableLoaded(data)); @@ -233,6 +245,45 @@ class VisitorPasswordBloc } } + + //offline password + Future postOfflineOneTimePassword( + OfflineOneTimePasswordEvent event, + Emitter emit) async { + try { + generate7DigitNumber(); + // emit(DeviceLoaded()); + await AccessMangApi().postOffLineOneTime( + email: event.email, + devicesUuid: selectedDevices, + passwordName: event.passwordName + ); + // emit(TableLoaded(data)); + } catch (e) { + emit(FailedState(e.toString())); + } + } + + Future postOfflineMultipleTimePassword( + OfflineMultipleTimePasswordEvent event, + Emitter emit) async { + try { + generate7DigitNumber(); + // emit(DeviceLoaded()); + await AccessMangApi().postOffLineMultipleTime( + email: event.email, + devicesUuid: selectedDevices, + passwordName: event.passwordName, + invalidTime:event.invalidTime , + effectiveTime:event.effectiveTime + ); + // emit(TableLoaded(data)); + } catch (e) { + emit(FailedState(e.toString())); + } + } + + void selectDevice( SelectDeviceEvent event, Emitter emit) { if (selectedDeviceIds.contains(event.deviceId)) { @@ -240,7 +291,8 @@ class VisitorPasswordBloc } else { selectedDeviceIds.add(event.deviceId); } - print(selectedDeviceIds); + selectedDevices=selectedDeviceIds; + print(selectedDevices); } String? validate(String? value) { diff --git a/lib/pages/visitor_password/bloc/visitor_password_event.dart b/lib/pages/visitor_password/bloc/visitor_password_event.dart index 40fe2542..da57735a 100644 --- a/lib/pages/visitor_password/bloc/visitor_password_event.dart +++ b/lib/pages/visitor_password/bloc/visitor_password_event.dart @@ -51,6 +51,7 @@ class GeneratePasswordEvent extends VisitorPasswordEvent {} class FetchDevice extends VisitorPasswordEvent {} +//online password class OnlineOneTimePasswordEvent extends VisitorPasswordEvent { final String? email; final String? passwordName; @@ -65,13 +66,33 @@ class OnlineMultipleTimePasswordEvent extends VisitorPasswordEvent { final String? passwordName; final String? invalidTime; final String? effectiveTime; - const OnlineMultipleTimePasswordEvent({this.email,this.passwordName,this.invalidTime,this.effectiveTime}); + @override + List get props => [email!,passwordName!,invalidTime!,effectiveTime!]; +} + +//offline password +class OfflineOneTimePasswordEvent extends VisitorPasswordEvent { + final String? email; + final String? passwordName; + const OfflineOneTimePasswordEvent({this.email,this.passwordName}); + @override + List get props => [email!,passwordName!,]; +} + +class OfflineMultipleTimePasswordEvent extends VisitorPasswordEvent { + final String? email; + final String? passwordName; + final String? invalidTime; + final String? effectiveTime; + + const OfflineMultipleTimePasswordEvent({this.email,this.passwordName,this.invalidTime,this.effectiveTime}); @override List get props => [email!,passwordName!,invalidTime!,effectiveTime!]; } + class SelectDeviceEvent extends VisitorPasswordEvent { final String deviceId; const SelectDeviceEvent(this.deviceId); diff --git a/lib/pages/visitor_password/view/add_device_dialog.dart b/lib/pages/visitor_password/view/add_device_dialog.dart index 1b237759..e71cfb0b 100644 --- a/lib/pages/visitor_password/view/add_device_dialog.dart +++ b/lib/pages/visitor_password/view/add_device_dialog.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:syncrow_web/pages/common/custom_table.dart'; import 'package:syncrow_web/pages/common/custom_web_textfield.dart'; import 'package:syncrow_web/pages/common/default_button.dart'; import 'package:syncrow_web/pages/visitor_password/bloc/visitor_password_bloc.dart'; @@ -10,7 +11,6 @@ import 'package:syncrow_web/pages/visitor_password/bloc/visitor_password_state.d import 'package:syncrow_web/utils/color_manager.dart'; import 'package:syncrow_web/utils/constants/assets.dart'; import 'package:syncrow_web/utils/style.dart'; -import '../../common/custom_table.dart'; class AddDeviceDialog extends StatelessWidget { @@ -155,7 +155,7 @@ class AddDeviceDialog extends StatelessWidget { } }, onRowCheckboxChanged: (index, isSelected) { - final deviceId = state.data[index].uuid; // Adjust as per your actual data structure + final deviceId = state.data[index].uuid; visitorBloc.add(SelectDeviceEvent(deviceId)); }, withCheckBox: true, diff --git a/lib/pages/visitor_password/view/visitor_password_dialog.dart b/lib/pages/visitor_password/view/visitor_password_dialog.dart index b752c3a9..4e94116c 100644 --- a/lib/pages/visitor_password/view/visitor_password_dialog.dart +++ b/lib/pages/visitor_password/view/visitor_password_dialog.dart @@ -308,8 +308,15 @@ class VisitorPasswordDialog extends StatelessWidget { ) ); } - else if(visitorBloc.usageFrequencySelected=='Periodic'&&visitorBloc.accessTypeSelected=='Online Password') { - visitorBloc.add(OnlineMultipleTimePasswordEvent( + else if(visitorBloc.usageFrequencySelected=='One-Time'&&visitorBloc.accessTypeSelected=='Offline Password') { + visitorBloc.add(OfflineOneTimePasswordEvent( + passwordName:visitorBloc.userNameController.text , + email: visitorBloc.emailController.text, + ) + ); + } + else if(visitorBloc.usageFrequencySelected=='Periodic'&&visitorBloc.accessTypeSelected=='Offline Password') { + visitorBloc.add(OfflineMultipleTimePasswordEvent( passwordName:visitorBloc.userNameController.text , email: visitorBloc.emailController.text, effectiveTime:visitorBloc.effectiveTimeTimeStamp.toString() , diff --git a/lib/services/access_mang_api.dart b/lib/services/access_mang_api.dart index f755209d..38730553 100644 --- a/lib/services/access_mang_api.dart +++ b/lib/services/access_mang_api.dart @@ -63,7 +63,7 @@ class AccessMangApi{ }'); final response = await HTTPService().post( - path: ApiEndpoints.sendOfflineOneTime, + path: ApiEndpoints.sendOnlineOneTime, body: jsonEncode({ "email": email, "passwordName": passwordName, @@ -106,7 +106,7 @@ class AccessMangApi{ print('createPassword =$body'); final response = await HTTPService().post( - path: ApiEndpoints.sendOfflineMultipleTime, + path: ApiEndpoints.sendOnlineMultipleTime, body: jsonEncode(body), showServerMessage: true, expectedResponseModel: (json) { @@ -121,7 +121,76 @@ class AccessMangApi{ } } +// OffLine One Time Password + Future postOffLineOneTime({String? email,String? passwordName,List? devicesUuid}) async { + try { + print('postOfflineOneTime List: ${ + { + "email": email, + "passwordName": passwordName, + "devicesUuid": devicesUuid + } + }'); + final response = await HTTPService().post( + path: ApiEndpoints.sendOffLineOneTime, + body: jsonEncode({ + "email": email, + "passwordName": passwordName, + "devicesUuid": devicesUuid + }), + showServerMessage: true, + expectedResponseModel: (json) { + List jsonData = json; + print('postOfflineOneTime List: $json'); + }, + ); + return response; + } catch (e) { + debugPrint('Error fetching $e'); + return []; + } + } + + Future postOffLineMultipleTime({ + String? email, + String? passwordName, + String? effectiveTime, + String? invalidTime, + List? devicesUuid + + }) async { + try { + + print('postOfflineOneTime List: ${ + { + "email": email, + "passwordName": passwordName, + "devicesUuid": devicesUuid + } + }'); + + final response = await HTTPService().post( + path: ApiEndpoints.sendOffLineOneTime, + body: jsonEncode({ + "email": email, + "devicesUuid":devicesUuid, + "passwordName": passwordName, + "effectiveTime": effectiveTime, + "invalidTime": invalidTime + }), + showServerMessage: true, + expectedResponseModel: (json) { + List jsonData = json; + print('postOfflineOneTime List: $json'); + }, + ); + return response; + } catch (e) { + debugPrint('Error fetching $e'); + return []; + } + } } \ No newline at end of file diff --git a/lib/utils/constants/api_const.dart b/lib/utils/constants/api_const.dart index b2db133a..f9581cb6 100644 --- a/lib/utils/constants/api_const.dart +++ b/lib/utils/constants/api_const.dart @@ -13,8 +13,12 @@ abstract class ApiEndpoints { static const String getDevices = '$baseUrl/visitor-password/devices'; - static const String sendOfflineOneTime = '$baseUrl/visitor-password/temporary-password/online/one-time'; - static const String sendOfflineMultipleTime = '$baseUrl/visitor-password/temporary-password/online/multiple-time'; + static const String sendOnlineOneTime = '$baseUrl/visitor-password/temporary-password/online/one-time'; + static const String sendOnlineMultipleTime = '$baseUrl/visitor-password/temporary-password/online/multiple-time'; + +//offline Password + static const String sendOffLineOneTime = '$baseUrl/visitor-password/temporary-password/offline/one-time'; + static const String sendOffLineMultipleTime = '$baseUrl/visitor-password/temporary-password/offline/multiple-time'; static const String getUser = '$baseUrl/user/{userUuid}';