mirror of
https://github.com/actix/examples
synced 2025-03-13 08:32:36 +01:00
46 lines
1.1 KiB
Rust
46 lines
1.1 KiB
Rust
|
use juniper;
|
||
|
use mysql::{from_row, params};
|
||
|
|
||
|
use crate::schemas::product::Product;
|
||
|
use crate::schemas::root::Context;
|
||
|
|
||
|
/// User
|
||
|
#[derive(Default, Debug)]
|
||
|
pub struct User {
|
||
|
pub id: String,
|
||
|
pub name: String,
|
||
|
pub email: String,
|
||
|
}
|
||
|
|
||
|
#[derive(GraphQLInputObject)]
|
||
|
#[graphql(description = "User Input")]
|
||
|
pub struct UserInput {
|
||
|
pub name: String,
|
||
|
pub email: String,
|
||
|
}
|
||
|
|
||
|
|
||
|
#[juniper::object(Context = Context)]
|
||
|
impl User {
|
||
|
fn id(&self) -> &str { &self.id }
|
||
|
fn name(&self) -> &str {
|
||
|
&self.name
|
||
|
}
|
||
|
fn email(&self) -> &str { &self.email }
|
||
|
|
||
|
fn products(&self, context: &Context) -> Vec<Product> {
|
||
|
let mut conn = context.dbpool.get().unwrap();
|
||
|
let products = conn.prep_exec(
|
||
|
"select * from product where user_id=:user_id", params! {
|
||
|
"user_id" => &self.id
|
||
|
})
|
||
|
.map(|result| {
|
||
|
result.map(|x| x.unwrap()).map(|mut row| {
|
||
|
let (id, user_id, name, price) = from_row(row);
|
||
|
Product { id, user_id, name, price }
|
||
|
}).collect()
|
||
|
}).unwrap();
|
||
|
products
|
||
|
}
|
||
|
}
|