fix price history missing entries
This commit is contained in:
parent
83026cfcac
commit
6f4700e021
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "PostgreSQL",
|
"db_name": "PostgreSQL",
|
||||||
"query": "SELECT date, canteen, price_students, price_employees, price_guests FROM meals WHERE LOWER(\"name\") = $1 AND is_latest = TRUE",
|
"query": "SELECT date, canteen, price_students, price_employees, price_guests FROM meals WHERE LOWER(\"name\") = $1 AND is_latest = TRUE ORDER BY date DESC LIMIT $2;",
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -31,7 +31,8 @@
|
||||||
],
|
],
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"Left": [
|
"Left": [
|
||||||
"Text"
|
"Text",
|
||||||
|
"Int8"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"nullable": [
|
"nullable": [
|
||||||
|
|
@ -42,5 +43,5 @@
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "56b320a7188c5ee88c869e763f6d23ee37461894a3b20c850908923460c3d3a0"
|
"hash": "48944b01f74bc796d58c26eedf9025b641910dc475b48556855f10f59112e367"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "PostgreSQL",
|
"db_name": "PostgreSQL",
|
||||||
"query": "SELECT date, price_students, price_employees, price_guests FROM meals WHERE canteen = $1 AND LOWER(\"name\") = $2 AND is_latest = TRUE",
|
"query": "SELECT date, price_students, price_employees, price_guests FROM meals WHERE canteen = $1 AND LOWER(\"name\") = $2 AND is_latest = TRUE ORDER BY date DESC LIMIT $3;",
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -27,7 +27,8 @@
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"Left": [
|
"Left": [
|
||||||
"Text",
|
"Text",
|
||||||
"Text"
|
"Text",
|
||||||
|
"Int8"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"nullable": [
|
"nullable": [
|
||||||
|
|
@ -37,5 +38,5 @@
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "1477fded8be083c2d5e29a92f9e558c9855ad90020dc1199bce0d20cca02799d"
|
"hash": "781e98dce280715896a347808d891ff02e2c609c161e9c935a76fa9d63e61696"
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"db_name": "PostgreSQL",
|
"db_name": "PostgreSQL",
|
||||||
"query": "SELECT date, canteen, price_students, price_employees, price_guests FROM meals WHERE canteen = ANY($1) AND LOWER(\"name\") = $2 AND is_latest = TRUE",
|
"query": "SELECT date, canteen, price_students, price_employees, price_guests FROM meals WHERE canteen = ANY($1) AND LOWER(\"name\") = $2 AND is_latest = TRUE ORDER BY date DESC LIMIT $3;",
|
||||||
"describe": {
|
"describe": {
|
||||||
"columns": [
|
"columns": [
|
||||||
{
|
{
|
||||||
|
|
@ -32,7 +32,8 @@
|
||||||
"parameters": {
|
"parameters": {
|
||||||
"Left": [
|
"Left": [
|
||||||
"TextArray",
|
"TextArray",
|
||||||
"Text"
|
"Text",
|
||||||
|
"Int8"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"nullable": [
|
"nullable": [
|
||||||
|
|
@ -43,5 +44,5 @@
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hash": "cdf76d5e7d5d61d3cc61411d526816996885ccbd07237847c57f62cc3b6357db"
|
"hash": "da9537a50cbe6a27836af42e7e333581826a3f87131f001f2db3ef39b88b746e"
|
||||||
}
|
}
|
||||||
|
|
@ -22,6 +22,7 @@ pub fn configure(cfg: &mut ServiceConfig) {
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
struct PriceHistoryQuery {
|
struct PriceHistoryQuery {
|
||||||
canteens: Option<String>,
|
canteens: Option<String>,
|
||||||
|
limit: Option<u32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone, Deserialize, FromRow)]
|
#[derive(Debug, Clone, Deserialize, FromRow)]
|
||||||
|
|
@ -45,6 +46,7 @@ async fn price_history(
|
||||||
.as_deref()
|
.as_deref()
|
||||||
.map(util::parse_canteens_comma_separated);
|
.map(util::parse_canteens_comma_separated);
|
||||||
let dish_name = path.into_inner();
|
let dish_name = path.into_inner();
|
||||||
|
let limit = query.limit.unwrap_or(1000) as i64;
|
||||||
|
|
||||||
if let Some(canteens) = canteens {
|
if let Some(canteens) = canteens {
|
||||||
if canteens.iter().all(Result::is_ok) {
|
if canteens.iter().all(Result::is_ok) {
|
||||||
|
|
@ -54,9 +56,10 @@ async fn price_history(
|
||||||
let canteen = canteens.into_iter().next().expect("length is 1");
|
let canteen = canteens.into_iter().next().expect("length is 1");
|
||||||
|
|
||||||
let res = sqlx::query!(
|
let res = sqlx::query!(
|
||||||
r#"SELECT date, price_students, price_employees, price_guests FROM meals WHERE canteen = $1 AND LOWER("name") = $2 AND is_latest = TRUE"#,
|
r#"SELECT date, price_students, price_employees, price_guests FROM meals WHERE canteen = $1 AND LOWER("name") = $2 AND is_latest = TRUE ORDER BY date DESC LIMIT $3;"#,
|
||||||
canteen.get_identifier(),
|
canteen.get_identifier(),
|
||||||
dish_name.to_lowercase(),
|
dish_name.to_lowercase(),
|
||||||
|
limit,
|
||||||
)
|
)
|
||||||
.fetch_all(db)
|
.fetch_all(db)
|
||||||
.await;
|
.await;
|
||||||
|
|
@ -89,9 +92,10 @@ async fn price_history(
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let res = sqlx::query_as!(PriceHistoryRow,
|
let res = sqlx::query_as!(PriceHistoryRow,
|
||||||
r#"SELECT date, canteen, price_students, price_employees, price_guests FROM meals WHERE canteen = ANY($1) AND LOWER("name") = $2 AND is_latest = TRUE"#,
|
r#"SELECT date, canteen, price_students, price_employees, price_guests FROM meals WHERE canteen = ANY($1) AND LOWER("name") = $2 AND is_latest = TRUE ORDER BY date DESC LIMIT $3;"#,
|
||||||
&canteens.iter().map(|c| c.get_identifier().to_string()).collect_vec(),
|
&canteens.iter().map(|c| c.get_identifier().to_string()).collect_vec(),
|
||||||
dish_name.to_lowercase(),
|
dish_name.to_lowercase(),
|
||||||
|
limit
|
||||||
)
|
)
|
||||||
.fetch_all(db)
|
.fetch_all(db)
|
||||||
.await;
|
.await;
|
||||||
|
|
@ -118,8 +122,9 @@ async fn price_history(
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let res = sqlx::query_as!(PriceHistoryRow,
|
let res = sqlx::query_as!(PriceHistoryRow,
|
||||||
r#"SELECT date, canteen, price_students, price_employees, price_guests FROM meals WHERE LOWER("name") = $1 AND is_latest = TRUE"#,
|
r#"SELECT date, canteen, price_students, price_employees, price_guests FROM meals WHERE LOWER("name") = $1 AND is_latest = TRUE ORDER BY date DESC LIMIT $2;"#,
|
||||||
dish_name.to_lowercase(),
|
dish_name.to_lowercase(),
|
||||||
|
limit as i64,
|
||||||
)
|
)
|
||||||
.fetch_all(db)
|
.fetch_all(db)
|
||||||
.await;
|
.await;
|
||||||
|
|
@ -144,6 +149,7 @@ fn structure_multiple_canteens(
|
||||||
v: Vec<PriceHistoryRow>,
|
v: Vec<PriceHistoryRow>,
|
||||||
) -> BTreeMap<String, BTreeMap<NaiveDate, DishPrices>> {
|
) -> BTreeMap<String, BTreeMap<NaiveDate, DishPrices>> {
|
||||||
v.into_iter()
|
v.into_iter()
|
||||||
|
.sorted_by_cached_key(|r| r.canteen.clone())
|
||||||
.chunk_by(|r| r.canteen.clone())
|
.chunk_by(|r| r.canteen.clone())
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(d, g)| {
|
.map(|(d, g)| {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue