Filter on airport category
This commit is contained in:
@@ -41,18 +41,32 @@ pub struct Airports {
|
||||
}
|
||||
|
||||
impl Airports {
|
||||
pub fn find_all(bounds: Option<Polygon<Point>>, limit: i32, page: i32) -> Result<Vec<Self>, CustomError> {
|
||||
pub fn find_all(bounds: Option<Polygon<Point>>, category: Option<String>, limit: i32, page: i32) -> Result<Vec<Self>, CustomError> {
|
||||
let mut conn = db::connection()?;
|
||||
let airports = airports::table
|
||||
.limit(limit as i64)
|
||||
.filter(airports::id.gt(page * limit).and(match bounds {
|
||||
Some(b) => st_contains(b, airports::point),
|
||||
None => {
|
||||
let polygon: Polygon<Point> = Polygon::new(Some(4326));
|
||||
st_contains(polygon, airports::point)
|
||||
}
|
||||
}))
|
||||
.load::<Airports>(&mut conn)?;
|
||||
let airports;
|
||||
if let Some(category) = category {
|
||||
airports = airports::table
|
||||
.limit(limit as i64)
|
||||
.filter(airports::id.gt(page * limit).and(match bounds {
|
||||
Some(b) => st_contains(b, airports::point),
|
||||
None => {
|
||||
let polygon: Polygon<Point> = Polygon::new(Some(4326));
|
||||
st_contains(polygon, airports::point)
|
||||
}
|
||||
}).and(airports::category.eq(category))).load::<Airports>(&mut conn)?;
|
||||
} else {
|
||||
airports = airports::table
|
||||
.order(airports::category.asc())
|
||||
.limit(limit as i64)
|
||||
.filter(airports::id.gt(page * limit).and(match bounds {
|
||||
Some(b) => st_contains(b, airports::point),
|
||||
None => {
|
||||
let polygon: Polygon<Point> = Polygon::new(Some(4326));
|
||||
st_contains(polygon, airports::point)
|
||||
}
|
||||
}))
|
||||
.load::<Airports>(&mut conn)?;
|
||||
}
|
||||
Ok(airports)
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ struct FindAllParams {
|
||||
ne_lon: f64,
|
||||
sw_lat: f64,
|
||||
sw_lon: f64,
|
||||
category: Option<String>,
|
||||
limit: i32,
|
||||
page: i32
|
||||
}
|
||||
@@ -36,7 +37,12 @@ async fn find_all(req: HttpRequest) -> HttpResponse {
|
||||
polygon.add_point(Point { x: params.ne_lon, y: params.ne_lat, srid: Some(4326) });
|
||||
polygon.add_point(Point { x: params.sw_lon, y: params.ne_lat, srid: Some(4326) });
|
||||
polygon.add_point(Point { x: params.sw_lon, y: params.sw_lat, srid: Some(4326) });
|
||||
match web::block(move || Airports::find_all(Some(polygon), params.limit, params.page)).await.unwrap() {
|
||||
let category = match ¶ms.category {
|
||||
Some(c) => Some(c.to_string()),
|
||||
None => None
|
||||
};
|
||||
|
||||
match web::block(move || Airports::find_all(Some(polygon), category, params.limit, params.page)).await.unwrap() {
|
||||
Ok(a) => HttpResponse::Ok().json(a),
|
||||
Err(err) => {
|
||||
error!("{}", err);
|
||||
|
||||
@@ -150,6 +150,7 @@ impl Metars {
|
||||
Ok(m) => m,
|
||||
Err(err) => return Err(CustomError { error_status_code: 500, error_message: format!("{}", err) })
|
||||
};
|
||||
|
||||
fn get_missing_metar_icaos(db_metars: &Vec<Metars>, station_icaos: Vec<&str>) -> Vec<String> {
|
||||
let mut missing_metar_icaos: Vec<String> = vec![];
|
||||
let current_time = chrono::Local::now().naive_local().timestamp();
|
||||
|
||||
Reference in New Issue
Block a user