forked from Ruderverein-Donau-Linz/rowt
62 lines
1.3 KiB
Rust
62 lines
1.3 KiB
Rust
|
pub struct Users {
|
||
|
users: Vec<User>,
|
||
|
}
|
||
|
|
||
|
#[derive(Debug)]
|
||
|
pub enum Error {}
|
||
|
|
||
|
//#[rocket::async_trait]
|
||
|
//impl<'r> FromRequest<'r> for User {
|
||
|
// type Error = Error;
|
||
|
//
|
||
|
// async fn from_request(req: &'r Request<'_>) -> request::Outcome<Self, Self::Error> {
|
||
|
// //TODO: https://betterprogramming.pub/building-the-rust-web-app-multiple-users-and-authentication-5ca5988ddfe4
|
||
|
// }
|
||
|
//}
|
||
|
|
||
|
impl Deref for Users {
|
||
|
type Target = Vec<User>;
|
||
|
|
||
|
fn deref(&self) -> &Self::Target {
|
||
|
&self.users
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl Users {
|
||
|
pub async fn new(pool: &SqlitePool) -> Result<Self, sqlx::Error> {
|
||
|
let users: Vec<User> = sqlx::query_as!(
|
||
|
User,
|
||
|
r#"
|
||
|
SELECT id, name, pw, is_cox, is_admin, is_guest
|
||
|
FROM user
|
||
|
"#,
|
||
|
)
|
||
|
.fetch_all(pool)
|
||
|
.await?;
|
||
|
|
||
|
Ok(Self { users })
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#[cfg(test)]
|
||
|
mod test {
|
||
|
use super::Users;
|
||
|
use sqlx::SqlitePool;
|
||
|
|
||
|
#[sqlx::test]
|
||
|
fn user_with_test_db() {
|
||
|
let pool = SqlitePool::connect(":memory:").await.unwrap();
|
||
|
sqlx::query_file!("./migration.sql")
|
||
|
.execute(&pool)
|
||
|
.await
|
||
|
.unwrap();
|
||
|
sqlx::query_file!("./seeds.sql")
|
||
|
.execute(&pool)
|
||
|
.await
|
||
|
.unwrap();
|
||
|
|
||
|
let users = Users::new(&pool).await.unwrap();
|
||
|
assert_eq!(users.len(), 4);
|
||
|
}
|
||
|
}
|