This commit is contained in:
2026-01-12 14:27:01 +01:00
parent 8601d7ced1
commit 76281892a2
5 changed files with 42 additions and 16 deletions
+19 -10
View File
@@ -3,6 +3,7 @@ use rocket::fs::FileServer;
use rocket::futures::lock::Mutex;
use backend::auth;
use backend::auth::AdminState;
use backend::items::{self, Game};
use backend::proto_utils;
use backend::store::{self, User, save_state};
@@ -111,6 +112,7 @@ async fn update_game(
game: proto_utils::Proto<items::Game>,
) -> Option<items::Game> {
let mut games = game_list.lock().await;
let mut users = user_list.lock().await;
let mut game = game.into_inner();
game.title = game.title.trim().to_string();
@@ -125,13 +127,14 @@ async fn update_game(
(g.remote_id == game.remote_id && g.source == game.source) || (g.title == game.title)
}) {
if existing.title != game.title {
let old_title = existing.title.clone();
// Update title for every opinion
for person in user_list.lock().await.iter_mut() {
for person in users.iter_mut() {
let opinion = person
.person
.opinion
.iter_mut()
.find(|o| o.title == existing.title);
.find(|o| o.title == old_title);
if let Some(opinion) = opinion {
opinion.title = game.title.clone();
}
@@ -149,7 +152,6 @@ async fn update_game(
games.sort_unstable_by(|g1, g2| g1.title.cmp(&g2.title));
let users = user_list.lock().await;
save_state(&games, &users);
r_existing
@@ -189,13 +191,16 @@ async fn refresh_state(
_token: auth::AdminToken,
game_list: &rocket::State<Mutex<Vec<Game>>>,
user_list: &rocket::State<Mutex<Vec<User>>>,
admin_state: &rocket::State<AdminState>,
) -> items::RefreshResponse {
if let Some((new_games, new_users)) = store::load_state() {
let mut games = game_list.lock().await;
let mut users = user_list.lock().await;
let mut admins = admin_state.admins.lock().await;
*games = new_games;
*users = new_users;
*admins = store::load_admins();
items::RefreshResponse {
success: true,
@@ -212,12 +217,12 @@ async fn refresh_state(
#[post("/opinion", data = "<req>")]
async fn add_opinion(
token: auth::Token,
user_list: &rocket::State<Mutex<Vec<User>>>,
game_list: &rocket::State<Mutex<Vec<Game>>>,
user_list: &rocket::State<Mutex<Vec<User>>>,
req: proto_utils::Proto<items::AddOpinionRequest>,
) -> Option<items::Person> {
let mut users = user_list.lock().await;
let games = game_list.lock().await;
let mut users = user_list.lock().await;
let mut result = None;
// Validate game exists
@@ -261,12 +266,12 @@ async fn add_opinion(
#[patch("/opinion", data = "<req>")]
async fn remove_opinion(
token: auth::Token,
user_list: &rocket::State<Mutex<Vec<User>>>,
game_list: &rocket::State<Mutex<Vec<Game>>>,
user_list: &rocket::State<Mutex<Vec<User>>>,
req: proto_utils::Proto<items::RemoveOpinionRequest>,
) -> Option<items::Person> {
let mut users = user_list.lock().await;
let games = game_list.lock().await;
let mut users = user_list.lock().await;
let mut result = None;
if let Some(user) = users
@@ -340,9 +345,13 @@ async fn get_game_thumbnail(
.json::<serde_json::Value>()
.await
.ok()?
.get("universeId")?
.as_u64()
.unwrap()
.get("universeId")
.and_then(|v| v.as_u64())
};
let universe_id = match universe_id {
Some(id) => id,
None => return None.into(),
};
let api_url = format!(