diff options
Diffstat (limited to 'rust/src')
-rw-r--r-- | rust/src/api_server.rs | 42 | ||||
-rw-r--r-- | rust/src/database_models.rs | 30 | ||||
-rw-r--r-- | rust/src/lib.rs | 4 |
3 files changed, 38 insertions, 38 deletions
diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs index 81232728..8523f154 100644 --- a/rust/src/api_server.rs +++ b/rust/src/api_server.rs @@ -2,17 +2,12 @@ use ConnectionPool; use database_models::*; -use database_schema::{container_rev, container_ident, container_edit, - creator_rev, creator_ident, creator_edit, - file_rev, file_ident, file_edit, - release_rev, release_ident, release_edit, - work_rev, work_ident, work_edit, - editor, editgroup, changelog -}; -use uuid; +use database_schema::{changelog, container_edit, container_ident, container_rev, creator_edit, + creator_ident, creator_rev, editgroup, editor, file_edit, file_ident, + file_rev, release_edit, release_ident, release_rev, work_edit, work_ident, + work_rev}; use diesel::prelude::*; use diesel::{self, insert_into}; -use futures::{self, Future}; use fatcat_api::models; use fatcat_api::models::*; use fatcat_api::{Api, ApiError, ContainerIdGetResponse, ContainerLookupGetResponse, @@ -22,6 +17,8 @@ use fatcat_api::{Api, ApiError, ContainerIdGetResponse, ContainerLookupGetRespon EditorUsernameGetResponse, FileIdGetResponse, FileLookupGetResponse, FilePostResponse, ReleaseIdGetResponse, ReleaseLookupGetResponse, ReleasePostResponse, WorkIdGetResponse, WorkPostResponse}; +use futures::{self, Future}; +use uuid; #[derive(Clone)] pub struct Server { @@ -36,6 +33,7 @@ impl Api for Server { ) -> Box<Future<Item = ContainerIdGetResponse, Error = ApiError> + Send> { let conn = self.db_pool.get().expect("db_pool error"); let id = uuid::Uuid::parse_str(&id).unwrap(); + let (ident, rev): (ContainerIdentRow, ContainerRevRow) = container_ident::table .find(id) .inner_join(container_rev::table) @@ -45,9 +43,9 @@ impl Api for Server { let entity = ContainerEntity { issn: rev.issn, publisher: rev.publisher, - parent: None, // TODO + parent: None, // TODO name: Some(rev.name), // TODO: not optional - state: None, // TODO: + state: None, // TODO: ident: Some(ident.id.to_string()), revision: ident.rev_id.map(|v| v as isize), redirect: ident.redirect_id.map(|u| u.to_string()), @@ -79,7 +77,7 @@ impl Api for Server { ) -> Box<Future<Item = ContainerPostResponse, Error = ApiError> + Send> { println!("{:?}", body); let body = body.expect("missing body"); // TODO: required parameter - //let editgroup_id: i64 = body.editgroup.expect("need editgroup_id") as i64; // TODO: or find/create + //let editgroup_id: i64 = body.editgroup.expect("need editgroup_id") as i64; // TODO: or find/create let editgroup_id = 1; let conn = self.db_pool.get().expect("db_pool error"); @@ -96,8 +94,8 @@ impl Api for Server { RETURNING id ) INSERT INTO container_edit (editgroup_id, ident_id, rev_id) VALUES ($3, (SELECT ident.id FROM ident), (SELECT rev.id FROM rev)) - RETURNING *") - .bind::<diesel::sql_types::Text, _>(name) + RETURNING *", + ).bind::<diesel::sql_types::Text, _>(name) .bind::<diesel::sql_types::Text, _>(issn) .bind::<diesel::sql_types::BigInt, _>(editgroup_id) .load(&conn) @@ -110,9 +108,9 @@ impl Api for Server { ident: Some(edit.ident_id.to_string()), id: Some(edit.id as isize), }; - Box::new(futures::done(Ok( - ContainerPostResponse::Created(entity_edit), - ))) + Box::new(futures::done(Ok(ContainerPostResponse::Created( + entity_edit, + )))) } fn creator_id_get( @@ -121,16 +119,6 @@ impl Api for Server { _context: &Context, ) -> Box<Future<Item = CreatorIdGetResponse, Error = ApiError> + Send> { let conn = self.db_pool.get().expect("db_pool error"); - /* - let first_thing: (Uuid, bool, Option<i64>, Option<Uuid>) = creator_ident::table - .first(&conn) - .unwrap(); - let entity_table = creator_ident::table.left_join(creator_rev::table); - let thing: (creator_ident::SqlType, creator_rev::SqlType) = creator_ident::table - .inner_join(creator_rev::table) - .first(&conn) - .expect("Error loading creator"); - */ let ce = CreatorEntity { orcid: None, name: None, diff --git a/rust/src/database_models.rs b/rust/src/database_models.rs index e95e5980..0995304f 100644 --- a/rust/src/database_models.rs +++ b/rust/src/database_models.rs @@ -1,16 +1,14 @@ - use chrono; //use serde_json; -use uuid::Uuid; use database_schema::*; +use uuid::Uuid; // Ugh. I thought the whole point was to *not* do this, but: // https://github.com/diesel-rs/diesel/issues/1589 // Helper for constructing tables macro_rules! entity_structs { - ($edit_table:expr, $edit_struct:ident, $ident_table:expr, $ident_struct:ident) => ( - + ($edit_table:expr, $edit_struct:ident, $ident_table:expr, $ident_struct:ident) => { #[derive(Debug, Queryable, Identifiable, Associations, AsChangeset, QueryableByName)] #[table_name = $edit_table] pub struct $edit_struct { @@ -30,7 +28,7 @@ macro_rules! entity_structs { pub rev_id: Option<i64>, pub redirect_id: Option<Uuid>, } - ) + }; } #[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)] @@ -44,7 +42,12 @@ pub struct ContainerRevRow { pub issn: Option<String>, } -entity_structs!("container_edit", ContainerEditRow, "container_ident", ContainerIdentRow); +entity_structs!( + "container_edit", + ContainerEditRow, + "container_ident", + ContainerIdentRow +); #[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)] #[table_name = "creator_rev"] @@ -55,7 +58,12 @@ pub struct CreatorRevRow { pub orcid: Option<String>, } -entity_structs!("creator_edit", CreatorEditRow, "creator_ident", CreatorIdentRow); +entity_structs!( + "creator_edit", + CreatorEditRow, + "creator_ident", + CreatorIdentRow +); #[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)] #[table_name = "file_rev"] @@ -86,7 +94,12 @@ pub struct ReleaseRevRow { pub issue: Option<String>, } -entity_structs!("release_edit", ReleaseEditRow, "release_ident", ReleaseIdentRow); +entity_structs!( + "release_edit", + ReleaseEditRow, + "release_ident", + ReleaseIdentRow +); #[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)] #[table_name = "work_rev"] @@ -109,7 +122,6 @@ pub struct ReleaseContribRow { contrib_type: Option<String>, } - #[derive(Debug, Queryable, Identifiable, Associations, AsChangeset)] #[table_name = "release_ref"] pub struct ReleaseRefRow { diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 49d0ef70..b59d6024 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -3,9 +3,9 @@ extern crate fatcat_api; extern crate chrono; #[macro_use] extern crate diesel; -extern crate uuid; extern crate dotenv; extern crate futures; +extern crate uuid; #[macro_use] extern crate hyper; //extern crate swagger; @@ -16,8 +16,8 @@ extern crate r2d2; extern crate serde_json; pub mod api_server; -pub mod database_schema; pub mod database_models; +pub mod database_schema; mod errors { error_chain!{} |