Rename 'published' to 'public' (for recipe)
This commit is contained in:
parent
eaef6dc77e
commit
4f739593b8
20 changed files with 92 additions and 91 deletions
28
Cargo.lock
generated
28
Cargo.lock
generated
|
|
@ -123,9 +123,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "askama"
|
||||
version = "0.13.0-pre.0"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e2034a9f5ce003854892404493ee3c6c7126b606fdc3b7f095b3de96bb91692"
|
||||
checksum = "9a4e46abb203e00ef226442d452769233142bbfdd79c3941e84c8e61c4112543"
|
||||
dependencies = [
|
||||
"askama_derive",
|
||||
"itoa",
|
||||
|
|
@ -136,9 +136,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "askama_derive"
|
||||
version = "0.13.0-pre.0"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4093a6764e6fcf280e6fadbcde60614fa0b49cdbf60d823696a68b05f8356a80"
|
||||
checksum = "54398906821fd32c728135f7b351f0c7494ab95ae421d41b6f5a020e158f28a6"
|
||||
dependencies = [
|
||||
"askama_parser",
|
||||
"basic-toml",
|
||||
|
|
@ -153,9 +153,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "askama_parser"
|
||||
version = "0.13.0-pre.0"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "035b5b741f7d44d37a6fef913426b15f3ad5a4afe63b35ce9fce44e6ce55d0d3"
|
||||
checksum = "cf315ce6524c857bb129ff794935cf6d42c82a6cff60526fe2a63593de4d0d4f"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
"serde",
|
||||
|
|
@ -414,9 +414,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.5.34"
|
||||
version = "4.5.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e958897981290da2a852763fe9cdb89cd36977a5d729023127095fa94d95e2ff"
|
||||
checksum = "d8aa86934b44c19c50f87cc2790e19f54f7a67aedb64101c2e1a2e5ecfb73944"
|
||||
dependencies = [
|
||||
"clap_builder",
|
||||
"clap_derive",
|
||||
|
|
@ -424,9 +424,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.5.34"
|
||||
version = "4.5.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "83b0f35019843db2160b5bb19ae09b4e6411ac33fc6a712003c33e03090e2489"
|
||||
checksum = "2414dbb2dd0695280da6ea9261e327479e9d37b0630f6b53ba2a11c60c679fd9"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
|
|
@ -2081,9 +2081,9 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
|
|||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "1.0.3"
|
||||
version = "1.0.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e56a18552996ac8d29ecc3b190b4fdbb2d91ca4ec396de7bbffaf43f3d637e96"
|
||||
checksum = "d97817398dd4bb2e6da002002db259209759911da105da92bec29ccb12cf58bf"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"errno",
|
||||
|
|
@ -2138,9 +2138,9 @@ checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
|
|||
|
||||
[[package]]
|
||||
name = "scanf"
|
||||
version = "1.3.0"
|
||||
version = "1.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a0c9dc7fe5fe9f920a393e3c6f39e5c1830f078f33b03e110ac6b561c7dd04f8"
|
||||
checksum = "db2388de1e65f8545db637b467e3a8ed3c85357ff098c16aa4e9493561e49d03"
|
||||
dependencies = [
|
||||
"nom",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ clap = { version = "4", features = ["derive"] }
|
|||
|
||||
sqlx = { version = "0.8", features = ["sqlite", "runtime-tokio", "chrono"] }
|
||||
|
||||
askama = "=0.13.0-pre.0"
|
||||
askama = "0.13"
|
||||
|
||||
argon2 = { version = "0.5", features = ["default", "std"] }
|
||||
rand_core = { version = "0.9", features = ["std"] }
|
||||
|
|
|
|||
|
|
@ -21,16 +21,16 @@ VALUES (
|
|||
NULL
|
||||
);
|
||||
|
||||
INSERT INTO [Recipe] ([id], [user_id], [title], [is_published], [creation_datetime])
|
||||
INSERT INTO [Recipe] ([id], [user_id], [title], [is_public], [creation_datetime])
|
||||
VALUES (1, 1, 'Croissant au jambon', true, '2025-01-07T10:41:05.697884837+00:00');
|
||||
|
||||
INSERT INTO [Recipe] ([id], [user_id], [title], [is_published], [creation_datetime], [servings], [estimated_time], [difficulty])
|
||||
INSERT INTO [Recipe] ([id], [user_id], [title], [is_public], [creation_datetime], [servings], [estimated_time], [difficulty])
|
||||
VALUES (2, 1, 'Gratin de thon aux olives', true, '2025-01-07T10:41:05.697884837+00:00', 4, 40, 1);
|
||||
|
||||
INSERT INTO [Recipe] ([id], [user_id], [title], [is_published], [creation_datetime])
|
||||
INSERT INTO [Recipe] ([id], [user_id], [title], [is_public], [creation_datetime])
|
||||
VALUES (3, 1, 'Saumon en croute', true, '2025-01-07T10:41:05.697884837+00:00');
|
||||
|
||||
INSERT INTO [Recipe] ([id], [user_id], [title], [is_published], [creation_datetime])
|
||||
INSERT INTO [Recipe] ([id], [user_id], [title], [is_public], [creation_datetime])
|
||||
VALUES (4, 2, 'Ouiche lorraine', true, '2025-01-07T10:41:05.697884837+00:00');
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ CREATE TABLE [Recipe] (
|
|||
-- 0: Unknown, 1: Easy, 2: Medium, 4: Hard.
|
||||
[difficulty] INTEGER NOT NULL DEFAULT 0,
|
||||
[servings] INTEGER DEFAULT 4,
|
||||
[is_published] INTEGER NOT NULL DEFAULT FALSE,
|
||||
[is_public] INTEGER NOT NULL DEFAULT FALSE,
|
||||
[creation_datetime] TEXT NOT NULL,
|
||||
|
||||
FOREIGN KEY([user_id]) REFERENCES [User]([id]) ON DELETE SET NULL
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ pub enum AddScheduledRecipeResult {
|
|||
impl Connection {
|
||||
/// Returns all the recipe titles where recipe is written in the given language.
|
||||
/// If a user_id is given, the language constraint is ignored for recipes owned by user_id.
|
||||
pub async fn get_all_published_recipe_titles(
|
||||
pub async fn get_all_public_recipe_titles(
|
||||
&self,
|
||||
lang: &str,
|
||||
user_id: Option<i64>,
|
||||
|
|
@ -24,7 +24,7 @@ impl Connection {
|
|||
r#"
|
||||
SELECT [id], [title]
|
||||
FROM [Recipe]
|
||||
WHERE [is_published] = true AND ([lang] = $1 OR [user_id] = $2)
|
||||
WHERE [is_public] = true AND ([lang] = $1 OR [user_id] = $2)
|
||||
ORDER BY [title] COLLATE NOCASE
|
||||
"#,
|
||||
)
|
||||
|
|
@ -35,7 +35,7 @@ ORDER BY [title] COLLATE NOCASE
|
|||
r#"
|
||||
SELECT [id], [title]
|
||||
FROM [Recipe]
|
||||
WHERE [is_published] = true AND [lang] = $1
|
||||
WHERE [is_public] = true AND [lang] = $1
|
||||
ORDER BY [title] COLLATE NOCASE
|
||||
"#,
|
||||
)
|
||||
|
|
@ -46,15 +46,12 @@ ORDER BY [title] COLLATE NOCASE
|
|||
.map_err(DBError::from)
|
||||
}
|
||||
|
||||
pub async fn get_all_unpublished_recipe_titles(
|
||||
&self,
|
||||
owned_by: i64,
|
||||
) -> Result<Vec<(i64, String)>> {
|
||||
pub async fn get_all_private_recipe_titles(&self, owned_by: i64) -> Result<Vec<(i64, String)>> {
|
||||
sqlx::query_as(
|
||||
r#"
|
||||
SELECT [id], [title]
|
||||
FROM [Recipe]
|
||||
WHERE [is_published] = false AND [user_id] = $1
|
||||
WHERE [is_public] = false AND [user_id] = $1
|
||||
ORDER BY [title]
|
||||
"#,
|
||||
)
|
||||
|
|
@ -264,8 +261,7 @@ WHERE [id] = $1 AND ([user_id] = $2 OR (SELECT [is_admin] FROM [User] WHERE [id]
|
|||
r#"
|
||||
SELECT
|
||||
[id], [user_id], [title], [lang],
|
||||
[estimated_time], [description], [difficulty], [servings],
|
||||
[is_published]
|
||||
[estimated_time], [description], [difficulty], [servings], [is_public]
|
||||
FROM [Recipe] WHERE [id] = $1
|
||||
"#,
|
||||
)
|
||||
|
|
@ -520,10 +516,10 @@ WHERE [id] = $1 AND [id] NOT IN (
|
|||
.map_err(DBError::from)
|
||||
}
|
||||
|
||||
pub async fn set_recipe_is_published(&self, recipe_id: i64, is_published: bool) -> Result<()> {
|
||||
sqlx::query("UPDATE [Recipe] SET [is_published] = $2 WHERE [id] = $1")
|
||||
pub async fn set_recipe_is_public(&self, recipe_id: i64, is_public: bool) -> Result<()> {
|
||||
sqlx::query("UPDATE [Recipe] SET [is_public] = $2 WHERE [id] = $1")
|
||||
.bind(recipe_id)
|
||||
.bind(is_published)
|
||||
.bind(is_public)
|
||||
.execute(&self.pool)
|
||||
.await
|
||||
.map(|_| ())
|
||||
|
|
@ -966,7 +962,7 @@ mod tests {
|
|||
.set_recipe_difficulty(recipe_id, Difficulty::Medium)
|
||||
.await?;
|
||||
connection.set_recipe_language(recipe_id, "fr").await?;
|
||||
connection.set_recipe_is_published(recipe_id, true).await?;
|
||||
connection.set_recipe_is_public(recipe_id, true).await?;
|
||||
|
||||
let recipe = connection.get_recipe(recipe_id, false).await?.unwrap();
|
||||
|
||||
|
|
@ -976,7 +972,7 @@ mod tests {
|
|||
assert_eq!(recipe.estimated_time, Some(420));
|
||||
assert_eq!(recipe.difficulty, Difficulty::Medium);
|
||||
assert_eq!(recipe.lang, "fr");
|
||||
assert!(recipe.is_published);
|
||||
assert!(recipe.is_public);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ pub struct Recipe {
|
|||
pub difficulty: Difficulty,
|
||||
|
||||
pub servings: Option<u32>,
|
||||
pub is_published: bool,
|
||||
pub is_public: bool,
|
||||
|
||||
#[sqlx(skip)]
|
||||
pub tags: Vec<String>,
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ use crate::{
|
|||
};
|
||||
|
||||
pub struct Recipes {
|
||||
pub published: Vec<(i64, String)>,
|
||||
pub unpublished: Vec<(i64, String)>,
|
||||
pub public: Vec<(i64, String)>,
|
||||
pub private: Vec<(i64, String)>,
|
||||
pub current_id: Option<i64>,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -162,8 +162,8 @@ async fn main() {
|
|||
patch(services::ron::recipe::set_language),
|
||||
)
|
||||
.route(
|
||||
"/recipe/is_published",
|
||||
patch(services::ron::recipe::set_is_published),
|
||||
"/recipe/is_public",
|
||||
patch(services::ron::recipe::set_is_public),
|
||||
)
|
||||
.route("/recipe", delete(services::ron::recipe::rm))
|
||||
.route("/recipe/groups", get(services::ron::recipe::get_groups))
|
||||
|
|
|
|||
|
|
@ -21,16 +21,14 @@ pub async fn recipes_list_fragments(
|
|||
Extension(context): Extension<Context>,
|
||||
) -> Result<impl IntoResponse> {
|
||||
let recipes = Recipes {
|
||||
published: connection
|
||||
.get_all_published_recipe_titles(
|
||||
public: connection
|
||||
.get_all_public_recipe_titles(
|
||||
context.tr.current_lang_code(),
|
||||
context.user.as_ref().map(|u| u.id),
|
||||
)
|
||||
.await?,
|
||||
unpublished: if let Some(user) = context.user.as_ref() {
|
||||
connection
|
||||
.get_all_unpublished_recipe_titles(user.id)
|
||||
.await?
|
||||
private: if let Some(user) = context.user.as_ref() {
|
||||
connection.get_all_private_recipe_titles(user.id).await?
|
||||
} else {
|
||||
vec![]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -51,16 +51,14 @@ pub async fn home_page(
|
|||
Extension(context): Extension<Context>,
|
||||
) -> Result<impl IntoResponse> {
|
||||
let recipes = Recipes {
|
||||
published: connection
|
||||
.get_all_published_recipe_titles(
|
||||
public: connection
|
||||
.get_all_public_recipe_titles(
|
||||
context.tr.current_lang_code(),
|
||||
context.user.as_ref().map(|u| u.id),
|
||||
)
|
||||
.await?,
|
||||
unpublished: if let Some(user) = context.user.as_ref() {
|
||||
connection
|
||||
.get_all_unpublished_recipe_titles(user.id)
|
||||
.await?
|
||||
private: if let Some(user) = context.user.as_ref() {
|
||||
connection.get_all_private_recipe_titles(user.id).await?
|
||||
} else {
|
||||
vec![]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -44,14 +44,11 @@ pub async fn edit(
|
|||
if let Some(recipe) = connection.get_recipe(recipe_id, false).await? {
|
||||
if model::can_user_edit_recipe(user, &recipe) {
|
||||
let recipes = Recipes {
|
||||
published: connection
|
||||
.get_all_published_recipe_titles(
|
||||
context.tr.current_lang_code(),
|
||||
Some(user.id),
|
||||
)
|
||||
public: connection
|
||||
.get_all_public_recipe_titles(context.tr.current_lang_code(), Some(user.id))
|
||||
.await?,
|
||||
unpublished: connection
|
||||
.get_all_unpublished_recipe_titles(user.id)
|
||||
private: connection
|
||||
.get_all_private_recipe_titles(user.id)
|
||||
.await?,
|
||||
current_id: Some(recipe_id),
|
||||
};
|
||||
|
|
@ -98,7 +95,7 @@ pub async fn view(
|
|||
) -> Result<Response> {
|
||||
match connection.get_recipe(recipe_id, true).await? {
|
||||
Some(recipe) => {
|
||||
if !recipe.is_published
|
||||
if !recipe.is_public
|
||||
&& (context.user.is_none() || recipe.user_id != context.user.as_ref().unwrap().id)
|
||||
{
|
||||
return Ok(Html(
|
||||
|
|
@ -115,15 +112,15 @@ pub async fn view(
|
|||
}
|
||||
|
||||
let recipes = Recipes {
|
||||
published: connection
|
||||
.get_all_published_recipe_titles(
|
||||
public: connection
|
||||
.get_all_public_recipe_titles(
|
||||
context.tr.current_lang_code(),
|
||||
context.user.as_ref().map(|u| u.id),
|
||||
)
|
||||
.await?,
|
||||
unpublished: if let Some(user) = context.user.as_ref() {
|
||||
private: if let Some(user) = context.user.as_ref() {
|
||||
connection
|
||||
.get_all_unpublished_recipe_titles(user.id)
|
||||
.get_all_private_recipe_titles(user.id)
|
||||
.await?
|
||||
} else {
|
||||
vec![]
|
||||
|
|
|
|||
|
|
@ -152,14 +152,14 @@ pub async fn set_language(
|
|||
}
|
||||
|
||||
#[debug_handler]
|
||||
pub async fn set_is_published(
|
||||
pub async fn set_is_public(
|
||||
State(connection): State<db::Connection>,
|
||||
Extension(context): Extension<Context>,
|
||||
ExtractRon(ron): ExtractRon<ron_api::SetIsPublished>,
|
||||
ExtractRon(ron): ExtractRon<ron_api::SetIsPublic>,
|
||||
) -> Result<StatusCode> {
|
||||
check_user_rights_recipe(&connection, &context.user, ron.recipe_id).await?;
|
||||
connection
|
||||
.set_recipe_is_published(ron.recipe_id, ron.is_published)
|
||||
.set_recipe_is_public(ron.recipe_id, ron.is_public)
|
||||
.await?;
|
||||
Ok(StatusCode::OK)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ use crate::consts;
|
|||
pub enum Sentence {
|
||||
MainTitle = 0,
|
||||
CreateNewRecipe,
|
||||
UnpublishedRecipes,
|
||||
PrivateRecipes,
|
||||
UntitledRecipe,
|
||||
|
||||
Name,
|
||||
|
|
@ -100,7 +100,7 @@ pub enum Sentence {
|
|||
RecipeDifficultyHard,
|
||||
RecipeTags,
|
||||
RecipeLanguage,
|
||||
RecipeIsPublished,
|
||||
RecipeIsPublic,
|
||||
RecipeDelete,
|
||||
RecipeAddAGroup,
|
||||
RecipeRemoveGroup,
|
||||
|
|
|
|||
|
|
@ -69,13 +69,13 @@
|
|||
</select>
|
||||
|
||||
<input
|
||||
id="input-is-published"
|
||||
id="input-is-public"
|
||||
type="checkbox"
|
||||
{%~ if recipe.is_published %}
|
||||
{%~ if recipe.is_public %}
|
||||
checked
|
||||
{% endif %}
|
||||
>
|
||||
<label for="input-is-published">{{ context.tr.t(Sentence::RecipeIsPublished) }}</label>
|
||||
<label for="input-is-public">{{ context.tr.t(Sentence::RecipeIsPublic) }}</label>
|
||||
|
||||
<input id="input-delete" type="button" value="{{ context.tr.t(Sentence::RecipeDelete) }}">
|
||||
|
||||
|
|
|
|||
|
|
@ -15,25 +15,25 @@
|
|||
{% endmacro %}
|
||||
|
||||
<div id="recipes-list">
|
||||
{% if !recipes.unpublished.is_empty() %}
|
||||
{{ context.tr.t(Sentence::UnpublishedRecipes) }}
|
||||
{% if !recipes.private.is_empty() %}
|
||||
{{ context.tr.t(Sentence::PrivateRecipes) }}
|
||||
{% endif %}
|
||||
|
||||
<nav class="recipes-list-unpublished">
|
||||
<nav class="recipes-list-private">
|
||||
<ul>
|
||||
{% for (id, title) in recipes.unpublished %}
|
||||
{% for (id, title) in recipes.private %}
|
||||
{% call recipe_item(id, title, recipes.is_current(id)) %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
{% if !recipes.unpublished.is_empty() %}
|
||||
{% if !recipes.private.is_empty() %}
|
||||
<hr>
|
||||
{% endif %}
|
||||
|
||||
<nav class="recipes-list-published">
|
||||
<nav class="recipes-list-public">
|
||||
<ul>
|
||||
{% for (id, title) in recipes.published %}
|
||||
{% for (id, title) in recipes.public %}
|
||||
{% call recipe_item(id, title, recipes.is_current(id)) %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
translation: [
|
||||
(MainTitle, "Cooking Recipes"),
|
||||
(CreateNewRecipe, "Create a new recipe"),
|
||||
(UnpublishedRecipes, "Unpublished recipes"),
|
||||
(PrivateRecipes, "Private recipes"),
|
||||
(UntitledRecipe, "Untitled recipe"),
|
||||
|
||||
(Name, "Name"),
|
||||
|
|
@ -86,7 +86,7 @@
|
|||
(RecipeDifficultyHard, "Hard"),
|
||||
(RecipeTags, "Tags"),
|
||||
(RecipeLanguage, "Language"),
|
||||
(RecipeIsPublished, "Is published"),
|
||||
(RecipeIsPublic, "Is public"),
|
||||
(RecipeDelete, "Delete recipe"),
|
||||
(RecipeAddAGroup, "Add a group"),
|
||||
(RecipeRemoveGroup, "Remove group"),
|
||||
|
|
@ -145,7 +145,7 @@
|
|||
translation: [
|
||||
(MainTitle, "Recettes de Cuisine"),
|
||||
(CreateNewRecipe, "Créer une nouvelle recette"),
|
||||
(UnpublishedRecipes, "Recettes non-publiés"),
|
||||
(PrivateRecipes, "Recettes privées"),
|
||||
(UntitledRecipe, "Recette sans nom"),
|
||||
|
||||
(Name, "Nom"),
|
||||
|
|
@ -225,7 +225,7 @@
|
|||
(RecipeDifficultyHard, "Difficile"),
|
||||
(RecipeTags, "Tags"),
|
||||
(RecipeLanguage, "Langue"),
|
||||
(RecipeIsPublished, "Est publiée"),
|
||||
(RecipeIsPublic, "Est public"),
|
||||
(RecipeDelete, "Supprimer la recette"),
|
||||
(RecipeAddAGroup, "Ajouter un groupe"),
|
||||
(RecipeRemoveGroup, "Supprimer le groupe"),
|
||||
|
|
|
|||
|
|
@ -102,9 +102,9 @@ pub struct SetRecipeLanguage {
|
|||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone)]
|
||||
pub struct SetIsPublished {
|
||||
pub struct SetIsPublic {
|
||||
pub recipe_id: i64,
|
||||
pub is_published: bool,
|
||||
pub is_public: bool,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, Clone)]
|
||||
|
|
|
|||
|
|
@ -226,16 +226,16 @@ pub fn setup_page(recipe_id: i64) {
|
|||
.forget();
|
||||
}
|
||||
|
||||
// Is published.
|
||||
// Is public.
|
||||
{
|
||||
let is_published: HtmlInputElement = by_id("input-is-published");
|
||||
EventListener::new(&is_published.clone(), "input", move |_event| {
|
||||
let body = ron_api::SetIsPublished {
|
||||
let is_public: HtmlInputElement = by_id("input-is-public");
|
||||
EventListener::new(&is_public.clone(), "input", move |_event| {
|
||||
let body = ron_api::SetIsPublic {
|
||||
recipe_id,
|
||||
is_published: is_published.checked(),
|
||||
is_public: is_public.checked(),
|
||||
};
|
||||
spawn_local(async move {
|
||||
let _ = request::patch::<(), _>("recipe/is_published", body).await;
|
||||
let _ = request::patch::<(), _>("recipe/is_public", body).await;
|
||||
reload_recipes_list(recipe_id).await;
|
||||
});
|
||||
})
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
/// This module provides a simple API for making HTTP requests to the server.
|
||||
/// For requests with a body (POST, PUT, PATCH, etc.), it uses the RON format.
|
||||
/// The RON data structures should come from the `ron_api` module.
|
||||
/// For requests with parameters (GET), it uses the HTML form format.
|
||||
use common::ron_api;
|
||||
use gloo::net::http::{Request, RequestBuilder};
|
||||
use serde::{Serialize, de::DeserializeOwned};
|
||||
|
|
@ -82,6 +86,13 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
/// Sends a request to the server with the given API name and body.
|
||||
/// # Example
|
||||
/// ```rust
|
||||
/// use common::ron_api;
|
||||
/// let body = ron_api::SetLang { lang : "en".to_string() };
|
||||
/// request::put::<(), _>("lang", body).await;
|
||||
/// ```
|
||||
pub async fn put<T, U>(api_name: &str, body: U) -> Result<T>
|
||||
where
|
||||
T: DeserializeOwned,
|
||||
|
|
|
|||
1
generate_doc.nu
Normal file
1
generate_doc.nu
Normal file
|
|
@ -0,0 +1 @@
|
|||
cargo doc --document-private-items --no-deps
|
||||
Loading…
Add table
Add a link
Reference in a new issue