diff --git a/lib/data/api/chat_api.dart b/lib/data/api/chat_api.dart index c3dfef0..4692812 100644 --- a/lib/data/api/chat_api.dart +++ b/lib/data/api/chat_api.dart @@ -127,4 +127,18 @@ class ChatApi { throw dioToApp(e); } } + + /// POST /api/chat/from-article/{itemId} + /// Creates or retrieves a chat conversation seeded with the article. + /// Returns the conversation_id. + Future openArticleInChat(int itemId) async { + try { + final response = + await _dio.post('/api/chat/from-article/$itemId', data: {}); + final data = response.data as Map; + return data['conversation_id'] as int; + } on DioException catch (e) { + throw dioToApp(e); + } + } } diff --git a/lib/data/api/news_api.dart b/lib/data/api/news_api.dart new file mode 100644 index 0000000..3dc94d9 --- /dev/null +++ b/lib/data/api/news_api.dart @@ -0,0 +1,52 @@ +import 'package:dio/dio.dart'; + +import '../models/briefing_feed.dart'; +import '../models/news_item.dart'; +import 'api_client.dart'; + +class NewsApi { + final Dio _dio; + const NewsApi(this._dio); + + /// GET /api/briefing/news + /// Returns up to [limit] items starting at [offset], optionally filtered by [feedId]. + Future> getNewsItems({ + int days = 90, + int limit = 40, + int offset = 0, + int? feedId, + }) async { + try { + final params = { + 'days': days, + 'limit': limit, + 'offset': offset, + if (feedId != null) 'feed_id': feedId, + }; + final response = await _dio.get( + '/api/briefing/news', + queryParameters: params, + ); + final data = response.data as Map; + final list = data['items'] as List; + return list + .map((e) => NewsItem.fromJson(e as Map)) + .toList(); + } on DioException catch (e) { + throw dioToApp(e); + } + } + + /// GET /api/briefing/feeds + Future> getFeeds() async { + try { + final response = await _dio.get('/api/briefing/feeds'); + final list = response.data as List; + return list + .map((e) => BriefingFeed.fromJson(e as Map)) + .toList(); + } on DioException catch (e) { + throw dioToApp(e); + } + } +} diff --git a/lib/providers/api_client_provider.dart b/lib/providers/api_client_provider.dart index e9b2348..be162ad 100644 --- a/lib/providers/api_client_provider.dart +++ b/lib/providers/api_client_provider.dart @@ -9,6 +9,7 @@ import '../data/api/chat_api.dart'; import '../data/api/knowledge_api.dart'; import '../data/api/voice_api.dart'; import '../data/api/milestones_api.dart'; +import '../data/api/news_api.dart'; import '../data/api/notes_api.dart'; import '../data/api/projects_api.dart'; import '../data/api/quick_capture_api.dart'; @@ -110,3 +111,7 @@ final voiceApiProvider = Provider((ref) { final voiceRepositoryProvider = Provider((ref) { return VoiceRepository(ref.watch(voiceApiProvider)); }); + +final newsApiProvider = Provider((ref) { + return NewsApi(ref.watch(dioProvider)); +});