mirror of
https://github.com/RaidMax/IW4M-Admin.git
synced 2025-06-10 15:20:48 -05:00
optimize chat filtering/searching
This commit is contained in:
@ -45,58 +45,53 @@ namespace Stats.Helpers
|
||||
var result = new ResourceQueryHelperResult<MessageResponse>();
|
||||
await using var context = _contextFactory.CreateContext(enableTracking: false);
|
||||
|
||||
if (serverCache == null)
|
||||
{
|
||||
serverCache = await context.Set<EFServer>().ToListAsync();
|
||||
}
|
||||
serverCache ??= await context.Set<EFServer>().ToListAsync();
|
||||
|
||||
if (int.TryParse(query.ServerId, out int serverId))
|
||||
if (int.TryParse(query.ServerId, out var serverId))
|
||||
{
|
||||
query.ServerId = serverCache.FirstOrDefault(_server => _server.ServerId == serverId)?.EndPoint ?? query.ServerId;
|
||||
query.ServerId = serverCache.FirstOrDefault(server => server.ServerId == serverId)?.EndPoint ?? query.ServerId;
|
||||
}
|
||||
|
||||
var iqMessages = context.Set<EFClientMessage>()
|
||||
.Where(message => message.TimeSent >= query.SentAfter)
|
||||
.Where(message => message.TimeSent < query.SentBefore);
|
||||
|
||||
if (query.ClientId != null)
|
||||
if (query.SentAfter is not null)
|
||||
{
|
||||
iqMessages = iqMessages.Where(_message => _message.ClientId == query.ClientId.Value);
|
||||
iqMessages = iqMessages.Where(message => message.TimeSent >= query.SentAfter);
|
||||
}
|
||||
|
||||
if (query.ServerId != null)
|
||||
if (query.ClientId is not null)
|
||||
{
|
||||
iqMessages = iqMessages.Where(_message => _message.Server.EndPoint == query.ServerId);
|
||||
iqMessages = iqMessages.Where(message => message.ClientId == query.ClientId.Value);
|
||||
}
|
||||
|
||||
if (query.ServerId is not null)
|
||||
{
|
||||
iqMessages = iqMessages.Where(message => message.Server.EndPoint == query.ServerId);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(query.MessageContains))
|
||||
{
|
||||
iqMessages = iqMessages.Where(_message => EF.Functions.Like(_message.Message.ToLower(), $"%{query.MessageContains.ToLower()}%"));
|
||||
iqMessages = iqMessages.Where(message => EF.Functions.Like(message.Message.ToLower(), $"%{query.MessageContains.ToLower()}%"));
|
||||
}
|
||||
|
||||
var iqResponse = iqMessages
|
||||
.Select(_message => new MessageResponse
|
||||
.Select(message => new MessageResponse
|
||||
{
|
||||
ClientId = _message.ClientId,
|
||||
ClientName = query.IsProfileMeta ? "" : _message.Client.CurrentAlias.Name,
|
||||
ServerId = _message.ServerId,
|
||||
When = _message.TimeSent,
|
||||
Message = _message.Message,
|
||||
ServerName = query.IsProfileMeta ? "" : _message.Server.HostName,
|
||||
GameName = _message.Server.GameName == null ? Server.Game.IW4 : (Server.Game)_message.Server.GameName.Value,
|
||||
SentIngame = _message.SentIngame
|
||||
ClientId = message.ClientId,
|
||||
ClientName = query.IsProfileMeta ? "" : message.Client.CurrentAlias.Name,
|
||||
ServerId = message.ServerId,
|
||||
When = message.TimeSent,
|
||||
Message = message.Message,
|
||||
ServerName = query.IsProfileMeta ? "" : message.Server.HostName,
|
||||
GameName = message.Server.GameName == null ? Server.Game.IW4 : (Server.Game)message.Server.GameName.Value,
|
||||
SentIngame = message.SentIngame
|
||||
});
|
||||
|
||||
if (query.Direction == SharedLibraryCore.Dtos.SortDirection.Descending)
|
||||
{
|
||||
iqResponse = iqResponse.OrderByDescending(_message => _message.When);
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
iqResponse = iqResponse.OrderBy(_message => _message.When);
|
||||
}
|
||||
|
||||
iqResponse = query.Direction == SharedLibraryCore.Dtos.SortDirection.Descending
|
||||
? iqResponse.OrderByDescending(message => message.When)
|
||||
: iqResponse.OrderBy(message => message.When);
|
||||
|
||||
var resultList = await iqResponse
|
||||
.Skip(query.Offset)
|
||||
.Take(query.Count)
|
||||
@ -115,13 +110,13 @@ namespace Stats.Helpers
|
||||
{
|
||||
var quickMessages = _defaultSettings
|
||||
.QuickMessages
|
||||
.First(_qm => _qm.Game == message.GameName);
|
||||
.First(qm => qm.Game == message.GameName);
|
||||
message.Message = quickMessages.Messages[message.Message.Substring(1)];
|
||||
message.IsQuickMessage = true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
message.Message = message.Message.Substring(1);
|
||||
message.Message = message.Message[1..];
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user