添加项目文件。
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
using MessageService.Domain.Entities;
|
||||
using MessageService.Domain.IReposities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace MessageService.Infrastructure.Reposities
|
||||
{
|
||||
public class MessageReposity : IMessageReposity
|
||||
{
|
||||
private readonly MessageDbContext db;
|
||||
|
||||
public MessageReposity(MessageDbContext db)
|
||||
{
|
||||
this.db = db;
|
||||
}
|
||||
|
||||
public void Create(Message message)
|
||||
{
|
||||
db.Messages.Add(message);
|
||||
}
|
||||
|
||||
public async Task<Message?> FindByIdAsync(Guid id)
|
||||
{
|
||||
return await db.Messages.FirstOrDefaultAsync(x => x.Id == id);
|
||||
}
|
||||
|
||||
public async Task<(IEnumerable<Message> messages, bool hasMore)> GetAsync(string streamKey, long? cusor, int direction, int limit)
|
||||
{
|
||||
var query = db.Messages.Where(x => x.StreamKey == streamKey);
|
||||
List<Message> messages = [];
|
||||
if (direction == 0) // Before: 找比锚点小的,按倒序排
|
||||
{
|
||||
if (cusor.HasValue)
|
||||
query = query.Where(m => m.SequenceId < cusor.Value);
|
||||
|
||||
var list = await query
|
||||
.OrderByDescending(m => m.SequenceId) // 最新消息在最前
|
||||
.Take(limit + 1)
|
||||
.ToListAsync();
|
||||
|
||||
messages = [.. list.OrderBy(s => s.SequenceId)];
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cusor is null)
|
||||
return (messages, false);
|
||||
|
||||
messages = await query.OrderBy(o => o.SequenceId)
|
||||
.Take(limit + 1)
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
return (messages, messages.Count > limit);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user