Files
ew_author/src/router/shop.rs
T

51 lines
1.4 KiB
Rust

use jzon::{object};
use actix_web::{web, Responder};
use crate::router::{userdata, items, databases, Login, Session, Api};
pub fn routes(cfg: &mut web::ServiceConfig) {
cfg.service(
web::scope("/shop")
.route("", web::get().to(shop))
.route("/buy", web::post().to(buy))
);
}
async fn shop(Login(key): Login) -> impl Responder {
let user = userdata::get_acc(&key);
Api(Some(object!{
"shop_list": user["shop_list"].clone()
}))
}
async fn buy(Session { key, body }: Session) -> impl Responder {
let mut user = userdata::get_acc(&key);
let shop_item_id = body["master_shop_item_id"].as_i64().unwrap();
let item = &databases::SHOP_INFO[shop_item_id.to_string()];
items::remove_gems(&mut user, item["price"].as_i64().unwrap());
items::give_shop(shop_item_id, 1, &mut user);
items::lp_modification(&mut user, item["price"].as_u64().unwrap() / 2, false);
userdata::save_acc(&key, user.clone());
let mut bought = object!{};
for entry in user["shop_list"].members() {
if entry["master_shop_item_id"].as_i64() == Some(shop_item_id) {
bought = entry.clone();
break;
}
}
Api(Some(object!{
"gem": user["gem"].clone(),
"shop_list": [bought],
"gift_list": [],
"updated_value_list": {
"stamina": user["stamina"].clone()
}
}))
}