diff options
author | Santo Cariotti <santo@dcariotti.me> | 2022-08-22 17:13:58 +0200 |
---|---|---|
committer | Santo Cariotti <santo@dcariotti.me> | 2022-08-22 17:18:23 +0200 |
commit | 5b32f1eb39f14457a11701095218524fc50f5a73 (patch) | |
tree | 389f30582cc3f8e6485bf2e1720d554d5851874f /server/src/models/user.rs | |
parent | bb186c0d67139f076ca8ec1aa99ac0841b3036f3 (diff) |
Move models
Diffstat (limited to 'server/src/models/user.rs')
-rw-r--r-- | server/src/models/user.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/server/src/models/user.rs b/server/src/models/user.rs new file mode 100644 index 0000000..d7a836f --- /dev/null +++ b/server/src/models/user.rs @@ -0,0 +1,39 @@ +use crate::db::get_client; +use crate::errors::AppError; + +use serde::{Deserialize, Serialize}; + +#[derive(Deserialize, Serialize)] +pub struct User { + id: i32, + email: String, + password: String, +} + +impl User { + pub async fn create(user: User) -> Result<i32, AppError> { + let pool = unsafe { get_client() }; + let rec = sqlx::query!( + r#" +INSERT INTO users (email, password) +VALUES ( $1, $2 ) +RETURNING id + "#, + user.email, + user.password + ) + .fetch_one(pool) + .await?; + + Ok(rec.id) + } + + pub async fn list() -> Result<Vec<User>, AppError> { + let pool = unsafe { get_client() }; + let rows = sqlx::query_as!(User, r#"SELECT id, email, password FROM users"#) + .fetch_all(pool) + .await?; + + Ok(rows) + } +} |