Add count methods to JournalStore API and implementations for message counting per conversation (count(conversationId) and count(conversationId, after)), with supporting tests.
release / Publish KMP libraries → caffeine Nexus (release) Failing after 32s
release / Publish KMP libraries → caffeine Nexus (release) Failing after 32s
This commit is contained in:
@@ -18,6 +18,28 @@ interface JournalStore : AutoCloseable {
|
||||
|
||||
suspend fun list(conversationId: String, after: Instant, offset: Int, limit: Int): List<MessageRecord>
|
||||
|
||||
/**
|
||||
* Сколько сообщений в диалоге [conversationId] всего.
|
||||
*
|
||||
* O(1) на SQL-бэкендах (`SELECT COUNT(*) ... WHERE conversation_id = ?`),
|
||||
* O(N) на in-memory (size простого list'а с фильтром по conversationId).
|
||||
* Не зависит от cursor'а [after] — для total-размера диалога.
|
||||
*/
|
||||
suspend fun count(conversationId: String): Long
|
||||
|
||||
/**
|
||||
* Сколько сообщений в диалоге [conversationId] создано **позже** [after]
|
||||
* (строго `createdAt > after`, как и в [list]).
|
||||
*
|
||||
* O(1) на SQL-бэкендах, O(N) на in-memory. Полезно для:
|
||||
* - UI badge "N новых сообщений" — клиент знает последний `lastSeen`,
|
||||
* сервер говорит `count(convId, after=lastSeen)`;
|
||||
* - пагинации без получения самих записей: знаем лимит последней страницы,
|
||||
* надо понять "есть ли ещё";
|
||||
* - compaction-метрик: «сколько turn'ов осталось после cutoff».
|
||||
*/
|
||||
suspend fun count(conversationId: String, after: Instant): Long
|
||||
|
||||
/**
|
||||
* Cold-flow paging через [list]. Default-реализация делает N+1 round-trip
|
||||
* (по странице через `list()` пока не получит короткую страницу). Для
|
||||
|
||||
Reference in New Issue
Block a user