Files
messengerapi.Broker/code/MessengerBroker/Handlers/Endpoint/UsersEndpointHandler.cs

70 lines
2.4 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 UsersEndpointHandler
{
private readonly BrokerConfiguration configuration;
private readonly BrokerDbContextFactory brokerDbContextFactory;
private readonly DbContextFactory messengerDbContextFactory;
public UsersEndpointHandler(
BrokerConfiguration configuration,
BrokerDbContextFactory brokerDbContextFactory,
DbContextFactory messengerDbContextFactory)
{
this.configuration = configuration;
this.brokerDbContextFactory = brokerDbContextFactory;
this.messengerDbContextFactory = messengerDbContextFactory;
}
public Task<Users.UsersResponse> GetUsers()
{
var foreignUserIds = (Guid[])null;
using(var broCtx = this.brokerDbContextFactory.CreateDbContext())
{
foreignUserIds = broCtx.Users.Select(x => x.Id).ToArray();
}
using (var apiCtx = this.messengerDbContextFactory.CreateDbContext())
{
var localUsers = apiCtx.Users
.Where(x => !foreignUserIds.Any(f => f == x.Id))
.ToArray();
var localUserIds = localUsers
.Select(x => x.Id)
.ToArray();
var localRoutes = apiCtx.UserRoutes
.Include(x => x.From)
.Include(x => x.To)
.Where(x => localUserIds.Contains(x.From.Id) || localUserIds.Contains(x.To.Id))
.ToArray();
return Task.FromResult(new Users.UsersResponse
{
Users = localUsers.Select(x => new Users.UsersResponse.User
{
Id = x.Id,
ApiKey = x.ApiKey,
IsEnabled = x.IsEnabled,
Name = x.Name
}).ToArray(),
UserRoutes = localRoutes.Select(x => new Users.UsersResponse.UserRoute
{
Id = x.Id,
FromId = x.From.Id,
ToId = x.To.Id
}).ToArray()
});
}
}
}
}