Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Api/Controllers/HttpUtilFunctions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ public static class HttpUtilFunctions
{
public static string? GetRealIpAddress(this HttpRequest httpRequest)
{
var forwardedChain = httpRequest.HttpContext.Request.Headers["X-Forwarded-For"].First();
var forwardedChain = httpRequest.HttpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault();
if (string.IsNullOrEmpty(forwardedChain)) return httpRequest.HttpContext.Connection.RemoteIpAddress?.ToString();
var clientIp = forwardedChain.Split(',').First();
return clientIp;
Expand Down
27 changes: 11 additions & 16 deletions src/Application/Services/GemService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,18 +68,13 @@ private GemData[] FilterGemData(GemDataQuery query)

private static string PreFilterGemDataQuery(GemDataQuery query)
{
const string isAlternateQuality = """
(LOWER("Name") LIKE 'anomalous%'
OR LOWER("Name") LIKE 'divergent%'
OR LOWER("Name") LIKE 'phantasmal%')
""";
const string isVaal = """LOWER("Name") LIKE 'vaal%' """;

const string isExceptional = """
(LOWER("Name") LIKE '%enhance%'
OR LOWER("Name") LIKE '%empower%'
OR LOWER("Name") LIKE '%enlighten%')
""";
(LOWER("Name") LIKE '%enhance%'
OR LOWER("Name") LIKE '%empower%'
OR LOWER("Name") LIKE '%enlighten%')
""";
const string isAwakened = """LOWER("Name") LIKE 'awakened%' """;
const string isSupport = """LOWER("Name") LIKE '%support' """;
var isGemTypeMatching = query.GemType switch
Expand All @@ -93,12 +88,11 @@ OR LOWER("Name") LIKE '%enlighten%')
};

return $"""
SELECT * FROM "GemData"
WHERE LOWER("Name") LIKE '%{query.SearchText}%'
AND ({query.ShowAlternateQuality} OR NOT {isAlternateQuality})
AND ({query.ShowVaal} OR NOT {isVaal})
AND {isGemTypeMatching}
""";
SELECT * FROM "GemData"
WHERE LOWER("Name") LIKE '%{query.SearchText}%'
AND ({query.ShowVaal} OR NOT {isVaal})
AND {isGemTypeMatching}
""";
}

private static bool PostFilterGemData(GemData gemData, GemDataQuery query, decimal averageTempleCost)
Expand All @@ -122,5 +116,6 @@ private static decimal OrderGemData(GemData gemData, Sort sort, decimal averageT
};
}

[GeneratedRegex("[^a-z ]")] private static partial Regex SqlSanitizeRegex();
[GeneratedRegex("[^a-z ]")]
private static partial Regex SqlSanitizeRegex();
}
1 change: 0 additions & 1 deletion src/Domain/QueryParameters/GemDataQuery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ public class GemDataQuery
public Sort Sort { get; init; } = Sort.AverageProfitPerTryDesc;
public GemType GemType { get; init; } = GemType.All;
public bool OnlyShowProfitable { get; init; }
public bool ShowAlternateQuality { get; init; }
public bool ShowVaal { get; set; } = false;
public decimal? PricePerTryFrom { get; set; }
public decimal? PricePerTryTo { get; set; }
Expand Down
8 changes: 1 addition & 7 deletions src/Web/Shared/Components/Filter.razor
Original file line number Diff line number Diff line change
Expand Up @@ -99,13 +99,7 @@
</div>
</div>
<div class="w-100 mt-2 d-flex justify-content-between">
<div class="form-check ps-0 m-0 w-50">
<input class="form-check-input" type="checkbox" id="showAlternateQuality" checked="@FilterValues.ShowAlternateQuality" @onchange="UpdateShowAlternateQuality">
<label class="form-check-label" for="showAlternateQuality">
Alternate Quality
</label>
</div>
<div class="form-check ps-0 m-0 w-50 d-flex justify-content-end">
<div class="form-check ps-0 m-0 w-100 d-flex justify-content-end">
<input class="form-check-input" type="checkbox" id="onlyProfitable" checked="@FilterValues.OnlyShowProfitable" @onchange="UpdateOnlyShowProfitable">
<label class="form-check-label" for="onlyProfitable">
Only Profitable
Expand Down
35 changes: 21 additions & 14 deletions src/Web/Shared/Components/Filter.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,21 +41,34 @@ private string TempleCostString()
private string CurrencyValueString()
{
return FilterValues.CurrencyValue is null && FilterValues.Currency is not null
? ToStringOrBlank(FilterValues.Currency.ChaosEquivalent)
: ToStringOrBlank(FilterValues.CurrencyValue);
? ToStringOrBlank(FilterValues.Currency.ChaosEquivalent)
: ToStringOrBlank(FilterValues.CurrencyValue);
}

