use postgres_native_tls::MakeTlsConnector;
use bb8::PooledConnection;
use bb8_postgres::PostgresConnectionManager;
use serde::Deserialize;
use serde::Serialize;
#[derive(Serialize, Deserialize, Clone)]
pub struct ModelUserVerify {
pub id: i32,
pub user_id: i32,
pub token: String,
pub email: String,
pub state: i32,
pub exp_date_utc: chrono::DateTime<chrono::Utc>,
}
pub async fn get_user_verify_by_user_id(
tracking_label: &str,
user_id: i32,
conn: &PooledConnection<'_, PostgresConnectionManager<MakeTlsConnector>>,
) -> Result<ModelUserVerify, String> {
let query = format!(
"SELECT \
users_verified.id, \
users_verified.user_id, \
users_verified.token, \
users_verified.email, \
users_verified.state, \
users_verified.exp_date, \
users_verified.created_at, \
users_verified.verify_date, \
users_verified.updated_at \
FROM \
users_verified \
WHERE \
users_verified.user_id = {user_id} \
LIMIT 1;"
);
let stmt = conn.prepare(&query).await.unwrap();
match conn.query(&stmt, &[]).await {
Ok(query_result) => {
if let Some(row) = query_result.first() {
let id: i32 = row.try_get("id").unwrap();
let user_id: i32 = row.try_get("user_id").unwrap();
let token: String = row.try_get("token").unwrap();
let email: String = row.try_get("email").unwrap();
let state: i32 = row.try_get("state").unwrap();
let exp_date_utc: chrono::DateTime<chrono::Utc> =
row.try_get("exp_date").unwrap();
return Ok(ModelUserVerify {
id,
user_id,
token,
email,
state,
exp_date_utc,
});
}
Err(format!(
"{tracking_label} - \
failed to find any user verify with user_id={user_id}"
))
}
Err(e) => Err(format!(
"{tracking_label} - \
failed to find user verify by user_id={user_id} \
with err='{e}'"
)),
}
}