feat(logging): add logging to messages inbox_repository
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import '../../../../data/network/i_api_client.dart';
|
import '../../../../data/network/i_api_client.dart';
|
||||||
import '../../../../data/cache/cache_policy.dart';
|
import '../../../../data/cache/cache_policy.dart';
|
||||||
import '../../../../data/cache/cached_repository.dart';
|
import '../../../../data/cache/cached_repository.dart';
|
||||||
|
import '../../../../core/logging/logger.dart';
|
||||||
import '../models/inbox_message.dart';
|
import '../models/inbox_message.dart';
|
||||||
|
|
||||||
abstract class InboxRepository {
|
abstract class InboxRepository {
|
||||||
@@ -14,6 +15,7 @@ abstract class InboxRepository {
|
|||||||
class InboxRepositoryImpl extends CachedRepository<List<InboxMessage>>
|
class InboxRepositoryImpl extends CachedRepository<List<InboxMessage>>
|
||||||
implements InboxRepository {
|
implements InboxRepository {
|
||||||
final IApiClient _apiClient;
|
final IApiClient _apiClient;
|
||||||
|
final Logger _logger = getLogger('features.messages.repository');
|
||||||
static const _prefix = '/api/v1/inbox/messages';
|
static const _prefix = '/api/v1/inbox/messages';
|
||||||
|
|
||||||
InboxRepositoryImpl({required IApiClient apiClient, required super.store})
|
InboxRepositoryImpl({required IApiClient apiClient, required super.store})
|
||||||
@@ -41,36 +43,60 @@ class InboxRepositoryImpl extends CachedRepository<List<InboxMessage>>
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<InboxMessage>> _loadMessagesFromRemote({bool? isRead}) async {
|
Future<List<InboxMessage>> _loadMessagesFromRemote({bool? isRead}) async {
|
||||||
final queryParams = isRead != null ? '?is_read=$isRead' : '';
|
try {
|
||||||
final response = await _apiClient.get<List<dynamic>>(
|
final queryParams = isRead != null ? '?is_read=$isRead' : '';
|
||||||
'$_prefix$queryParams',
|
final response = await _apiClient.get<List<dynamic>>(
|
||||||
);
|
'$_prefix$queryParams',
|
||||||
final data = response.data;
|
);
|
||||||
if (data == null) {
|
final data = response.data;
|
||||||
throw StateError('Invalid getMessages response: empty payload');
|
if (data == null) {
|
||||||
|
throw StateError('Invalid getMessages response: empty payload');
|
||||||
|
}
|
||||||
|
return data
|
||||||
|
.whereType<Map<String, dynamic>>()
|
||||||
|
.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<String, dynamic>>()
|
|
||||||
.map(InboxMessage.fromJson)
|
|
||||||
.toList(growable: false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<InboxMessage> markAsRead(String messageId) async {
|
Future<InboxMessage> markAsRead(String messageId) async {
|
||||||
final response = await _apiClient.patch<Map<String, dynamic>>(
|
try {
|
||||||
'$_prefix/$messageId/read',
|
final response = await _apiClient.patch<Map<String, dynamic>>(
|
||||||
);
|
'$_prefix/$messageId/read',
|
||||||
final data = response.data;
|
);
|
||||||
if (data == null) {
|
final data = response.data;
|
||||||
throw StateError('Invalid markAsRead response: empty payload');
|
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) {
|
static String _messagesKey(bool? isRead) {
|
||||||
|
|||||||
Reference in New Issue
Block a user