private void ToggleFilters() { FiltersExpanded = !FiltersExpanded; }
private void ToggleFilters()
{
FiltersExpanded = !FiltersExpanded;
}

private static string ToStringOrBlank(decimal? value)
{
return value is null or decimal.MinValue or decimal.MaxValue ? "" : value.Round(2)!;
}

private string CurrencyValue(decimal? value) { return ToStringOrBlank(value / ConversionRatio()); }
private string CurrencyValue(decimal? value)
{
return ToStringOrBlank(value / ConversionRatio());
}

private static IEnumerable<GemType> GemTypes()
{
return Enum.GetValues<GemType>();
}

private static IEnumerable<GemType> GemTypes() { return Enum.GetValues<GemType>(); }
private static IEnumerable<Sort> Sorts() { return Enum.GetValues<Sort>(); }
private static IEnumerable<Sort> Sorts()
{
return Enum.GetValues<Sort>();
}

private string TempleTradeUrl()
{
Expand Down Expand Up @@ -103,7 +116,8 @@ private decimal ConversionRatio()
return FilterValues.CurrencyValue ?? FilterValues.Currency?.ChaosEquivalent ?? 1;
}

[GeneratedRegex("(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+")] private static partial Regex JsonMinifyRegex();
[GeneratedRegex("(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+")]
private static partial Regex JsonMinifyRegex();

#region Update Callback

Expand Down Expand Up @@ -157,13 +171,6 @@ private async Task UpdateCurrency(string id)
await SaveFilterValues();
}

private async Task UpdateShowAlternateQuality(ChangeEventArgs args)
{
if (args.Value is null || !bool.TryParse(args.Value.ToString(), out var value)) return;
FilterValues.ShowAlternateQuality = value;
await SaveFilterValues();
}

