summaryrefslogtreecommitdiffstats
path: root/src/models
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2022-09-09 09:31:25 +0000
committerSanto Cariotti <santo@dcariotti.me>2022-09-09 09:31:25 +0000
commite8c799cb65f58c1e9a4b2809489ef3b5760638d8 (patch)
tree44373b0b59bb868598f9012fc15c327603e4cf87 /src/models
parentacc32ccc1650b99e03c390a87e71b0a85b073162 (diff)
Serialize author' info for models
Diffstat (limited to 'src/models')
-rw-r--r--src/models/model.rs31
1 files changed, 27 insertions, 4 deletions
diff --git a/src/models/model.rs b/src/models/model.rs
index 1fe9b61..e3fc7ac 100644
--- a/src/models/model.rs
+++ b/src/models/model.rs
@@ -1,5 +1,6 @@
use crate::db::get_client;
use crate::errors::AppError;
+use sqlx::types::JsonValue;
use chrono::{Local, NaiveDateTime};
use serde::{Deserialize, Serialize};
@@ -34,6 +35,22 @@ pub struct ModelCreate {
pub material: Option<String>,
}
+#[derive(Serialize)]
+pub struct ModelUser {
+ id: i32,
+ name: String,
+ description: Option<String>,
+ duration: i32,
+ height: i32,
+ weight: i32,
+ printer: Option<String>,
+ material: Option<String>,
+ author_id: i32,
+ created: NaiveDateTime,
+ updated: NaiveDateTime,
+ author: Option<JsonValue>,
+}
+
impl Model {
pub fn new(
name: String,
@@ -94,11 +111,17 @@ impl Model {
}
/// List all models
- pub async fn list() -> Result<Vec<Model>, AppError> {
+ pub async fn list() -> Result<Vec<ModelUser>, AppError> {
let pool = unsafe { get_client() };
- let rows = sqlx::query_as!(Model, r#"SELECT * FROM models"#)
- .fetch_all(pool)
- .await?;
+ let rows = sqlx::query_as!(
+ ModelUser,
+ r#"SELECT
+ models.*,
+ json_build_object('id', users.id, 'email', users.email, 'username', users.username, 'is_staff', users.is_staff) as author
+ FROM models JOIN users ON users.id = models.author_id"#
+ )
+ .fetch_all(pool)
+ .await?;
Ok(rows)
}