import '../../../core/models/api_response.dart'; import '../../../core/services/enhanced_api_service.dart'; import '../models/notification_model.dart'; /// 通知服务 class NotificationService { static final NotificationService _instance = NotificationService._internal(); factory NotificationService() => _instance; NotificationService._internal(); final EnhancedApiService _enhancedApiService = EnhancedApiService(); // 缓存时长配置 static const Duration _shortCacheDuration = Duration(seconds: 30); /// 获取通知列表 Future>> getNotifications({ int page = 1, int limit = 10, bool onlyUnread = false, }) async { try { final response = await _enhancedApiService.get>( '/notifications', queryParameters: { 'page': page, 'limit': limit, 'only_unread': onlyUnread, }, cacheDuration: _shortCacheDuration, fromJson: (data) { final notifications = (data['notifications'] as List?) ?.map((json) => NotificationModel.fromJson(json)) .toList() ?? []; return { 'notifications': notifications, 'total': data['total'] ?? 0, 'page': data['page'] ?? 1, 'limit': data['limit'] ?? 10, }; }, ); return response; } catch (e) { print('获取通知列表异常: $e'); return ApiResponse.error(message: '获取通知列表失败: $e'); } } /// 获取未读通知数量 Future> getUnreadCount() async { try { final response = await _enhancedApiService.get( '/notifications/unread-count', cacheDuration: _shortCacheDuration, fromJson: (data) => data['count'] ?? 0, ); return response; } catch (e) { print('获取未读通知数量异常: $e'); return ApiResponse.error(message: '获取未读通知数量失败: $e'); } } /// 标记通知为已读 Future> markAsRead(int notificationId) async { try { final response = await _enhancedApiService.put( '/notifications/$notificationId/read', ); return response; } catch (e) { print('标记通知已读异常: $e'); return ApiResponse.error(message: '标记通知已读失败: $e'); } } /// 标记所有通知为已读 Future> markAllAsRead() async { try { final response = await _enhancedApiService.put( '/notifications/read-all', ); return response; } catch (e) { print('标记所有通知已读异常: $e'); return ApiResponse.error(message: '标记所有通知已读失败: $e'); } } /// 删除通知 Future> deleteNotification(int notificationId) async { try { final response = await _enhancedApiService.delete( '/notifications/$notificationId', ); return response; } catch (e) { print('删除通知异常: $e'); return ApiResponse.error(message: '删除通知失败: $e'); } } }