import 'message.dart'; /// Lightweight conversation header for a journal day — just enough to drive /// navigation and labels. The full message list comes alongside in [JournalDay]. class JournalConversation { final int id; final String title; final String conversationType; final String? dayDate; // YYYY-MM-DD or null const JournalConversation({ required this.id, required this.title, required this.conversationType, this.dayDate, }); factory JournalConversation.fromJson(Map json) => JournalConversation( id: json['id'] as int, title: json['title'] as String? ?? '', conversationType: json['conversation_type'] as String? ?? 'journal', dayDate: json['day_date'] as String?, ); } /// Payload returned by GET /api/journal/today and /api/journal/day/<iso>. /// `conversation` is null on a day with no journal content yet (rare — /// the today endpoint creates it on demand). class JournalDay { final String dayDate; final JournalConversation? conversation; final List messages; const JournalDay({ required this.dayDate, required this.conversation, required this.messages, }); factory JournalDay.fromJson(Map json) { final convRaw = json['conversation'] as Map?; final rawMessages = json['messages'] as List? ?? []; return JournalDay( dayDate: json['day_date'] as String, conversation: convRaw == null ? null : JournalConversation.fromJson(convRaw), messages: rawMessages .map((e) => Message.fromJson(e as Map)) .toList(), ); } JournalDay copyWith({List? messages}) => JournalDay( dayDate: dayDate, conversation: conversation, messages: messages ?? this.messages, ); }