49 lines
1.7 KiB
C#
49 lines
1.7 KiB
C#
using MessengerApi.Factories;
|
|
using MessengerBroker.Configuration.Model;
|
|
using MessengerBroker.Factories;
|
|
using MessengerBroker.Model.Http;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace MessengerBroker.Handlers.Endpoint
|
|
{
|
|
public class MessagesEndpointHandler
|
|
{
|
|
private readonly BrokerConfiguration configuration;
|
|
private readonly BrokerDbContextFactory brokerDbContextFactory;
|
|
private readonly DbContextFactory messengerDbContextFactory;
|
|
|
|
public MessagesEndpointHandler(
|
|
BrokerConfiguration configuration,
|
|
BrokerDbContextFactory brokerDbContextFactory,
|
|
DbContextFactory messengerDbContextFactory)
|
|
{
|
|
this.configuration = configuration;
|
|
this.brokerDbContextFactory = brokerDbContextFactory;
|
|
this.messengerDbContextFactory = messengerDbContextFactory;
|
|
}
|
|
|
|
public async Task<Messages.MessagesResponse> GetMessages(Messages.MessagesRequest request)
|
|
{
|
|
using var broCtx = this.brokerDbContextFactory.CreateDbContext();
|
|
|
|
var brokerMessageIdCollection = broCtx.Messages
|
|
.Where(x => x.BrokerId == request.OwnerBrokerId)
|
|
.Select(x => x.Id)
|
|
.Take(1000)
|
|
.ToArray();
|
|
|
|
using var apiCtx = this.messengerDbContextFactory.CreateDbContext();
|
|
|
|
var messages = apiCtx.Messages
|
|
.Where(x => x.CreatedUtc >= request.SinceUtc && brokerMessageIdCollection.Contains(x.Id))
|
|
.ToArray();
|
|
|
|
var response = new Messages.MessagesResponse
|
|
{
|
|
Messages = messages
|
|
};
|
|
|
|
return response;
|
|
}
|
|
}
|
|
} |