Опросы
This commit is contained in:
@@ -95,6 +95,36 @@ public sealed class MessageRepository : IMessageRepository
|
||||
.ToListAsync(cancellationToken);
|
||||
}
|
||||
|
||||
public async Task<List<Message>> GetChatMessagesAroundAsync(Guid chatId, long sequenceId, int limit, CancellationToken cancellationToken)
|
||||
{
|
||||
var builder = Builders<Message>.Filter;
|
||||
|
||||
// Target message
|
||||
var targetFilter = builder.And(builder.Eq(m => m.ChatId, chatId), builder.Eq(m => m.SequenceId, sequenceId));
|
||||
var targetMsg = await _messages.Find(targetFilter).FirstOrDefaultAsync(cancellationToken);
|
||||
|
||||
// Older messages
|
||||
var olderFilter = builder.And(builder.Eq(m => m.ChatId, chatId), builder.Lt(m => m.SequenceId, sequenceId));
|
||||
var older = await _messages.Find(olderFilter)
|
||||
.SortByDescending(m => m.SequenceId)
|
||||
.Limit(limit / 2)
|
||||
.ToListAsync(cancellationToken);
|
||||
|
||||
// Newer messages
|
||||
var newerFilter = builder.And(builder.Eq(m => m.ChatId, chatId), builder.Gt(m => m.SequenceId, sequenceId));
|
||||
var newer = await _messages.Find(newerFilter)
|
||||
.SortBy(m => m.SequenceId)
|
||||
.Limit(limit / 2)
|
||||
.ToListAsync(cancellationToken);
|
||||
|
||||
var result = new List<Message>();
|
||||
result.AddRange(older);
|
||||
if (targetMsg != null) result.Add(targetMsg);
|
||||
result.AddRange(newer);
|
||||
|
||||
return result.OrderBy(m => m.SequenceId).ToList();
|
||||
}
|
||||
|
||||
public async Task<List<Message>> SearchMessagesAsync(string query, Guid? chatId, Guid requestingUserId, CancellationToken cancellationToken)
|
||||
{
|
||||
// Not ideal for SQL/Mongo combination but keeping the signature
|
||||
|
||||
Reference in New Issue
Block a user