Implementation
Future<List<ContentChunkModel>> searchChunks(
String query, {
String? topicId,
String? domainId,
int limit = 8,
}) async {
final sanitized = _sanitizeSearchQuery(query);
if (sanitized.isEmpty) return [];
var request = _client.from('content_chunks');
dynamic builder;
if (domainId != null) {
builder = request
.select('*, topics!inner(domain_id)')
.textSearch('fts', "'$sanitized'", type: TextSearchType.websearch)
.eq('topics.domain_id', domainId);
} else {
builder = request.select().textSearch(
'fts',
"'$sanitized'",
type: TextSearchType.websearch,
);
}
if (topicId != null) {
builder = builder.eq('topic_id', topicId);
}
final response = await builder.limit(limit);
return (response as List<dynamic>)
.map((row) => ContentChunkModel.fromJson(row as Map<String, dynamic>))
.toList();
}