First commit that builds.
This commit is contained in:
81
code/MessengerBroker/Handlers/DataHandler.cs
Normal file
81
code/MessengerBroker/Handlers/DataHandler.cs
Normal file
@ -0,0 +1,81 @@
|
||||
using MessengerApi.Db;
|
||||
using MessengerBroker.Db;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace MessengerBroker.Handlers
|
||||
{
|
||||
public class DataHandler
|
||||
{
|
||||
private readonly Settings _settings;
|
||||
|
||||
public Task<Tuple<MessengerApi.Db.Entities.User[], MessengerApi.Db.Entities.UserRoute[]>> GetLocalUsersAndRoutes()
|
||||
{
|
||||
var foreignUserIds = (Guid[])null;
|
||||
using(var broCtx = new BrokerDbContext(this._settings.MessengerBrokerDbConnectionString))
|
||||
{
|
||||
foreignUserIds = broCtx.Users.Select(x => x.Id).ToArray();
|
||||
}
|
||||
|
||||
using (var apiCtx = new MessengerDbContext(this._settings.MessengerApiDbConnectionString))
|
||||
{
|
||||
var localUsers = apiCtx.Users
|
||||
.Where(x => !foreignUserIds.Any(f => f == x.Id))
|
||||
.ToArray();
|
||||
var localRoutes = apiCtx.UserRoutes
|
||||
.Include(x => x.From)
|
||||
.Include(x => x.To)
|
||||
.Where(x => localUsers.Any(l => l.Id == x.From.Id) && localUsers.Any(l => l.Id == x.To.Id))
|
||||
.ToArray();
|
||||
|
||||
return Task.FromResult(new Tuple<MessengerApi.Db.Entities.User[], MessengerApi.Db.Entities.UserRoute[]>(
|
||||
localUsers,
|
||||
localRoutes));
|
||||
}
|
||||
}
|
||||
|
||||
private Task<MessengerApi.Db.Entities.User[]> GetForeignUsers(Guid brokerId)
|
||||
{
|
||||
var foreignUserIds = (Guid[])null;
|
||||
using (var broCtx = new BrokerDbContext(this._settings.MessengerBrokerDbConnectionString))
|
||||
{
|
||||
foreignUserIds = broCtx.Users.Where(x=>x.BrokerId == brokerId).Select(x => x.Id).ToArray();
|
||||
}
|
||||
|
||||
using (var apiCtx = new MessengerDbContext(this._settings.MessengerApiDbConnectionString))
|
||||
{
|
||||
var localUsers = apiCtx.Users
|
||||
.Where(x => !foreignUserIds.Any(f => f == x.Id))
|
||||
.ToArray();
|
||||
|
||||
return Task.FromResult(localUsers);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<MessengerApi.Db.Entities.Message[]> GetMessages(Guid brokerId, DateTime sinceUtc)
|
||||
{
|
||||
var userIds = (Guid[])null;
|
||||
|
||||
if(brokerId == this._settings.BrokerId)
|
||||
{
|
||||
// Our messages.
|
||||
var users = await this.GetLocalUsersAndRoutes();
|
||||
userIds = users.Item1.Select(x => x.Id).ToArray();
|
||||
}
|
||||
else
|
||||
{
|
||||
var users = await this.GetForeignUsers(brokerId);
|
||||
userIds = users.Select(x => x.Id).ToArray();
|
||||
}
|
||||
|
||||
using (var apiCtx = new MessengerDbContext(this._settings.MessengerApiDbConnectionString))
|
||||
{
|
||||
var messages = apiCtx.Messages
|
||||
.Include(x => x.From).Include(x => x.To)
|
||||
.Where(x => x.CreatedUtc >= sinceUtc && userIds.Contains(x.From.Id))
|
||||
.ToArray();
|
||||
|
||||
return messages;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user