Get contact (#10)
Rust Build / Test Suite (push) Successful in 49s
Rust Build / Rustfmt (push) Successful in 56s
Rust Build / Clippy (push) Successful in 1m53s
Rust Build / Check (push) Successful in 3m0s
Rust Build / build (push) Successful in 2m57s

Reviewed-on: phoenix/textsender_api#10
This commit was merged in pull request #10.
This commit is contained in:
2026-06-14 23:25:35 -04:00
parent 3117f46a73
commit a226adcd0f
8 changed files with 353 additions and 129 deletions
+58
View File
@@ -119,4 +119,62 @@ pub mod contact {
},
}
}
pub async fn get_with_user_id(
pool: &sqlx::PgPool,
user_id: &uuid::Uuid,
) -> Result<Vec<textsender_models::contact::Contact>, sqlx::Error> {
match sqlx::query(
r#"
SELECT id, firstname, lastname, nickname, phone_number, user_id FROM "contacts"
WHERE
user_id = $1;
"#,
)
.bind(user_id)
.fetch_all(pool)
.await
{
Ok(rows) => {
let mut contacts: Vec<textsender_models::contact::Contact> = Vec::new();
for row in rows {
let id: uuid::Uuid = row.try_get("id")?;
let phone_number: String = row.try_get("phone_number")?;
let user_id: uuid::Uuid = row.try_get("user_id")?;
let contact = textsender_models::contact::Contact {
id: Some(id),
firstname: match row.try_get("firstname") {
Ok(val) => val,
Err(err) => {
eprintln!("Error: {err:?}");
None
}
},
lastname: match row.try_get("lastname") {
Ok(val) => val,
Err(err) => {
eprintln!("Error: {err:?}");
None
}
},
nickname: match row.try_get("nickname") {
Ok(val) => val,
Err(err) => {
eprintln!(
"Error: nickname has no value for contacts record {err:?}"
);
None
}
},
phone_number,
user_id: Some(user_id),
};
contacts.push(contact);
}
Ok(contacts)
}
Err(_) => Err(sqlx::Error::RowNotFound),
}
}
}