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

+20 -2
View File
@@ -34,9 +34,26 @@ public static class HistoryEndpoint
}
const int messageLimit = 500;
var beforeStr = ctx.Request.Query["beforeId"].FirstOrDefault();
var beforeId = long.TryParse(beforeStr, out var b) ? b : 0;
var totalCount = await db.GetActiveMessageCount(sessionId);
var messages = await db.GetLatestActiveMessages(sessionId, messageLimit);
List<MessageRecord> messages;
if (beforeId > 0)
{
messages = await db.GetActiveMessagesBeforeId(sessionId, beforeId, messageLimit);
}
else
{
messages = await db.GetLatestActiveMessages(sessionId, messageLimit);
}
// Zähle wie viele Nachrichten es VOR der ältesten geladenen noch gibt
var oldestLoadedId = messages.Count > 0 ? messages[0].Id : 0;
var remainingOlder = oldestLoadedId > 0
? await db.GetActiveMessageCountBeforeId(sessionId, oldestLoadedId)
: 0;
// Nach Chain gruppieren (Reihenfolge beibehalten)
var chainIds = messages.Select(m => m.ChainId).Distinct().ToList();
@@ -54,7 +71,8 @@ public static class HistoryEndpoint
await ctx.Response.WriteAsJsonAsync(new
{
entries = result,
hasMore = totalCount > messageLimit,
hasMore = remainingOlder > 0,
remainingCount = remainingOlder,
totalCount,
loadedCount = messages.Count
});