1import 'dart:developer';
3import 'package:aidra_drive/features/auth/domain/entities/session_entity.dart';
4import 'package:dartz/dartz.dart';
5import 'package:flutter_secure_storage/flutter_secure_storage.dart';
7import '../../../../core/isar/isar_local_database.dart';
8import '../../../../core/isar/models/collections/cancellation_reason_isar_model.dart';
9import '../../../../core/isar/models/collections/collection_rating_reason_isar_model.dart';
10import '../../../../core/isar/models/collections/completed_collection_isar_model.dart';
11import '../../../../core/isar/models/collections/restaurant_collection_contacts_isar_model.dart';
12import '../../../../core/isar/models/collections/restaurant_partner_payments_isar_model.dart';
13import '../../../../core/isar/models/history/pending_collection_isar_model.dart';
14import '../../../../core/isar/models/collections/todo_collection_isar_model.dart';
15import '../../../../core/isar/models/history/this_month_collection_isar_model.dart';
16import '../../../../core/isar/models/history/this_week_collection_isar_model.dart';
17import '../../../../core/services/user_info_service.dart';
18import '../../domain/entities/credentials_entity.dart';
19import '../datasources/remote_datasource/authentication_remote_datasource.dart';
20import '../datasources/local_datasource/credentials_local_datasource.dart';
21import '../datasources/local_datasource/session_local_datasource.dart';
22import '../datasources/local_datasource/token_local_datasource.dart';
23import '../../domain/repository/authentication_repository.dart';
24import '../../../../core/error/exception_failure_adapter.dart';
25import '../../../../core/services/service_locator.dart';
26import '../../../../core/ui/theme/color_palette.dart';
27import '../../../../core/error/failures.dart';
28import '../datasources/remote_datasource/check_in_out_remote_datasource.dart';
29import '../models/credentials_model.dart';
30import '../models/session_model.dart';
31import '../models/vehicle_check_model.dart';
32import '../models/vehicle_model.dart';
43 Future<Either<Failure, SessionModel>>
singIn({
51 final response = await _remoteDataSource.signInWithCredentials(
55 final token = session.token;
57 await _tokenLocaldataDource.saveToken(token: token!);
58 await _credentialsLocalDataSource.saveCredentials(
74 userId: session.userContext?.uid ?? 0,
79 userId: session.userContext?.uid ?? 0,
83 userId: session.userContext?.uid ?? 0,
95 userId: session.userContext?.uid ?? 0,
99 userId: session.userContext?.uid ?? 0,
104 final test = isTodoCollectionsSavedInLocalDatabase;
105 final test2 = isCompletedCollectionsSavedInLocalDatabase;
106 final test3 = isPendingCollectionsSavedInLocalDatabase;
107 final test4 = isCollectionCancelationReasonsSavedInLocalDatabase;
108 final test5 = isPartnerPaymentsSavedInLocalDatabase;
109 final test6 = isPartnerContactsSavedInLocalDatabase;
110 final test7 = isCollectionRatingReasonsSavedInLocalDatabase;
111 final test8 = isThisWeekHistorySavedInLocalDatabase;
112 final test9 = isThisMonthHistorySavedInLocalDatabase;
114 log(
"========= DATA DOWNLOADING =========");
115 log(
"Todo Collections Saved In LocalDatabase: ${test.toString()}");
116 log(
"Completed Collections Saved In LocalDatabase: ${test2.toString()}");
117 log(
"Pending Collections Saved In LocalDatabase: ${test3.toString()}");
118 log(
"Collection Cancelation Reasons Saved In LocalDatabase: ${test4.toString()}");
119 log(
"Partner Payments Saved In LocalDatabase: ${test5.toString()}");
120 log(
"Partner Contacts Saved In LocalDatabase: ${test6.toString()}");
121 log(
"Collection Rating Reasons Saved In LocalDatabase: ${test7.toString()}");
122 log(
"This Week-History Saved In LocalDatabase: ${test8.toString()}");
123 log(
"This Month-History Saved In LocalDatabase: ${test9.toString()}");
124 log(
"====================================");
126 if (isTodoCollectionsSavedInLocalDatabase &&
127 isCompletedCollectionsSavedInLocalDatabase &&
128 isPendingCollectionsSavedInLocalDatabase &&
129 isCollectionCancelationReasonsSavedInLocalDatabase &&
130 isPartnerPaymentsSavedInLocalDatabase &&
131 isPartnerContactsSavedInLocalDatabase &&
132 isCollectionRatingReasonsSavedInLocalDatabase &&
133 isThisWeekHistorySavedInLocalDatabase &&
134 isThisMonthHistorySavedInLocalDatabase){
135 return right(session);
140 color: ColorPalette.red,
146 return left(ExceptionFailureAdapter.adapt(e));
153 Future<Either<Failure, void>>
signOut() async {
195 final vehicles = await _checkInOutDataSource.getAvailableVehicles(
userId:
userId);
196 return right(vehicles);
198 return left(ExceptionFailureAdapter.adapt(e));
203 Future<Either<Failure, bool>>
vehicleCheck({required VehicleCheckModel vehicleCheckModel}) async {
205 await _checkInOutDataSource.vehicleCheck(
206 vehicleCheckModel: vehicleCheckModel,
209 final storage =
const FlutterSecureStorage(
210 aOptions: AndroidOptions(
211 encryptedSharedPreferences:
true,
213 iOptions: IOSOptions(
214 accessibility: KeychainAccessibility.first_unlock,
219 if (vehicleCheckModel.type ==
'checkin') {
220 await storage.write(key:
'is_checked_in', value:
'true');
221 }
else if (vehicleCheckModel.type ==
'checkout') {
222 await storage.delete(key:
'is_checked_in');
227 return left(ExceptionFailureAdapter.adapt(e));
246 final todoCollection = await _remoteDataSource.getCollections(
251 final isarTodoCollectionList = todoCollection.map(
265 final todoCollection = await _remoteDataSource.getCollections(
270 final isarCompletedCollectionList = todoCollection.map(
284 final pendingCollection = await _remoteDataSource.getCollections(
289 final isarPendingCollectionList = pendingCollection.map(
303 final thisWeekHistory = await _remoteDataSource.getHistoryCollections(
307 final isarThisWeekCollectionList = thisWeekHistory.map(
321 final thisMonthHistory = await _remoteDataSource.getHistoryCollections(
325 final isarThisMonthCollectionList = thisMonthHistory.map(
337 final cancelationReasons = await
_remoteDataSource.getCollectionCancelationReasons();
338 final isarCancelationReasonsList = cancelationReasons.map(
358 payments: paymentModeList,
393 final isarRatingReasonsList = ratingReasons.map(
410 final response = await _remoteDataSource.signInWithCredentials(
414 final token = session.token;
416 await _tokenLocaldataDource.saveToken(token: token!);
417 await _credentialsLocalDataSource.saveCredentials(
420 return right(session);
422 return left(ExceptionFailureAdapter.adapt(e));
final SessionLocalDataSource _sessionLocalDataSource
sealed class AuthenticationEvent extends Equatable reqEntity
final class AuthenticatedState extends AuthenticationState credentials
sealed class CheckInOutEvent extends Equatable userId
override Future< Either< Failure, CredentialsModel?> > loadCredentials() async
final _credentialsLocalDataSource
Future< bool > savePartnerContactsToLocalDatabase() async
final _checkInOutDataSource
Future< bool > saveThisWeekHistoryToLocalDatabase({ required int userId, }) async
override Future< Either< Failure, SessionModel?> > loadSession() async
final _tokenLocaldataDource
override Future< Either< Failure, bool > > checkBiometricAuthAvailability() async
Future< bool > saveCollectionCancelationReasonsToLocalDatabase() async
Future< bool > saveCollectionRatingReasonsToLocalDatabase() async
Future< bool > savePartnerPaymentsToLocalDatabase() async
override Future< Either< Failure, SessionModel > > singIn({ required CredentialsEntity reqEntity, }) async
Future< bool > saveThisMonthHistoryToLocalDatabase({ required int userId, }) async
override Future< Either< Failure, bool > > vehicleCheck({required VehicleCheckModel vehicleCheckModel}) async
final _sessionLocalDataSource
Future< bool > savePendingCollectionToLocalDatabase({ required int userId, }) async
override Future< Either< Failure, List< VehicleModel > > > getAvailableVehicles({required int userId}) async
override Future< Either< Failure, SessionEntity > > fastSingIn({required CredentialsEntity reqEntity}) async
override Future< Either< Failure, void > > signOut() async
Future< bool > saveCompletedCollectionToLocalDatabase({ required int userId, }) async
Future< bool > saveTodoCollectionToLocalDatabase({ required int userId, required String? type, }) async
static CancellationReasonIsarModel fromModel(ResCancelationReasonModel model)
static CollectionRatingReasonIsarModel fromModel(ResCollectionRatingReasonModel model)
static CompletedCollectionIsarModel fromModel(CollectionModel model)
static Failure adapt(dynamic exception)
static IsarLocalDatabase get instance
static PendingCollectionIsarModel fromModel(CollectionModel model)
static RestaurantPartnerPaymentsIsarModel() RestaurantPartnerPaymentsIsarModel fromModel({ required int restaurantId, required List< ResPartnerPaymentModel > payments, })
static ThisMonthCollectionIsarModel fromModel(CollectionModel model)
static ThisWeekCollectionIsarModel fromModel(CollectionModel model)
static TodoCollectionIsarModel fromModel(CollectionModel model)
static final UserInfoService instance
Future< UserInfo?> fetchAndSaveUserInfo(int userId) async
Future< void > deleteUserInfo() async
sealed class CollectionsState extends Equatable collections
abstract class Failure extends Equatable ServerFailure({ required super.message, required super.color, })
abstract class PeriodEvent extends Equatable period
const SessionModel({ super.id, super.jsonrpc, super.processType, super.db, super.isAdmin, super.isSystem, super.name, super.partnerId, super.statusCode, super.supportUrl, super.uid, super.userContext, super.username, super.token, super.role, })