From f82a8072a2f8f56ae99fa16dde7616a56669de92 Mon Sep 17 00:00:00 2001 From: qzl Date: Sat, 28 Feb 2026 13:41:58 +0800 Subject: [PATCH] feat(chat): add ChatHistoryRepository with shared_preferences --- .../repositories/chat_history_repository.dart | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 apps/lib/features/chat/data/repositories/chat_history_repository.dart diff --git a/apps/lib/features/chat/data/repositories/chat_history_repository.dart b/apps/lib/features/chat/data/repositories/chat_history_repository.dart new file mode 100644 index 0000000..c694f1a --- /dev/null +++ b/apps/lib/features/chat/data/repositories/chat_history_repository.dart @@ -0,0 +1,62 @@ +import 'dart:convert'; +import 'package:shared_preferences/shared_preferences.dart'; + +class ChatHistoryRepository { + static const String _messagesKey = 'chat_messages_'; + static const String _lastRunIdKey = 'chat_last_run_id_'; + static const String _calendarEventsKey = 'calendar_events'; + + final String threadId; + + ChatHistoryRepository({this.threadId = 'default'}); + + String get _msgKey => '$_messagesKey$threadId'; + String get _runIdKey => '$_lastRunIdKey$threadId'; + + Future saveMessages(List> messages) async { + final prefs = await SharedPreferences.getInstance(); + await prefs.setString(_msgKey, jsonEncode(messages)); + } + + Future>?> loadMessages() async { + final prefs = await SharedPreferences.getInstance(); + final data = prefs.getString(_msgKey); + if (data == null) return null; + final list = jsonDecode(data) as List; + return list.cast>(); + } + + Future saveLastRunId(String runId) async { + final prefs = await SharedPreferences.getInstance(); + await prefs.setString(_runIdKey, runId); + } + + Future loadLastRunId() async { + final prefs = await SharedPreferences.getInstance(); + return prefs.getString(_runIdKey); + } + + Future clear() async { + final prefs = await SharedPreferences.getInstance(); + await prefs.remove(_msgKey); + await prefs.remove(_runIdKey); + } + + Future saveCalendarEvent(Map event) async { + final prefs = await SharedPreferences.getInstance(); + final eventsJson = prefs.getString(_calendarEventsKey); + final events = eventsJson != null + ? jsonDecode(eventsJson) as Map + : {}; + events[event['id']] = event; + await prefs.setString(_calendarEventsKey, jsonEncode(events)); + } + + Future>> loadCalendarEvents() async { + final prefs = await SharedPreferences.getInstance(); + final eventsJson = prefs.getString(_calendarEventsKey); + if (eventsJson == null) return []; + final events = jsonDecode(eventsJson) as Map; + return events.values.cast>().toList(); + } +}