2022-06-07 22:53:28 -04:00
|
|
|
use juniper::{graphql_object, GraphQLInputObject};
|
2019-12-07 21:16:46 +07:00
|
|
|
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,
|
|
|
|
}
|
|
|
|
|
2022-06-07 22:53:28 -04:00
|
|
|
#[graphql_object(Context = Context)]
|
2019-12-07 21:16:46 +07:00
|
|
|
impl User {
|
2019-12-07 23:59:24 +06:00
|
|
|
fn id(&self) -> &str {
|
|
|
|
&self.id
|
|
|
|
}
|
2019-12-07 21:16:46 +07:00
|
|
|
fn name(&self) -> &str {
|
|
|
|
&self.name
|
|
|
|
}
|
2019-12-07 23:59:24 +06:00
|
|
|
fn email(&self) -> &str {
|
|
|
|
&self.email
|
|
|
|
}
|
2019-12-07 21:16:46 +07:00
|
|
|
|
|
|
|
fn products(&self, context: &Context) -> Vec<Product> {
|
|
|
|
let mut conn = context.dbpool.get().unwrap();
|
2020-04-03 16:14:30 +09:00
|
|
|
|
2020-04-03 16:16:17 +09:00
|
|
|
conn.prep_exec(
|
|
|
|
"select * from product where user_id=:user_id",
|
|
|
|
params! {
|
|
|
|
"user_id" => &self.id
|
|
|
|
},
|
|
|
|
)
|
|
|
|
.map(|result| {
|
|
|
|
result
|
|
|
|
.map(|x| x.unwrap())
|
2021-04-26 20:32:32 +09:00
|
|
|
.map(|row| {
|
2020-04-03 16:16:17 +09:00
|
|
|
let (id, user_id, name, price) = from_row(row);
|
|
|
|
Product {
|
|
|
|
id,
|
|
|
|
user_id,
|
|
|
|
name,
|
|
|
|
price,
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.collect()
|
|
|
|
})
|
|
|
|
.unwrap()
|
2019-12-07 21:16:46 +07:00
|
|
|
}
|
|
|
|
}
|