private async Task UpdateOnlyShowProfitable(ChangeEventArgs args)
{
if (args.Value is null || !bool.TryParse(args.Value.ToString(), out var value)) return;
Expand Down
2 changes: 0 additions & 2 deletions src/Web/Shared/Model/FilterValues.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ public class FilterValues
public decimal? PricePerTryFrom { get; set; }
public decimal? PricePerTryTo { get; set; }
public bool OnlyShowProfitable { get; set; }
public bool ShowAlternateQuality { get; set; }
public decimal? CurrencyValue { get; set; }
public decimal? TempleCost { get; set; }
public Currency? Currency { get; set; }
Expand All @@ -23,7 +22,6 @@ public GemDataQuery ToQuery()
SearchText = Gem,
Sort = Sort,
GemType = GemType,
ShowAlternateQuality = ShowAlternateQuality,
OnlyShowProfitable = OnlyShowProfitable,
PricePerTryFrom = PricePerTryFrom,
PricePerTryTo = PricePerTryTo
Expand Down
25 changes: 13 additions & 12 deletions src/Web/Util/ExtensionMethods.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,20 +59,20 @@ public static string ToPrettyString(this GemType gemType)
public static string ToQueryString(this GemDataQuery gemDataQuery, PageRequest? page)
{
return page is null
? gemDataQuery.ToQueryString()
: $"{page.ToQueryString()}{gemDataQuery.ToQueryString(false)}";
? gemDataQuery.ToQueryString()
: $"{page.ToQueryString()}{gemDataQuery.ToQueryString(false)}";
}

public static string ToQueryString(this GemDataQuery gemDataQuery, bool questionMark = true)
{
var start = questionMark ? "?" : "&";
var searchText = gemDataQuery.SearchText == string.Empty ? "" : $"&searchText={gemDataQuery.SearchText}";
var pricePerTryFrom = gemDataQuery.PricePerTryFrom is null
? ""
: $"&pricePerTryFrom={gemDataQuery.PricePerTryFrom}";
? ""
: $"&pricePerTryFrom={gemDataQuery.PricePerTryFrom}";
var pricePerTryTo = gemDataQuery.PricePerTryTo is null ? "" : $"&pricePerTryTo={gemDataQuery.PricePerTryTo}";
return
$"{start}sort={gemDataQuery.Sort}&gemType={gemDataQuery.GemType}&showAlternateQuality={gemDataQuery.ShowAlternateQuality}&onlyShowProfitable={gemDataQuery.OnlyShowProfitable}&showVaal={gemDataQuery.ShowVaal}{searchText}{pricePerTryFrom}{pricePerTryTo}";
$"{start}sort={gemDataQuery.Sort}&gemType={gemDataQuery.GemType}&onlyShowProfitable={gemDataQuery.OnlyShowProfitable}&showVaal={gemDataQuery.ShowVaal}{searchText}{pricePerTryFrom}{pricePerTryTo}";
}

public static string ToQueryString(this PageRequest pageRequest)
Expand Down Expand Up @@ -107,18 +107,18 @@ public static string TradeQuery(this GemTradeData gemTradeData, bool accurateLev
var minGemLevel = accurateLevel ? gemTradeData.GemLevel : int.MinValue;
var maxGemLevel = accurateLevel ? gemTradeData.GemLevel : int.MaxValue;
var levelText = !accurateLevel
? string.Empty
: $@",""gem_level"": {{""min"": {minGemLevel},""max"": {maxGemLevel}}}";
? string.Empty
: $@",""gem_level"": {{""min"": {minGemLevel},""max"": {maxGemLevel}}}";

var minGemQuality = accurateQuality ? gemTradeData.GemQuality : int.MinValue;
var maxGemQuality = accurateQuality ? gemTradeData.GemQuality : int.MaxValue;
var qualityText = !accurateQuality
? string.Empty
: $@",""quality"": {{""min"": {minGemQuality},""max"": {maxGemQuality}}}";
? string.Empty
: $@",""quality"": {{""min"": {minGemQuality},""max"": {maxGemQuality}}}";

var gemAlternateQualityText = gemAlternateQuality < 0
? string.Empty
: $@",""gem_alternate_quality"": {{""option"": ""{gemAlternateQuality}""}},";
? string.Empty
: $@",""gem_alternate_quality"": {{""option"": ""{gemAlternateQuality}""}},";

return JsonMinifyRegex().Replace($@"
{{
Expand All @@ -139,5 +139,6 @@ public static string TradeQuery(this GemTradeData gemTradeData, bool accurateLev
", "$1");
}

[GeneratedRegex("(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+")] private static partial Regex JsonMinifyRegex();
[GeneratedRegex("(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+")]
private static partial Regex JsonMinifyRegex();
}
2 changes: 0 additions & 2 deletions test/Web.Test/Shared/Model/FilterValuesTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ public void ToQuery()
Sort = Sort.CostPerTryDesc,
GemType = GemType.Exceptional,
OnlyShowProfitable = true,
ShowAlternateQuality = true,
PricePerTryFrom = 0m,
PricePerTryTo = 654m
};
Expand All @@ -26,7 +25,6 @@ public void ToQuery()
result.Sort.Should().Be(source.Sort);
result.GemType.Should().Be(source.GemType);
result.OnlyShowProfitable.Should().Be(source.OnlyShowProfitable);
result.ShowAlternateQuality.Should().Be(source.ShowAlternateQuality);
result.PricePerTryFrom.Should().Be(source.PricePerTryFrom);
result.PricePerTryTo.Should().Be(source.PricePerTryTo);
result.ShowVaal.Should().BeFalse();
Expand Down