feat: def interface to get user data

This commit is contained in:
Aravinth Manivannan 2022-06-04 20:57:48 +05:30
parent 54a1d28395
commit 653088376a
Signed by: realaravinth
GPG key ID: AD9F0F08E855ED88
2 changed files with 30 additions and 0 deletions

View file

@ -73,6 +73,20 @@ pub fn get_hostname(url: &Url) -> String {
url.host().as_ref().unwrap().to_string() url.host().as_ref().unwrap().to_string()
} }
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
/// user data
pub struct User {
/// hostname of the forge instance: with scheme but remove trailing slash
/// hostname can be derived from html_link also, but used to link to user's forge instance
pub hostname: String,
/// username of the user
pub username: String,
/// html link to the user profile
pub html_link: String,
/// OPTIONAL: html link to the user's profile photo
pub profile_photo: Option<String>,
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)] #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
/// add new user to database /// add new user to database
pub struct AddUser<'a> { pub struct AddUser<'a> {
@ -186,6 +200,9 @@ pub trait SCDatabase: std::marker::Send + std::marker::Sync + CloneSPDatabase {
/// add new user to database /// add new user to database
async fn add_user(&self, u: &AddUser) -> DBResult<()>; async fn add_user(&self, u: &AddUser) -> DBResult<()>;
/// get user data
async fn get_user(&self, username: &str, hostname: &str) -> DBResult<User>;
/// check if an user exists. When hostname of a forge instace is provided, username search is /// check if an user exists. When hostname of a forge instace is provided, username search is
/// done only on that forge /// done only on that forge
async fn user_exists(&self, username: &str, hostname: Option<&str>) -> DBResult<bool>; async fn user_exists(&self, username: &str, hostname: Option<&str>) -> DBResult<bool>;

View file

@ -42,6 +42,19 @@ pub async fn adding_forge_works<'a, T: SCDatabase>(
// add user // add user
db.add_user(&add_user_msg).await.unwrap(); db.add_user(&add_user_msg).await.unwrap();
db.add_user(&add_user_msg2).await.unwrap(); db.add_user(&add_user_msg2).await.unwrap();
{
let db_user = db
.get_user(add_user_msg.username, add_user_msg.hostname)
.await
.unwrap();
assert_eq!(db_user.hostname, add_user_msg.hostname);
assert_eq!(db_user.username, add_user_msg.username);
assert_eq!(db_user.html_link, add_user_msg.html_link);
assert_eq!(
db_user.profile_photo,
add_user_msg.profile_photo.map(|s| s.to_owned())
);
}
// verify user exists // verify user exists
assert!(db.user_exists(add_user_msg.username, None).await.unwrap()); assert!(db.user_exists(add_user_msg.username, None).await.unwrap());
assert!(db assert!(db