Shopping list items can now be checked/unchecked

This commit is contained in:
Greg Burri 2025-02-12 23:13:48 +01:00
parent 3a3288bc93
commit a1fd63ad08
14 changed files with 940 additions and 790 deletions

View file

@ -200,7 +200,7 @@ WHERE [Step].[id] IN ({}) AND ([user_id] = $1 OR (SELECT [is_admin] FROM [User]
) -> Result<bool> {
sqlx::query_scalar(
r#"
SELECT COUNT(*)
SELECT COUNT(*) = 1
FROM [Recipe]
INNER JOIN [User] ON [User].[id] = [Recipe].[user_id]
INNER JOIN [Group] ON [Group].[recipe_id] = [Recipe].[id]
@ -244,6 +244,21 @@ WHERE [Ingredient].[id] IN ({}) AND
Ok(query.fetch_one(&self.pool).await? == ingredients_ids.len() as u64)
}
pub async fn can_edit_shopping_list_entry(&self, user_id: i64, entry_id: i64) -> Result<bool> {
sqlx::query_scalar(
r#"
SELECT COUNT(*) = 1
FROM [ShoppingEntry]
WHERE [id] = $1 AND ([user_id] = $2 OR (SELECT [is_admin] FROM [User] WHERE [id] = $2))
"#,
)
.bind(entry_id)
.bind(user_id)
.fetch_one(&self.pool)
.await
.map_err(DBError::from)
}
pub async fn get_recipe(&self, id: i64, complete: bool) -> Result<Option<model::Recipe>> {
match sqlx::query_as::<_, model::Recipe>(
r#"

View file

@ -27,7 +27,7 @@ FROM [ShoppingEntry]
LEFT JOIN [RecipeScheduled] ON [RecipeScheduled].[id] = [ShoppingEntry].[recipe_scheduled_id]
LEFT JOIN [Recipe] ON [Recipe].[id] = [RecipeScheduled].[recipe_id]
WHERE [ShoppingEntry].[user_id] = $1
ORDER BY [is_checked], [recipe_id], [name]
ORDER BY [is_checked], [recipe_id], [name], [ShoppingEntry].[id]
"#,
)
.bind(user_id)
@ -35,4 +35,14 @@ ORDER BY [is_checked], [recipe_id], [name]
.await
.map_err(DBError::from)
}
pub async fn set_entry_checked(&self, entry_id: i64, is_checked: bool) -> Result<()> {
sqlx::query("UPDATE [ShoppingEntry] SET [is_checked] = $2 WHERE [id] = $1")
.bind(entry_id)
.bind(is_checked)
.execute(&self.pool)
.await
.map(|_| ())
.map_err(DBError::from)
}
}