Skip to content

Commit

Permalink
Speed up search some more
Browse files Browse the repository at this point in the history
  • Loading branch information
Simyon264 committed Mar 7, 2024
1 parent b6d6a2c commit 5d63a00
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 12 deletions.
5 changes: 1 addition & 4 deletions Server/Api/ReplayController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,10 +84,7 @@ [FromQuery] string query
searchMode = modeEnum;
}

var replays = _context.Replays
.Include(r => r.RoundEndPlayers);

var found = ReplayParser.SearchReplays(searchMode, query, replays);
var found = ReplayParser.SearchReplays(searchMode, query, _context);
// Order found replays by date
found = found.OrderByDescending(r => r.Date ?? DateTime.MinValue).ToList();

Expand Down
18 changes: 10 additions & 8 deletions Server/ReplayParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -286,26 +286,28 @@ public static Replay ParseReplay(Stream fileStream)
/// <exception cref="NotImplementedException">
/// Thrown when the search mode is not implemented.
/// </exception>
public static List<Replay> SearchReplays(SearchMode mode, string query, IQueryable<Replay> queryable)
public static List<Replay> SearchReplays(SearchMode mode, string query, ReplayDbContext context)
{
var queryable = context.Replays.AsQueryable();

switch (mode)
{
case SearchMode.Map:
return queryable.Where(x => x.Map.Contains(query)).ToList();
return queryable.Where(x => x.Map.ToLower().Contains(query.ToLower())).ToList();
case SearchMode.Gamemode:
return queryable.Where(x => x.Gamemode.Contains(query)).ToList();
return queryable.Where(x => x.Gamemode.ToLower().Contains(query.ToLower())).ToList();
case SearchMode.ServerId:
return queryable.Where(x => x.ServerId.Contains(query)).ToList();
return queryable.Where(x => x.ServerId.ToLower().Contains(query.ToLower())).ToList();
case SearchMode.Guid:
return queryable.Where(x => (x.RoundEndPlayers ?? new List<Player> { }).Any(y => y.PlayerGuid.ToString().Contains(query, StringComparison.CurrentCultureIgnoreCase))).ToList();
case SearchMode.PlayerIcName:
return queryable.Where(x => (x.RoundEndPlayers ?? new List<Player> { }).Any(y => y.PlayerIcName.Contains(query, StringComparison.CurrentCultureIgnoreCase))).ToList();
return queryable.Where(x => (x.RoundEndPlayers ?? new List<Player> { }).Any(y => y.PlayerIcName.ToLower().Contains(query.ToLower()))).ToList();
case SearchMode.PlayerOocName:
return queryable.Where(x => (x.RoundEndPlayers ?? new List<Player> { }).Any(y => y.PlayerOocName.Contains(query, StringComparison.CurrentCultureIgnoreCase))).ToList();
return queryable.Include(replay => replay.RoundEndPlayers).AsEnumerable().Where(x => (x.RoundEndPlayers ?? new List<Player> { }).Any(y => y.PlayerOocName.Contains(query, StringComparison.CurrentCultureIgnoreCase))).ToList();
case SearchMode.RoundEndText:
return queryable.Where(x => x.RoundEndText != null && x.RoundEndText.Contains(query, StringComparison.CurrentCultureIgnoreCase)).ToList();
return queryable.Where(x => x.RoundEndText != null && x.RoundEndText.ToLower().Contains(query.ToLower())).ToList();
case SearchMode.ServerName:
return queryable.Where(x => x.ServerName != null && x.ServerName.Contains(query, StringComparison.CurrentCultureIgnoreCase)).ToList();
return queryable.Where(x => x.ServerName != null && x.ServerName.ToLower().Contains(query.ToLower())).ToList();
default:
throw new NotImplementedException();
}
Expand Down

0 comments on commit 5d63a00

Please sign in to comment.