mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-10-06 12:22:08 +00:00
fix(vendors): normalize location labels
This commit is contained in:
parent
bf7d1fcdf5
commit
4f4e3997ba
4 changed files with 20 additions and 8 deletions
|
|
@ -587,7 +587,7 @@ public class VendorDataServiceTests
|
||||||
{
|
{
|
||||||
Name = "Addr Only Co",
|
Name = "Addr Only Co",
|
||||||
NormalizedName = "addr only co",
|
NormalizedName = "addr only co",
|
||||||
Address = "123 Main St"
|
Address = " 123 Main St "
|
||||||
};
|
};
|
||||||
var soloCompany = new VendorCompany
|
var soloCompany = new VendorCompany
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -689,7 +689,7 @@ public class VendorServiceTests
|
||||||
data.Setup(x => x.GetCompaniesForFacetsAsync(null, It.IsAny<CancellationToken>()))
|
data.Setup(x => x.GetCompaniesForFacetsAsync(null, It.IsAny<CancellationToken>()))
|
||||||
.ReturnsAsync(new List<VendorCompany>
|
.ReturnsAsync(new List<VendorCompany>
|
||||||
{
|
{
|
||||||
new() { Id = 1, Name = "Address Only Co", Address = "789 Warehouse Row" },
|
new() { Id = 1, Name = "Address Only Co", Address = " 789 Warehouse Row " },
|
||||||
new() { Id = 2, Name = "City State Co", Address = "12 Ignored Way", City = "Denver", State = "CO" },
|
new() { Id = 2, Name = "City State Co", Address = "12 Ignored Way", City = "Denver", State = "CO" },
|
||||||
new() { Id = 3, Name = "Nowhere Co" }
|
new() { Id = 3, Name = "Nowhere Co" }
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -514,16 +514,27 @@ namespace SeaHaven.DataServices.Implementation
|
||||||
var stateBlank = IsBlank(state);
|
var stateBlank = IsBlank(state);
|
||||||
var addressBlank = IsBlank(address);
|
var addressBlank = IsBlank(address);
|
||||||
|
|
||||||
var cityCommaState = Concat(Concat(city, Expression.Constant(", ")), state);
|
var cityLabel = Expression.Condition(
|
||||||
|
cityBlank,
|
||||||
|
Expression.Constant(string.Empty),
|
||||||
|
Expression.Call(city, nameof(string.Trim), Type.EmptyTypes));
|
||||||
|
var stateLabel = Expression.Condition(
|
||||||
|
stateBlank,
|
||||||
|
Expression.Constant(string.Empty),
|
||||||
|
Expression.Call(state, nameof(string.Trim), Type.EmptyTypes));
|
||||||
|
var cityCommaState = Concat(Concat(cityLabel, Expression.Constant(", ")), stateLabel);
|
||||||
|
|
||||||
var onlyState = Expression.Condition(stateBlank, Expression.Constant(string.Empty), state);
|
var onlyState = Expression.Condition(stateBlank, Expression.Constant(string.Empty), stateLabel);
|
||||||
var cityOrBoth = Expression.Condition(stateBlank, city, cityCommaState);
|
var cityOrBoth = Expression.Condition(stateBlank, cityLabel, cityCommaState);
|
||||||
var cityStateLabel = Expression.Condition(cityBlank, onlyState, cityOrBoth);
|
var cityStateLabel = Expression.Condition(cityBlank, onlyState, cityOrBoth);
|
||||||
|
|
||||||
// Exact Location label: City/State whenever either structured value is
|
// Exact Location label: City/State whenever either structured value is
|
||||||
// present, otherwise the (projected) Address. The blank guard keeps the
|
// present, otherwise the (projected) Address. The blank guard keeps the
|
||||||
// label non-null so the caller's ToLower never sees a null reference.
|
// label non-null so the caller's ToLower never sees a null reference.
|
||||||
var addressLabel = Expression.Condition(addressBlank, Expression.Constant(string.Empty), address);
|
var addressLabel = Expression.Condition(
|
||||||
|
addressBlank,
|
||||||
|
Expression.Constant(string.Empty),
|
||||||
|
Expression.Call(address, nameof(string.Trim), Type.EmptyTypes));
|
||||||
return Expression.Condition(Expression.AndAlso(cityBlank, stateBlank), addressLabel, cityStateLabel);
|
return Expression.Condition(Expression.AndAlso(cityBlank, stateBlank), addressLabel, cityStateLabel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -693,8 +693,9 @@ namespace SeaHaven.Services.Implementation
|
||||||
City = c.City,
|
City = c.City,
|
||||||
State = c.State,
|
State = c.State,
|
||||||
Label = !string.IsNullOrWhiteSpace(c.City) || !string.IsNullOrWhiteSpace(c.State)
|
Label = !string.IsNullOrWhiteSpace(c.City) || !string.IsNullOrWhiteSpace(c.State)
|
||||||
? string.Join(", ", new[] { c.City, c.State }.Where(value => !string.IsNullOrWhiteSpace(value)))
|
? string.Join(", ", new[] { c.City?.Trim(), c.State?.Trim() }
|
||||||
: c.Address
|
.Where(value => !string.IsNullOrWhiteSpace(value)))
|
||||||
|
: c.Address!.Trim()
|
||||||
})
|
})
|
||||||
.DistinctBy(location => location.Label, StringComparer.OrdinalIgnoreCase)
|
.DistinctBy(location => location.Label, StringComparer.OrdinalIgnoreCase)
|
||||||
.OrderBy(location => location.Label);
|
.OrderBy(location => location.Label);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue