diff options
| author | Santo Cariotti <santo@dcariotti.me> | 2022-09-09 09:31:25 +0000 |
|---|---|---|
| committer | Santo Cariotti <santo@dcariotti.me> | 2022-09-09 09:31:25 +0000 |
| commit | e8c799cb65f58c1e9a4b2809489ef3b5760638d8 (patch) | |
| tree | 44373b0b59bb868598f9012fc15c327603e4cf87 /src/models/model.rs | |
| parent | acc32ccc1650b99e03c390a87e71b0a85b073162 (diff) | |
Serialize author' info for models
Diffstat (limited to 'src/models/model.rs')
| -rw-r--r-- | src/models/model.rs | 31 |
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) } |
