mirror of
https://github.com/zaphar/kitchen.git
synced 2025-07-22 19:40:14 -04:00
Load user account data from server
This commit is contained in:
parent
f7cf7bd468
commit
d9618aac35
@ -333,6 +333,15 @@ async fn api_save_inventory(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn api_user_account(session: storage::UserIdFromSession) -> api::AccountResponse {
|
||||||
|
use storage::{UserId, UserIdFromSession::FoundUserId};
|
||||||
|
if let FoundUserId(UserId(user_id)) = session {
|
||||||
|
api::AccountResponse::from(api::UserData { user_id })
|
||||||
|
} else {
|
||||||
|
api::Response::Unauthorized
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn mk_v1_routes() -> Router {
|
fn mk_v1_routes() -> Router {
|
||||||
Router::new()
|
Router::new()
|
||||||
.route("/recipes", get(api_recipes).post(api_save_recipes))
|
.route("/recipes", get(api_recipes).post(api_save_recipes))
|
||||||
@ -349,10 +358,21 @@ fn mk_v1_routes() -> Router {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn mk_v2_routes() -> Router {
|
fn mk_v2_routes() -> Router {
|
||||||
Router::new().route(
|
Router::new()
|
||||||
|
.route("/recipes", get(api_recipes).post(api_save_recipes))
|
||||||
|
// recipe entry api path route
|
||||||
|
.route("/recipe/:recipe_id", get(api_recipe_entry))
|
||||||
|
// mealplan api path routes
|
||||||
|
.route("/plan", get(api_plan).post(api_save_plan))
|
||||||
|
.route("/plan/:date", get(api_plan_since))
|
||||||
|
.route(
|
||||||
"/inventory",
|
"/inventory",
|
||||||
get(api_inventory_v2).post(api_save_inventory_v2),
|
get(api_inventory_v2).post(api_save_inventory_v2),
|
||||||
)
|
)
|
||||||
|
.route("/categories", get(api_categories).post(api_save_categories))
|
||||||
|
// All the routes above require a UserId.
|
||||||
|
.route("/auth", get(auth::handler).post(auth::handler))
|
||||||
|
.route("/account", get(api_user_account))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[instrument(fields(recipe_dir=?recipe_dir_path), skip_all)]
|
#[instrument(fields(recipe_dir=?recipe_dir_path), skip_all)]
|
||||||
|
@ -377,6 +377,27 @@ impl HttpStore {
|
|||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[instrument]
|
||||||
|
pub async fn get_user_data(&self) -> Option<UserData> {
|
||||||
|
debug!("Retrieving User Account data");
|
||||||
|
let mut path = self.v2_path();
|
||||||
|
path.push_str("/account");
|
||||||
|
let result = reqwasm::http::Request::get(&path).send().await;
|
||||||
|
if let Ok(resp) = &result {
|
||||||
|
if resp.status() == 200 {
|
||||||
|
let user_data = resp
|
||||||
|
.json::<AccountResponse>()
|
||||||
|
.await
|
||||||
|
.expect("Unparseable authentication response")
|
||||||
|
.as_success();
|
||||||
|
return user_data;
|
||||||
|
}
|
||||||
|
error!(status = resp.status(), "Login was unsuccessful")
|
||||||
|
} else {
|
||||||
|
error!(err=?result.unwrap_err(), "Failed to send auth request");
|
||||||
|
}
|
||||||
|
return None;
|
||||||
|
}
|
||||||
//#[instrument]
|
//#[instrument]
|
||||||
pub async fn get_categories(&self) -> Result<Option<String>, Error> {
|
pub async fn get_categories(&self) -> Result<Option<String>, Error> {
|
||||||
let mut path = self.v1_path();
|
let mut path = self.v1_path();
|
||||||
|
@ -185,9 +185,16 @@ impl StateMachine {
|
|||||||
.map(|(k, v)| (k.clone(), *v as i32))
|
.map(|(k, v)| (k.clone(), *v as i32))
|
||||||
.collect::<Vec<(String, i32)>>();
|
.collect::<Vec<(String, i32)>>();
|
||||||
local_store.save_plan(&plan);
|
local_store.save_plan(&plan);
|
||||||
info!("Checking for user_data in local storage");
|
info!("Checking for user account data");
|
||||||
|
if let Some(user_data) = store.get_user_data().await {
|
||||||
|
debug!("Successfully got account data from server");
|
||||||
|
local_store.set_user_data(Some(&user_data));
|
||||||
|
state.auth = Some(user_data);
|
||||||
|
} else {
|
||||||
|
debug!("Using account data from local store");
|
||||||
let user_data = local_store.get_user_data();
|
let user_data = local_store.get_user_data();
|
||||||
state.auth = user_data;
|
state.auth = user_data;
|
||||||
|
}
|
||||||
info!("Synchronizing categories");
|
info!("Synchronizing categories");
|
||||||
match store.get_categories().await {
|
match store.get_categories().await {
|
||||||
Ok(Some(categories_content)) => {
|
Ok(Some(categories_content)) => {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user