Implementation
Future<List<UserNoteModel>> getUserNotes({
String? topicId,
String? search,
int limit = 50,
}) async {
final userId = _client.auth.currentUser?.id;
if (userId == null) return [];
var query = _client.from('user_notes').select().eq('user_id', userId);
if (topicId != null) {
query = query.eq('topic_id', topicId);
}
if (search != null && search.isNotEmpty) {
final sanitized = _sanitizeSearchQuery(search);
if (sanitized.isNotEmpty) {
query = query.textSearch('fts', sanitized);
}
}
final response = await query
.order('is_pinned', ascending: false)
.order('updated_at', ascending: false)
.limit(limit);
return (response as List<dynamic>)
.map((row) => UserNoteModel.fromJson(row as Map<String, dynamic>))
.toList();
}