alright
This commit is contained in:
parent
c645b0f1d4
commit
39ef5c6646
79 changed files with 5660 additions and 2199 deletions
|
|
@ -63,7 +63,20 @@ const DASHBOARD_POI_GROUPS: &[(&str, &[&str])] = &[
|
|||
("Groceries", GROCERY_DASHBOARD_CATEGORIES),
|
||||
("Food & Drink", &["Café", "Restaurant", "Pub", "Fast Food"]),
|
||||
("Green Space", &["Park", "Playground"]),
|
||||
("Education", &["School"]),
|
||||
(
|
||||
"Education",
|
||||
&[
|
||||
"Nursery school",
|
||||
"Primary school",
|
||||
"Secondary school",
|
||||
"All-through school",
|
||||
"Sixth form",
|
||||
"Further education college",
|
||||
"University",
|
||||
"Special school",
|
||||
"School",
|
||||
],
|
||||
),
|
||||
(
|
||||
"Health",
|
||||
&["GP Surgery", "Pharmacy", "Dentist", "Hospital & Clinic"],
|
||||
|
|
@ -119,6 +132,21 @@ fn canonical_poi_category(category: &str) -> &str {
|
|||
}
|
||||
}
|
||||
|
||||
/// Categories the pipeline emits for the GIAS-derived school POIs. A bare
|
||||
/// `poi=School` URL (predating the per-phase split) is expanded to all of these
|
||||
/// so bookmarked links keep showing schools.
|
||||
const SCHOOL_CATEGORY_ALIASES: &[&str] = &[
|
||||
"Nursery school",
|
||||
"Primary school",
|
||||
"Secondary school",
|
||||
"All-through school",
|
||||
"Sixth form",
|
||||
"Further education college",
|
||||
"University",
|
||||
"Special school",
|
||||
"School",
|
||||
];
|
||||
|
||||
pub fn resolve_poi_category_filter(category_values: &[String], categories: &str) -> FxHashSet<u16> {
|
||||
let mut selected = FxHashSet::default();
|
||||
for part in categories.split(',') {
|
||||
|
|
@ -126,6 +154,12 @@ pub fn resolve_poi_category_filter(category_values: &[String], categories: &str)
|
|||
if category.is_empty() {
|
||||
continue;
|
||||
}
|
||||
if category == "School" {
|
||||
for alias in SCHOOL_CATEGORY_ALIASES {
|
||||
add_category_filter_index(category_values, alias, &mut selected);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
add_category_filter_index(category_values, category, &mut selected);
|
||||
}
|
||||
selected
|
||||
|
|
@ -174,6 +208,8 @@ pub struct SchoolMetadata {
|
|||
pub telephone: Option<String>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub head_name: Option<String>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub ofsted_rating: Option<String>,
|
||||
}
|
||||
|
||||
pub struct POIData {
|
||||
|
|
@ -350,6 +386,8 @@ fn build_school_meta(
|
|||
let website = extract_optional_str_col(df, "school_website")?.unwrap_or_default();
|
||||
let telephone = extract_optional_str_col(df, "school_telephone")?.unwrap_or_default();
|
||||
let head_name = extract_optional_str_col(df, "school_head_name")?.unwrap_or_default();
|
||||
let ofsted_rating =
|
||||
extract_optional_str_col(df, "school_ofsted_rating")?.unwrap_or_default();
|
||||
|
||||
let fetch_str = |col: &Vec<Option<String>>, row: usize| -> Option<String> {
|
||||
col.get(row).cloned().flatten()
|
||||
|
|
@ -390,6 +428,7 @@ fn build_school_meta(
|
|||
website: fetch_str(&website, row),
|
||||
telephone: fetch_str(&telephone, row),
|
||||
head_name: fetch_str(&head_name, row),
|
||||
ofsted_rating: fetch_str(&ofsted_rating, row),
|
||||
});
|
||||
}
|
||||
Ok((idx, meta))
|
||||
|
|
@ -578,6 +617,26 @@ mod tests {
|
|||
assert!(selected.is_empty());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn legacy_school_filter_expands_to_all_school_categories() {
|
||||
// Bookmarked URLs from before the per-phase split sent `poi=School`;
|
||||
// they should still match every school category that's loaded.
|
||||
let values = vec![
|
||||
"Primary school".to_string(),
|
||||
"Secondary school".to_string(),
|
||||
"University".to_string(),
|
||||
"Tesco".to_string(),
|
||||
];
|
||||
|
||||
let selected = resolve_poi_category_filter(&values, "School");
|
||||
|
||||
assert!(selected.contains(&0));
|
||||
assert!(selected.contains(&1));
|
||||
assert!(selected.contains(&2));
|
||||
assert!(!selected.contains(&3));
|
||||
assert_eq!(selected.len(), 3);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn coop_category_aliases_resolve_to_single_category() {
|
||||
let values = vec!["Co-op".to_string(), "Tesco".to_string()];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue