diff options
| author | Santo Cariotti <santo@dcariotti.me> | 2024-08-21 10:38:20 +0000 |
|---|---|---|
| committer | Santo Cariotti <santo@dcariotti.me> | 2024-08-21 10:38:20 +0000 |
| commit | 24388ba81515c57e812994fdb9147e6de7f3a5b6 (patch) | |
| tree | b14a9ba122b419f1c8ebbff9327ad3c7005fd7fa /src/graphql/types | |
| parent | 91bfbd1abeb37ced029afba966a7134d92838baa (diff) | |
Reformat types mod
Diffstat (limited to 'src/graphql/types')
| -rw-r--r-- | src/graphql/types/mod.rs | 1 | ||||
| -rw-r--r-- | src/graphql/types/user.rs | 52 |
2 files changed, 53 insertions, 0 deletions
diff --git a/src/graphql/types/mod.rs b/src/graphql/types/mod.rs new file mode 100644 index 0000000..22d12a3 --- /dev/null +++ b/src/graphql/types/mod.rs @@ -0,0 +1 @@ +pub mod user; diff --git a/src/graphql/types/user.rs b/src/graphql/types/user.rs new file mode 100644 index 0000000..bf9080f --- /dev/null +++ b/src/graphql/types/user.rs @@ -0,0 +1,52 @@ +use crate::state::AppState; +use async_graphql::{Context, Object}; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct User { + pub id: i32, + pub email: String, + pub password: String, + pub is_admin: bool, +} + +#[Object] +impl User { + async fn id(&self) -> i32 { + self.id + } + + async fn email(&self) -> String { + self.email.clone() + } + + async fn password(&self) -> String { + String::from("******") + } + + async fn is_admin(&self) -> bool { + self.is_admin + } +} + +pub async fn get_users<'ctx>(ctx: &Context<'ctx>) -> Result<Option<Vec<User>>, String> { + let state = ctx.data::<AppState>().expect("Can't connect to db"); + let client = &*state.client; + + let rows = client + .query("SELECT id, email, password, is_admin FROM users", &[]) + .await + .unwrap(); + + let users: Vec<User> = rows + .iter() + .map(|row| User { + id: row.get("id"), + email: row.get("email"), + password: row.get("password"), + is_admin: row.get("is_admin"), + }) + .collect(); + + Ok(Some(users)) +} |
