feat: Ältere Nachrichten nachladen per Button (500er Batches)

- Backend: beforeId-Parameter + GetActiveMessagesBeforeId + GetActiveMessageCountBeforeId
- Frontend: Button 'X ältere Nachrichten laden' statt Info-Text
- Archiv-Button erscheint erst wenn alle älteren Nachrichten geladen
- Scroll-Position bleibt beim Nachladen erhalten
- Fix: wwwroot Quell-Dateien mit publish synchronisiert
This commit is contained in:
Meleki committed 2026-03-01 16:32:08 +01:00
1 parent 38bdb4408c
commit 575e5c1d44
7 files changed
+233 -18

No files matched your search

+22
View File
@@ -514,6 +514,28 @@ public class DatabaseService
return messages.Reverse().ToList();
}
public async Task<int> GetActiveMessageCountBeforeId(string sessionId, long beforeId)
{
using var conn = CreateConnection();
return await conn.ExecuteScalarAsync<int>(@"
SELECT COUNT(*) FROM messages m
JOIN chains c ON m.chain_id = c.chain_id
WHERE m.id < @beforeId AND c.archive_id IS NULL AND c.session_id = @sessionId",
new { sessionId, beforeId });
}
public async Task<List<MessageRecord>> GetActiveMessagesBeforeId(string sessionId, long beforeId, int limit)
{
using var conn = CreateConnection();
var messages = await conn.QueryAsync<MessageRecord>(@"
SELECT m.* FROM messages m
JOIN chains c ON m.chain_id = c.chain_id
WHERE m.id < @beforeId AND c.archive_id IS NULL AND c.session_id = @sessionId
ORDER BY m.id DESC LIMIT @limit",
new { sessionId, beforeId, limit });
return messages.Reverse().ToList();
}
public async Task<IEnumerable<MessageRecord>> GetActiveMessagesAfterId(string sessionId, long afterId, int limit = 200)
{
using var conn = CreateConnection();