From f256adadcaf9b340678a5af2441f93e28f57d91d Mon Sep 17 00:00:00 2001 From: Jonathan Bourdon Date: Sat, 20 Jul 2024 04:35:34 -0400 Subject: [PATCH] Fix some edge cases in the streaming of messages --- .../Features/Messages/Handlers/GetMessages.cs | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/Web/Features/Messages/Handlers/GetMessages.cs b/src/Web/Features/Messages/Handlers/GetMessages.cs index 188dd7e..242558f 100644 --- a/src/Web/Features/Messages/Handlers/GetMessages.cs +++ b/src/Web/Features/Messages/Handlers/GetMessages.cs @@ -31,12 +31,26 @@ public class GetMessages( .Where(c => c.SubjectId == req.SubjectId) .Where(c => c.ParentId == null); - query = query.OrderByDescending(c => c.CreatedAt); + if (req.LastId.HasValue) + { + var lastMessage = await context + .Messages + .Where(c => c.Id == req.LastId.Value) + .Select(c => new { c.CreatedAt, c.Id }) + .FirstOrDefaultAsync(cancellationToken: ct); - if (req.LastId is not null) - query = query.Where(c => c.Id < req.LastId.Value); + if (lastMessage != null) + { + query = query + .Where(c => c.CreatedAt < lastMessage.CreatedAt + || (c.CreatedAt == lastMessage.CreatedAt && c.Id < lastMessage.Id)); + } + } - query = query.Take(req.PageSize); + query = query + .OrderByDescending(c => c.CreatedAt) + .ThenByDescending(c => c.Id) + .Take(req.PageSize); var messages = await query.ToListAsync(cancellationToken: ct);