Skip to content

Commit 44e68f8

Browse files
committed
fix(app): Handle anonymous and guest users
- Improved anonymous user handling. - Added logging for error handling. - Created default settings based on user ID. - Improved error handling during settings load. - Enhanced user app settings management.
1 parent c3f4d94 commit 44e68f8

File tree

1 file changed

+33
-13
lines changed

1 file changed

+33
-13
lines changed

lib/app/bloc/app_bloc.dart

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:ht_auth_repository/ht_auth_repository.dart';
88
import 'package:ht_dashboard/app/config/config.dart' as local_config;
99
import 'package:ht_data_repository/ht_data_repository.dart';
1010
import 'package:ht_shared/ht_shared.dart';
11+
import 'package:logging/logging.dart';
1112

1213
part 'app_event.dart';
1314
part 'app_state.dart';
@@ -18,9 +19,11 @@ class AppBloc extends Bloc<AppEvent, AppState> {
1819
required HtDataRepository<UserAppSettings> userAppSettingsRepository,
1920
required HtDataRepository<RemoteConfig> appConfigRepository,
2021
required local_config.AppEnvironment environment,
22+
Logger? logger,
2123
}) : _authenticationRepository = authenticationRepository,
2224
_userAppSettingsRepository = userAppSettingsRepository,
2325
_appConfigRepository = appConfigRepository,
26+
_logger = logger ?? Logger('AppBloc'),
2427
super(
2528
AppState(environment: environment),
2629
) {
@@ -36,6 +39,7 @@ class AppBloc extends Bloc<AppEvent, AppState> {
3639
final HtAuthRepository _authenticationRepository;
3740
final HtDataRepository<UserAppSettings> _userAppSettingsRepository;
3841
final HtDataRepository<RemoteConfig> _appConfigRepository;
42+
final Logger _logger;
3943
late final StreamSubscription<User?> _userSubscription;
4044

4145
/// Handles user changes and loads initial settings once user is available.
@@ -46,10 +50,15 @@ class AppBloc extends Bloc<AppEvent, AppState> {
4650
final user = event.user;
4751
final AppStatus status;
4852

49-
if (user != null &&
50-
(user.dashboardRole == DashboardUserRole.admin ||
51-
user.dashboardRole == DashboardUserRole.publisher)) {
52-
status = AppStatus.authenticated;
53+
if (user != null) {
54+
if (user.dashboardRole == DashboardUserRole.admin ||
55+
user.dashboardRole == DashboardUserRole.publisher) {
56+
status = AppStatus.authenticated;
57+
} else if (user.appRole == AppUserRole.guestUser) {
58+
status = AppStatus.anonymous;
59+
} else {
60+
status = AppStatus.unauthenticated;
61+
}
5362
} else {
5463
status = AppStatus.unauthenticated;
5564
}
@@ -66,17 +75,20 @@ class AppBloc extends Bloc<AppEvent, AppState> {
6675
emit(state.copyWith(userAppSettings: userAppSettings));
6776
} on NotFoundException {
6877
// If settings not found, create default ones
69-
const defaultSettings = UserAppSettings(
70-
id: 'default',
71-
displaySettings: DisplaySettings(
78+
_logger.info(
79+
'User app settings not found for user ${user.id}. Creating default.',
80+
);
81+
final defaultSettings = UserAppSettings(
82+
id: user.id, // Use actual user ID for default settings
83+
displaySettings: const DisplaySettings(
7284
baseTheme: AppBaseTheme.system,
7385
accentTheme: AppAccentTheme.defaultBlue,
7486
fontFamily: 'SystemDefault',
7587
textScaleFactor: AppTextScaleFactor.medium,
7688
fontWeight: AppFontWeight.regular,
7789
),
7890
language: 'en',
79-
feedPreferences: FeedDisplayPreferences(
91+
feedPreferences: const FeedDisplayPreferences(
8092
headlineDensity: HeadlineDensity.standard,
8193
headlineImageStyle: HeadlineImageStyle.largeThumbnail,
8294
showSourceInHeadlineFeed: true,
@@ -85,17 +97,25 @@ class AppBloc extends Bloc<AppEvent, AppState> {
8597
);
8698
await _userAppSettingsRepository.create(item: defaultSettings);
8799
emit(state.copyWith(userAppSettings: defaultSettings));
88-
} on HtHttpException catch (e) {
100+
} on HtHttpException catch (e, s) {
89101
// Handle HTTP exceptions during settings load
90-
print('Error loading user app settings: ${e.message}');
102+
_logger.severe(
103+
'Error loading user app settings for user ${user.id}: ${e.message}',
104+
e,
105+
s,
106+
);
91107
emit(state.copyWith(clearUserAppSettings: true));
92-
} catch (e) {
108+
} catch (e, s) {
93109
// Handle any other unexpected errors
94-
print('Unexpected error loading user app settings: $e');
110+
_logger.severe(
111+
'Unexpected error loading user app settings for user ${user.id}: $e',
112+
e,
113+
s,
114+
);
95115
emit(state.copyWith(clearUserAppSettings: true));
96116
}
97117
} else {
98-
// If user is unauthenticated, clear app settings
118+
// If user is unauthenticated or anonymous, clear app settings
99119
emit(state.copyWith(clearUserAppSettings: true));
100120
}
101121
}

0 commit comments

Comments
 (0)