Register service user endpoint (#5)
Rust Build / Rustfmt (push) Successful in 55s
Rust Build / Check (push) Successful in 1m33s
Rust Build / Test Suite (push) Successful in 1m33s
Rust Build / build (push) Successful in 1m38s
Rust Build / Clippy (push) Successful in 2m39s
Rust Build / Rustfmt (pull_request) Successful in 4m0s
Rust Build / Test Suite (pull_request) Successful in 5m18s
Rust Build / Clippy (pull_request) Successful in 1m25s
Rust Build / Check (pull_request) Successful in 5m51s
Rust Build / build (pull_request) Successful in 2m7s

Reviewed-on: phoenix/textsender-auth#5
This commit was merged in pull request #5.
This commit is contained in:
2026-06-11 14:36:10 -04:00
parent 04e1fbfc7a
commit 2385307fd3
9 changed files with 324 additions and 24 deletions
+79
View File
@@ -48,3 +48,82 @@ pub async fn get_passphrase(
Err(err) => Err(err),
}
}
pub async fn get_with_username(
pool: &sqlx::PgPool,
username: &String,
) -> Result<textsender_models::user::ServiceUser, sqlx::Error> {
match sqlx::query(
r#"SELECT id, username, passphrase, created, last_login FROM "service_user" WHERE username = $1"#
).bind(username)
.fetch_one(pool).await {
Ok(row) => {
let service_user = textsender_models::user::ServiceUser {
id: row.try_get("id")?,
username: row.try_get("username")?,
passphrase: row.try_get("passphrase")?,
created: row.try_get("created")?,
last_login: row.try_get("last_login")?,
salt_id: row.try_get("salt_id")?
};
Ok(service_user)
}
Err(err) => {
Err(err)
}
}
}
pub async fn insert(
pool: &sqlx::PgPool,
service_user: &textsender_models::user::ServiceUser,
) -> Result<time::OffsetDateTime, sqlx::Error> {
match sqlx::query(
r#"INSERT INTO "service_user" (username, passphrase, salt_id)
VALUES ($1, $2, $3)
RETURNING created
"#,
)
.bind(&service_user.username)
.bind(&service_user.passphrase)
.bind(service_user.salt_id)
.fetch_one(pool)
.await
{
Ok(row) => {
let created: time::OffsetDateTime = row.try_get("created")?;
Ok(created)
}
Err(err) => Err(err),
}
}
pub async fn exists(pool: &sqlx::PgPool, service_username: &String) -> Result<bool, sqlx::Error> {
let result = sqlx::query(
r#"
SELECT 1 FROM "service_user" WHERE username = $1
"#,
)
.bind(service_username)
.fetch_optional(pool)
.await;
match result {
Ok(r) => match r {
Some(row) => {
if row.is_empty() {
Ok(false)
} else {
Ok(true)
}
}
None => Ok(false),
},
Err(e) => {
eprintln!("What??");
eprintln!("Error: {e:?}");
Err(e)
}
}
}