From bb186c0d67139f076ca8ec1aa99ac0841b3036f3 Mon Sep 17 00:00:00 2001
From: Santo Cariotti <santo@dcariotti.me>
Date: Mon, 22 Aug 2022 17:04:48 +0200
Subject: Get all users

---
 server/src/main.rs         |  6 ++++--
 server/src/models/mod.rs   |  1 +
 server/src/models/users.rs | 39 +++++++++++++++++++++++++++++++++++++++
 3 files changed, 44 insertions(+), 2 deletions(-)
 create mode 100644 server/src/models/mod.rs
 create mode 100644 server/src/models/users.rs

(limited to 'server')

diff --git a/server/src/main.rs b/server/src/main.rs
index 3b080eb..8319fb2 100644
--- a/server/src/main.rs
+++ b/server/src/main.rs
@@ -1,6 +1,7 @@
 mod db;
 mod errors;
 mod logger;
+mod models;
 
 use axum::{
     http::{header, Request},
@@ -52,8 +53,9 @@ async fn create_app() -> Router {
 }
 
 // Example root which says hi
-async fn hej() -> Result<Json<Hej>, errors::AppError> {
-    Ok(Json(Hej::new("hej verden".to_string())))
+async fn hej() -> Result<Json<Vec<models::users::User>>, errors::AppError> {
+    let users = models::users::User::list().await?;
+    Ok(Json(users))
 }
 
 #[derive(Debug, Serialize)]
diff --git a/server/src/models/mod.rs b/server/src/models/mod.rs
new file mode 100644
index 0000000..913bd46
--- /dev/null
+++ b/server/src/models/mod.rs
@@ -0,0 +1 @@
+pub mod users;
diff --git a/server/src/models/users.rs b/server/src/models/users.rs
new file mode 100644
index 0000000..d7a836f
--- /dev/null
+++ b/server/src/models/users.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)
+    }
+}
-- 
cgit v1.2.3-18-g5258