From ccf6da60a132c95625a52ccac59edb2c400a2730 Mon Sep 17 00:00:00 2001 From: qzl Date: Wed, 1 Apr 2026 14:31:28 +0800 Subject: [PATCH] feat(logging): add logging to messages inbox_repository --- .../data/repositories/inbox_repository.dart | 74 +++++++++++++------ 1 file changed, 50 insertions(+), 24 deletions(-) diff --git a/apps/lib/features/messages/data/repositories/inbox_repository.dart b/apps/lib/features/messages/data/repositories/inbox_repository.dart index d92d03d..2483444 100644 --- a/apps/lib/features/messages/data/repositories/inbox_repository.dart +++ b/apps/lib/features/messages/data/repositories/inbox_repository.dart @@ -1,6 +1,7 @@ import '../../../../data/network/i_api_client.dart'; import '../../../../data/cache/cache_policy.dart'; import '../../../../data/cache/cached_repository.dart'; +import '../../../../core/logging/logger.dart'; import '../models/inbox_message.dart'; abstract class InboxRepository { @@ -14,6 +15,7 @@ abstract class InboxRepository { class InboxRepositoryImpl extends CachedRepository> implements InboxRepository { final IApiClient _apiClient; + final Logger _logger = getLogger('features.messages.repository'); static const _prefix = '/api/v1/inbox/messages'; InboxRepositoryImpl({required IApiClient apiClient, required super.store}) @@ -41,36 +43,60 @@ class InboxRepositoryImpl extends CachedRepository> } Future> _loadMessagesFromRemote({bool? isRead}) async { - final queryParams = isRead != null ? '?is_read=$isRead' : ''; - final response = await _apiClient.get>( - '$_prefix$queryParams', - ); - final data = response.data; - if (data == null) { - throw StateError('Invalid getMessages response: empty payload'); + try { + final queryParams = isRead != null ? '?is_read=$isRead' : ''; + final response = await _apiClient.get>( + '$_prefix$queryParams', + ); + final data = response.data; + if (data == null) { + throw StateError('Invalid getMessages response: empty payload'); + } + return data + .whereType>() + .map(InboxMessage.fromJson) + .toList(growable: false); + } catch (e, stackTrace) { + _logger.error( + message: 'Failed to load messages from remote', + error: e, + stackTrace: stackTrace, + extra: {'is_read': isRead}, + ); + rethrow; } - return data - .whereType>() - .map(InboxMessage.fromJson) - .toList(growable: false); } @override Future markAsRead(String messageId) async { - final response = await _apiClient.patch>( - '$_prefix/$messageId/read', - ); - final data = response.data; - if (data == null) { - throw StateError('Invalid markAsRead response: empty payload'); + try { + final response = await _apiClient.patch>( + '$_prefix/$messageId/read', + ); + final data = response.data; + if (data == null) { + throw StateError('Invalid markAsRead response: empty payload'); + } + final message = InboxMessage.fromJson(data); + await Future.wait([ + removeCacheKey(_messagesKey(false)), + removeCacheKey(_messagesKey(true)), + removeCacheKey(_messagesKey(null)), + ]); + _logger.info( + message: 'Message marked as read', + extra: {'message_id': messageId}, + ); + return message; + } catch (e, stackTrace) { + _logger.error( + message: 'Failed to mark message as read', + error: e, + stackTrace: stackTrace, + extra: {'message_id': messageId}, + ); + rethrow; } - final message = InboxMessage.fromJson(data); - await Future.wait([ - removeCacheKey(_messagesKey(false)), - removeCacheKey(_messagesKey(true)), - removeCacheKey(_messagesKey(null)), - ]); - return message; } static String _messagesKey(bool? isRead) {