SEARCH-1: separator-insensitive NameSearch + OriginBreeder (Herkunft) filter
- Gerbil.NameSearch (lowercase, strip whitespace/.-_) auto-synced in ApplicationContext .SaveChanges; Gridify-filterable so 'clan kleine chaoten' matches 'Clan-Kleine-Chaoten' (client strips separators the same way). GerbilSearch.Normalize shared helper. - Gerbil.OriginBreeder (free-text Herkunft) on DTO+Input, set by the FEAT-8 import from the source Zucht (imported animals have no OriginContact). Gridify-filterable. - GET /gerbils/breeders: distinct non-empty OriginBreeder values for the Herkunft dropdown. - Migration AddSearchFields (+ NameSearch backfill SQL for existing rows).
This commit is contained in:
@@ -50,5 +50,27 @@ namespace GerbilManagerWebAPI.Models
|
||||
/// <summary>Raw import payload preserved verbatim (rawGenotype + unmappedTokens like
|
||||
/// the Uw locus / WFNZ markers) so nothing from the spreadsheets is lost. JSON text.</summary>
|
||||
public string? RawImportData { get; set; }
|
||||
|
||||
/// <summary>Breeder/Herkunft (cattery/Zucht) as free text — set by the FEAT-8 import from
|
||||
/// the source Zucht (imported animals have no OriginContact). Gridify-filterable; the
|
||||
/// distinct values back the Tiere "Herkunft" dropdown (GET /gerbils/breeders).</summary>
|
||||
public string? OriginBreeder { get; set; }
|
||||
|
||||
/// <summary>Separator-insensitive search key: Name lowercased with whitespace/.-_ stripped.
|
||||
/// Kept in sync automatically on save (see ApplicationContext.SaveChanges). Gridify-filterable
|
||||
/// so "clan kleine chaoten" matches "Clan-Kleine-Chaoten" (client strips separators too).</summary>
|
||||
public string? NameSearch { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>Shared normalisation for the separator-insensitive name search.</summary>
|
||||
public static class GerbilSearch
|
||||
{
|
||||
public static string Normalize(string? name)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name)) return "";
|
||||
var chars = name.ToLowerInvariant()
|
||||
.Where(c => !char.IsWhiteSpace(c) && c != '-' && c != '.' && c != '_');
|
||||
return new string(chars.ToArray());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user