account/src/nnid/person_exists.rs

59 lines
1.4 KiB
Rust
Raw Normal View History

2025-02-27 10:25:31 +01:00
use rocket::{get, State};
use crate::error::{Error, Errors};
use crate::Pool;
2025-02-27 21:49:37 +01:00
2025-02-27 10:25:31 +01:00
#[get("/v1/api/people/<username>")]
pub async fn person_exists(database: &State<Pool>, username: &str) -> Result<(), Errors<'static>>{
let database = database.inner();
2025-02-27 21:49:37 +01:00
let exists = sqlx::query!(
"SELECT EXISTS(SELECT 1 FROM users WHERE username = $1 ) as exists",
2025-02-27 10:25:31 +01:00
username
).fetch_one(database)
.await
2025-02-27 21:49:37 +01:00
.ok()
.map(|v| v.exists)
.flatten()
2025-02-27 10:25:31 +01:00
.unwrap_or(true);
if exists {
Err(
Errors{
error: &[
Error{
code: "0100",
message: "Account ID already exists"
}
],
}
)
} else {
Ok(())
}
}
#[cfg(test)]
mod test{
use crate::error::{Error, Errors};
use crate::xml::serialize_with_version;
#[test]
fn test(){
let val = Errors{
error: &[
Error{
code: "0100",
message: "Account ID already exists"
}
],
};
let enc = serialize_with_version(&val).unwrap();
assert_eq!(
enc.as_ref(),
"<?xml version=\"1.0\"?><errors><error><code>0100</code><message>Account ID already exists</message></error></errors>"
)
}
}