backend/src/minecraft_session/has_joined.rs

60 lines
1.6 KiB
Rust
Raw Normal View History

2024-12-28 21:35:45 +03:00
use std::sync::Arc;
use axum::{
Json,
extract::{State, Query},
response::IntoResponse,
http::StatusCode
};
use serde::Deserialize;
use bb8::Pool;
use bb8_postgres::PostgresConnectionManager;
use tokio_postgres::NoTls;
use crate::minecraft_session::create_profile_response;
#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HasJoinedQuery {
username: String,
server_id: String,
}
pub async fn has_joined(
State(pool): State<Arc<Pool<PostgresConnectionManager<NoTls>>>>,
Query(params): Query<HasJoinedQuery>,
) -> impl IntoResponse {
let conn = match pool.get().await {
Ok(conn) => conn,
Err(_) => return (StatusCode::INTERNAL_SERVER_ERROR, Json(serde_json::json!({
"error": "InternalServerError",
"errorMessage": "Failed to get DB connection"
}))).into_response()
};
2025-01-19 22:08:10 +03:00
let query = "
SELECT
uuid,
TO_CHAR(skin_date, 'YYYY-MM-DD_HH24-MI-SS') AS skin_date
TO_CHAR(cape_date, 'YYYY-MM-DD_HH24-MI-SS') AS cape_date
FROM accounts
WHERE username = $1 AND server_id = $2";
2024-12-28 21:35:45 +03:00
let row = match conn.query_one(query, &[&params.username, &params.server_id]).await {
Ok(row) => row,
Err(_) => return (StatusCode::NOT_FOUND, Json(serde_json::json!({
"error": "NotFound",
"errorMessage": "User not found"
}))).into_response()
};
let uuid = row.get("uuid");
2025-01-19 22:08:10 +03:00
let skin_date = row.get("skin_date");
let cape_date = row.get("cape_date");
2024-12-28 21:35:45 +03:00
2025-01-19 22:08:10 +03:00
create_profile_response(uuid, params.username, skin_date, cape_date)
2024-12-28 21:35:45 +03:00
}