Archiv-System: Clear archiviert, Button lädt ältere Archive chronologisch, kein Limit

This commit is contained in:
Meleki committed 2026-02-26 16:52:58 +01:00
1 parent fb2c3a0720
commit 843c210209
9 files changed
+363 -129

No files matched your search

+43 -5
View File
@@ -15,19 +15,20 @@ public static class HistoryEndpoint
{
app.MapGet("/api/history", HandleHistory);
app.MapGet("/api/history/poll", HandlePoll);
app.MapPost("/api/archive", HandleArchive);
app.MapGet("/api/archives", HandleListArchives);
app.MapGet("/api/archive/{archiveId}", HandleGetArchive);
}
private static async Task HandleHistory(HttpContext ctx, DatabaseService db)
{
var sessionId = ctx.Request.Query["sessionId"].FirstOrDefault();
var limitStr = ctx.Request.Query["limit"].FirstOrDefault();
var limit = int.TryParse(limitStr, out var l) ? l : 50;
IEnumerable<ChainRecord> chains;
if (string.IsNullOrEmpty(sessionId) || sessionId == "null")
chains = await db.GetRecentChains(limit);
chains = await db.GetActiveChains();
else
chains = await db.GetSessionChains(sessionId, limit);
chains = await db.GetSessionChains(sessionId);
var result = new List<object>();
foreach (var chain in chains)
@@ -44,7 +45,44 @@ public static class HistoryEndpoint
var afterStr = ctx.Request.Query["afterId"].FirstOrDefault();
var afterId = long.TryParse(afterStr, out var a) ? a : 0;
var messages = await db.GetMessagesAfterId(afterId);
var messages = await db.GetActiveMessagesAfterId(afterId);
await ctx.Response.WriteAsJsonAsync(messages);
}
private static async Task HandleArchive(HttpContext ctx, DatabaseService db)
{
var archive = await db.CreateArchive();
if (archive == null)
{
ctx.Response.StatusCode = 204;
return;
}
await ctx.Response.WriteAsJsonAsync(archive);
}
private static async Task HandleListArchives(HttpContext ctx, DatabaseService db)
{
var archives = await db.GetArchives();
await ctx.Response.WriteAsJsonAsync(archives);
}
private static async Task HandleGetArchive(HttpContext ctx, DatabaseService db)
{
var archiveId = ctx.Request.RouteValues["archiveId"]?.ToString();
if (string.IsNullOrEmpty(archiveId))
{
ctx.Response.StatusCode = 400;
return;
}
var chains = await db.GetArchiveChains(archiveId);
var result = new List<object>();
foreach (var chain in chains)
{
var messages = await db.GetChainMessages(chain.ChainId);
result.Add(new { chain, messages });
}
await ctx.Response.WriteAsJsonAsync(result);
}
}