diff --git a/api/src/data/cult/create_cult.rs b/api/src/data/cult/create_cult.rs new file mode 100644 index 0000000..76e2206 --- /dev/null +++ b/api/src/data/cult/create_cult.rs @@ -0,0 +1,18 @@ + +use crate::type_defs::{Cult,NewCult}; +use crate::db::get_db_conn; + +pub fn create_cult(data: NewCult) -> Cult { + let conn = get_db_conn(); + let res = &conn + .query( + "INSERT INTO cults (name) VALUES ($1) RETURNING id, name;", + &[&data.name], + ) + .unwrap(); + let row = res.iter().next().unwrap(); + Cult { + id: row.get(0), + name: row.get(1), + } +} diff --git a/api/src/data/cult/mod.rs b/api/src/data/cult/mod.rs index 4b57ad6..e77c580 100644 --- a/api/src/data/cult/mod.rs +++ b/api/src/data/cult/mod.rs @@ -1,6 +1,7 @@ -use crate::type_defs::Cult; +use crate::type_defs::{Cult, NewCult}; pub mod get_cult_by_id; +pub mod create_cult; use get_cult_by_id::{get_loader, CultLoader}; #[derive(Clone)] @@ -17,4 +18,7 @@ impl CultData { pub async fn cult_by_id(&self, id: i32) -> Cult { self.cult_by_id.load(id).await.unwrap() } + pub async fn create_cult(&self, data: NewCult) -> Cult { + create_cult::create_cult(data) + } } \ No newline at end of file diff --git a/api/src/data/person/create_person.rs b/api/src/data/person/create_person.rs new file mode 100644 index 0000000..7c408df --- /dev/null +++ b/api/src/data/person/create_person.rs @@ -0,0 +1,19 @@ + +use crate::type_defs::{Person,NewPerson}; +use crate::db::get_db_conn; + +pub fn create_person(data: NewPerson) -> Person { + let conn = get_db_conn(); + let res = &conn + .query( + "INSERT INTO persons (name, cult) VALUES ($1, $2) RETURNING id, name, cult;", + &[&data.name, &data.cult], + ) + .unwrap(); + let row = res.iter().next().unwrap(); + Person { + id: row.get(0), + name: row.get(1), + cult: row.get(2) + } +} diff --git a/api/src/data/person/get_person_by_id.rs b/api/src/data/person/get_person_by_id.rs index b46f8fd..8f9f56a 100644 --- a/api/src/data/person/get_person_by_id.rs +++ b/api/src/data/person/get_person_by_id.rs @@ -24,22 +24,6 @@ pub fn get_person_by_ids(hashmap: &mut HashMap, ids: Vec) { } } -// pub fn create_person(data: NewPerson) -> Person { -// let conn = get_db_conn(); -// let res = &conn -// .query( -// "INSERT INTO persons (name, cult) VALUES ($1, $2) RETURNING id, name, cult;", -// &[&data.name, &data.cult], -// ) -// .unwrap(); -// let row = res.iter().next().unwrap(); -// Person { -// id: row.get(0), -// name: row.get(1), -// cult: row.get(2) -// } -// } - pub struct PersonBatcher; diff --git a/api/src/data/person/mod.rs b/api/src/data/person/mod.rs index 2d37c15..e5df65a 100644 --- a/api/src/data/person/mod.rs +++ b/api/src/data/person/mod.rs @@ -1,7 +1,8 @@ -use crate::type_defs::Person; +use crate::type_defs::{Person, NewPerson}; pub mod get_person_by_id; pub mod get_persons_by_cult_id; +pub mod create_person; #[derive(Clone)] pub struct PersonData { @@ -22,4 +23,7 @@ impl PersonData { pub async fn persons_by_cult_id(&self, id: i32) -> Vec { self.persons_by_cult_id.load(id).await.unwrap() } + pub async fn create_person(&self, data: NewPerson) -> Person { + create_person::create_person(data) + } } \ No newline at end of file diff --git a/api/src/graphql/mutation.rs b/api/src/graphql/mutation.rs index 5cb03f6..4a9067d 100644 --- a/api/src/graphql/mutation.rs +++ b/api/src/graphql/mutation.rs @@ -1,11 +1,15 @@ use super::schema::Context; +use crate::type_defs::{Cult, NewCult, NewPerson, Person}; +use juniper::FieldResult; pub struct Mutation; #[juniper::graphql_object(Context = Context)] impl Mutation { - // not really needed, but graphiql bug if this is empty… - pub fn nothing(_name: String) -> i32 { - 0 + pub async fn create_person(ctx: &Context, data: NewPerson) -> FieldResult { + Ok(ctx.person_data.create_person(data).await) } -} \ No newline at end of file + pub async fn create_cult(ctx: &Context, data: NewCult) -> FieldResult { + Ok(ctx.cult_data.create_cult(data).await) + } +} diff --git a/api/src/type_defs/cults.rs b/api/src/type_defs/cults.rs index aa6b545..f6a482f 100644 --- a/api/src/type_defs/cults.rs +++ b/api/src/type_defs/cults.rs @@ -10,6 +10,12 @@ pub struct Cult { pub name: String, } +#[derive(juniper::GraphQLInputObject, Debug, Clone)] +#[graphql(name="NewPerson", description="A creating a person!")] +pub struct NewCult { + pub name: String, +} + #[juniper::graphql_object(Context = Context)] impl Cult { pub fn id(&self) -> i32 { diff --git a/api/src/type_defs/mod.rs b/api/src/type_defs/mod.rs index 2ea0031..9dbb28f 100644 --- a/api/src/type_defs/mod.rs +++ b/api/src/type_defs/mod.rs @@ -2,4 +2,7 @@ mod cults; mod person; pub use cults::Cult; -pub use person::Person; \ No newline at end of file +pub use cults::NewCult; + +pub use person::Person; +pub use person::NewPerson; \ No newline at end of file diff --git a/api/src/type_defs/person.rs b/api/src/type_defs/person.rs index 47ee7e5..5f482ee 100644 --- a/api/src/type_defs/person.rs +++ b/api/src/type_defs/person.rs @@ -13,6 +13,13 @@ pub struct Person { pub cult: Option, } +#[derive(juniper::GraphQLInputObject, Debug, Clone)] +#[graphql(name="NewPerson", description="A creating a person!")] +pub struct NewPerson { + pub name: String, + pub cult: Option, +} + #[juniper::graphql_object(Context = Context)] impl Person { pub fn id(&self) -> i32 {