Implemented agent api

This commit is contained in:
2026-09-11 00:04:07 +02:00
parent a8434a5c9b
commit 74449fd78b
2 changed files with 44 additions and 2 deletions

View File

@@ -1,5 +1,5 @@
use axum::{
Json,
Json, debug_handler,
extract::{Query, State},
};
use serde::{Deserialize, Serialize};
@@ -183,3 +183,44 @@ pub async fn skin_info(
Err(AppError::Unauthorised)
}
}
#[derive(Deserialize, Serialize)]
pub struct AgentInfoQuery {
team: Teams,
}
#[debug_handler]
pub async fn agent_info(
State(pool): State<PgPool>,
session: Session,
Query(info_query): Query<AgentInfoQuery>,
) -> Result<Json<SkinInfo>, AppError> {
if let Some(uuid) = session.get::<Uuid>("uuid").await? {
let agent = query!("SELECT us.id, a.name, a.display, r.color FROM user_skins us JOIN agents a ON a.id = us.agent_id JOIN rarity r ON r.id = a.rarity WHERE us.user_id=$1 AND us.team=$2", uuid, info_query.team.as_i32()).fetch_optional(&pool).await?;
match agent {
Some(agent) => Ok(Json(SkinInfo {
id: agent.id,
name: agent.name,
display: agent.display,
paint_index: 0,
color: agent.color,
float: 0.0,
pattern: 0,
})),
None => {
let default = query!("SELECT a.name, a.display, r.color FROM agents a JOIN rarity r ON r.id = a.rarity WHERE a.team = $1 AND a.default = true", info_query.team.as_i32()).fetch_one(&pool).await?;
Ok(Json(SkinInfo {
id: Uuid::nil(),
name: default.name,
display: default.display,
paint_index: 0,
color: default.color,
float: 0.0,
pattern: 0,
}))
}
}
} else {
Err(AppError::Unauthorised)
}
}