buildChunkRowsForUpload function
Build flat chunk row maps for Supabase insertion.
Implementation
@visibleForTesting
List<Map<String, dynamic>> buildChunkRowsForUpload({
required List<dynamic> chunks,
required Map<String, String> titleToId,
required Uuid uuid,
}) {
final lowerToId = {
for (final e in titleToId.entries) e.key.toLowerCase(): e.value,
};
final chunkRows = <Map<String, dynamic>>[];
for (final chunk in chunks) {
if (chunk is! Map<String, dynamic>) continue;
final content = (chunk['content'] as String?)?.trim() ?? '';
if (content.isEmpty) continue;
final topicPath = chunk['topic_path'];
String? topicId;
if (topicPath is List) {
for (final title in topicPath.reversed) {
final t = title.toString();
topicId = titleToId[t] ?? lowerToId[t.toLowerCase()];
if (topicId != null) break;
}
}
if (topicId == null) continue;
final meta = <String, dynamic>{'has_code': chunk['has_code'] == true};
final extra = chunk['metadata'];
if (extra is Map<String, dynamic>) meta.addAll(extra);
chunkRows.add({
'id': uuid.v4(),
'topic_id': topicId,
'book_id': null,
'chunk_index': chunk['chunk_index'] ?? 0,
'content': content,
'page_number': chunk['page_number'],
'token_count': chunk['token_count'],
'metadata': jsonEncode(meta),
});
}
return chunkRows;
}