summaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
Diffstat (limited to 'server/src')
-rw-r--r--server/src/models/user.rs29
-rw-r--r--server/src/routes/user.rs16
2 files changed, 37 insertions, 8 deletions
diff --git a/server/src/models/user.rs b/server/src/models/user.rs
index 08514a8..9545fac 100644
--- a/server/src/models/user.rs
+++ b/server/src/models/user.rs
@@ -8,22 +8,41 @@ pub struct User {
id: i32,
email: String,
password: String,
+ is_staff: Option<bool>,
}
#[derive(Deserialize, Serialize)]
pub struct UserList {
id: i32,
email: String,
+ is_staff: Option<bool>,
+}
+
+#[derive(Deserialize)]
+pub struct UserCreate {
+ pub email: String,
+ pub password: String,
}
impl User {
- pub async fn create(user: User) -> Result<i32, AppError> {
+ pub fn new(email: String, password: String) -> Self {
+ let crypted_password = sha256::digest(password);
+ Self {
+ id: 0,
+ email,
+ password: crypted_password,
+ is_staff: Some(false),
+ }
+ }
+
+ pub async fn create(user: User) -> Result<UserList, AppError> {
let pool = unsafe { get_client() };
- let rec = sqlx::query!(
+ let rec = sqlx::query_as!(
+ UserList,
r#"
INSERT INTO users (email, password)
VALUES ( $1, $2 )
- RETURNING id
+ RETURNING id, email, is_staff
"#,
user.email,
user.password
@@ -31,12 +50,12 @@ impl User {
.fetch_one(pool)
.await?;
- Ok(rec.id)
+ Ok(rec)
}
pub async fn list() -> Result<Vec<UserList>, AppError> {
let pool = unsafe { get_client() };
- let rows = sqlx::query_as!(UserList, r#"SELECT id, email FROM users"#)
+ let rows = sqlx::query_as!(UserList, r#"SELECT id, email, is_staff FROM users"#)
.fetch_all(pool)
.await?;
diff --git a/server/src/routes/user.rs b/server/src/routes/user.rs
index 1b43e01..7aecccb 100644
--- a/server/src/routes/user.rs
+++ b/server/src/routes/user.rs
@@ -1,9 +1,12 @@
use crate::errors::AppError;
-use crate::models::user::{User, UserList};
-use axum::{routing::get, Json, Router};
+use crate::models::user::{User, UserCreate, UserList};
+use axum::{
+ routing::{get},
+ Json, Router,
+};
pub fn create_route() -> Router {
- Router::new().route("/", get(list_users))
+ Router::new().route("/", get(list_users).post(create_user))
}
async fn list_users() -> Result<Json<Vec<UserList>>, AppError> {
@@ -11,3 +14,10 @@ async fn list_users() -> Result<Json<Vec<UserList>>, AppError> {
Ok(Json(users))
}
+
+async fn create_user(Json(payload): Json<UserCreate>) -> Result<Json<UserList>, AppError> {
+ let user = User::new(payload.email, payload.password);
+ let user_new = User::create(user).await?;
+
+ Ok(Json(user_new))
+}