mirror of
https://git.ethanthesleepy.one/ethanaobrien/ew
synced 2026-10-11 17:14:30 +08:00
51 lines
1.4 KiB
Rust
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()
|
|
}
|
|
}))
|
|
}
|