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>>>, Query(params): Query, ) -> 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() }; 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"; let row = match conn.query_one(query, &[¶ms.username, ¶ms.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"); let skin_date = row.get("skin_date"); let cape_date = row.get("cape_date"); create_profile_response(uuid, params.username, skin_date, cape_date) }