diff options
Diffstat (limited to 'rust/src')
-rw-r--r-- | rust/src/api_server.rs | 257 |
1 files changed, 139 insertions, 118 deletions
diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs index 883b3ae4..33195c02 100644 --- a/rust/src/api_server.rs +++ b/rust/src/api_server.rs @@ -79,7 +79,7 @@ macro_rules! wrap_entity_handlers { } } -macro_rules! entity_batch_post_handler { +macro_rules! entity_batch_handler { ($post_handler:ident, $post_batch_handler:ident, $model:ident) => { fn $post_batch_handler(&self, entity_list: &Vec<models::$model>) -> Result<Vec<EntityEdit>> { let conn = self.db_pool.get().expect("db_pool error"); @@ -286,7 +286,7 @@ fn work_row2entity(ident: Option<WorkIdentRow>, rev: WorkRevRow) -> Result<WorkE } impl Server { - fn container_id_get_handler(&self, id: String) -> Result<ContainerEntity> { + fn get_container_handler(&self, id: String) -> Result<ContainerEntity> { let conn = self.db_pool.get().expect("db_pool error"); let id = uuid::Uuid::parse_str(&id)?; @@ -299,7 +299,7 @@ impl Server { container_row2entity(Some(ident), rev) } - fn container_lookup_get_handler(&self, issnl: String) -> Result<ContainerEntity> { + fn lookup_container_handler(&self, issnl: String) -> Result<ContainerEntity> { let conn = self.db_pool.get().expect("db_pool error"); let (ident, rev): (ContainerIdentRow, ContainerRevRow) = container_ident::table @@ -312,7 +312,7 @@ impl Server { container_row2entity(Some(ident), rev) } - fn creator_id_get_handler(&self, id: String) -> Result<CreatorEntity> { + fn get_creator_handler(&self, id: String) -> Result<CreatorEntity> { let conn = self.db_pool.get().expect("db_pool error"); let id = uuid::Uuid::parse_str(&id)?; @@ -324,7 +324,7 @@ impl Server { creator_row2entity(Some(ident), rev) } - fn creator_lookup_get_handler(&self, orcid: String) -> Result<CreatorEntity> { + fn lookup_creator_handler(&self, orcid: String) -> Result<CreatorEntity> { let conn = self.db_pool.get().expect("db_pool error"); let (ident, rev): (CreatorIdentRow, CreatorRevRow) = creator_ident::table @@ -337,7 +337,7 @@ impl Server { creator_row2entity(Some(ident), rev) } - fn file_id_get_handler(&self, id: String) -> Result<FileEntity> { + fn get_file_handler(&self, id: String) -> Result<FileEntity> { let conn = self.db_pool.get().expect("db_pool error"); let id = uuid::Uuid::parse_str(&id)?; @@ -349,7 +349,7 @@ impl Server { file_row2entity(Some(ident), rev, conn) } - fn file_lookup_get_handler(&self, sha1: String) -> Result<FileEntity> { + fn lookup_file_handler(&self, sha1: String) -> Result<FileEntity> { let conn = self.db_pool.get().expect("db_pool error"); let (ident, rev): (FileIdentRow, FileRevRow) = file_ident::table @@ -362,7 +362,7 @@ impl Server { file_row2entity(Some(ident), rev, conn) } - fn release_id_get_handler(&self, id: String) -> Result<ReleaseEntity> { + fn get_release_handler(&self, id: String) -> Result<ReleaseEntity> { let conn = self.db_pool.get().expect("db_pool error"); let id = uuid::Uuid::parse_str(&id)?; @@ -374,7 +374,7 @@ impl Server { release_row2entity(Some(ident), rev, conn) } - fn release_lookup_get_handler(&self, doi: String) -> Result<ReleaseEntity> { + fn lookup_release_handler(&self, doi: String) -> Result<ReleaseEntity> { let conn = self.db_pool.get().expect("db_pool error"); let (ident, rev): (ReleaseIdentRow, ReleaseRevRow) = release_ident::table @@ -387,7 +387,7 @@ impl Server { release_row2entity(Some(ident), rev, conn) } - fn work_id_get_handler(&self, id: String) -> Result<WorkEntity> { + fn get_work_handler(&self, id: String) -> Result<WorkEntity> { let conn = self.db_pool.get().expect("db_pool error"); let id = uuid::Uuid::parse_str(&id)?; @@ -399,12 +399,16 @@ impl Server { work_row2entity(Some(ident), rev) } - fn container_post_handler(&self, entity: models::ContainerEntity, conn: Option<&DbConn>) -> Result<EntityEdit> { + fn create_container_handler( + &self, + entity: models::ContainerEntity, + conn: Option<&DbConn>, + ) -> Result<EntityEdit> { // TODO: still can't cast for some reason // There mut be a cleaner way to manage the lifetime here let real_conn = match conn { Some(_) => None, - None => { Some(self.db_pool.get().expect("database pool")) }, + None => Some(self.db_pool.get().expect("database pool")), }; let conn = match real_conn { Some(ref c) => c, @@ -438,28 +442,33 @@ impl Server { edit.to_model() } - entity_batch_post_handler!(container_post_handler, container_batch_post_handler, ContainerEntity); - entity_batch_post_handler!(creator_post_handler, creator_batch_post_handler, CreatorEntity); - entity_batch_post_handler!(file_post_handler, file_batch_post_handler, FileEntity); - entity_batch_post_handler!(release_post_handler, release_batch_post_handler, ReleaseEntity); - entity_batch_post_handler!(work_post_handler, work_batch_post_handler, WorkEntity); -/* XXX: - fn container_batch_post_handler(&self, entity_list: &Vec<models::ContainerEntity>) -> Result<Vec<EntityEdit>> { - let conn = self.db_pool.get().expect("db_pool error"); - // TODO: start a transaction - let ret: Vec<EntityEdit> = vec![]; - for entity in entity_list.into_iter() { - ret.push(self.container_post_handler(*entity, Some(conn))?); - } - Ok(ret) - } -*/ + entity_batch_handler!( + create_container_handler, + create_container_batch_handler, + ContainerEntity + ); + entity_batch_handler!( + create_creator_handler, + create_creator_batch_handler, + CreatorEntity + ); + entity_batch_handler!(create_file_handler, create_file_batch_handler, FileEntity); + entity_batch_handler!( + create_release_handler, + create_release_batch_handler, + ReleaseEntity + ); + entity_batch_handler!(create_work_handler, create_work_batch_handler, WorkEntity); - fn creator_post_handler(&self, entity: models::CreatorEntity, conn: Option<&DbConn>) -> Result<EntityEdit> { + fn create_creator_handler( + &self, + entity: models::CreatorEntity, + conn: Option<&DbConn>, + ) -> Result<EntityEdit> { // There mut be a cleaner way to manage the lifetime here let real_conn = match conn { Some(_) => None, - None => { Some(self.db_pool.get().expect("database pool")) }, + None => Some(self.db_pool.get().expect("database pool")), }; let conn = match real_conn { Some(ref c) => c, @@ -490,11 +499,15 @@ impl Server { edit.to_model() } - fn file_post_handler(&self, entity: models::FileEntity, conn: Option<&DbConn>) -> Result<EntityEdit> { + fn create_file_handler( + &self, + entity: models::FileEntity, + conn: Option<&DbConn>, + ) -> Result<EntityEdit> { // There mut be a cleaner way to manage the lifetime here let real_conn = match conn { Some(_) => None, - None => { Some(self.db_pool.get().expect("database pool")) }, + None => Some(self.db_pool.get().expect("database pool")), }; let conn = match real_conn { Some(ref c) => c, @@ -550,11 +563,15 @@ impl Server { edit.to_model() } - fn release_post_handler(&self, entity: models::ReleaseEntity, conn: Option<&DbConn>) -> Result<EntityEdit> { + fn create_release_handler( + &self, + entity: models::ReleaseEntity, + conn: Option<&DbConn>, + ) -> Result<EntityEdit> { // There mut be a cleaner way to manage the lifetime here let real_conn = match conn { Some(_) => None, - None => { Some(self.db_pool.get().expect("database pool")) }, + None => Some(self.db_pool.get().expect("database pool")), }; let conn = match real_conn { Some(ref c) => c, @@ -654,11 +671,15 @@ impl Server { edit.to_model() } - fn work_post_handler(&self, entity: models::WorkEntity, conn: Option<&DbConn>) -> Result<EntityEdit> { + fn create_work_handler( + &self, + entity: models::WorkEntity, + conn: Option<&DbConn>, + ) -> Result<EntityEdit> { // There mut be a cleaner way to manage the lifetime here let real_conn = match conn { Some(_) => None, - None => { Some(self.db_pool.get().expect("database pool")) }, + None => Some(self.db_pool.get().expect("database pool")), }; let conn = match real_conn { Some(ref c) => c, @@ -690,7 +711,7 @@ impl Server { edit.to_model() } - fn editgroup_id_get_handler(&self, id: i64) -> Result<Option<Editgroup>> { + fn editgroup_handler(&self, id: i64) -> Result<Option<Editgroup>> { let conn = self.db_pool.get().expect("db_pool error"); let row: EditgroupRow = editgroup::table.find(id as i64).first(&conn)?; @@ -748,7 +769,7 @@ impl Server { Ok(Some(eg)) } - fn editor_get_handler(&self, username: String) -> Result<Option<Editor>> { + fn get_editor_handler(&self, username: String) -> Result<Option<Editor>> { let conn = self.db_pool.get().expect("db_pool error"); let row: EditorRow = editor::table @@ -787,134 +808,134 @@ impl Server { impl Api for Server { wrap_entity_handlers!( - container_id_get, - container_id_get_handler, - ContainerIdGetResponse, - container_post, - container_post_handler, - ContainerPostResponse, - container_batch_post, - container_batch_post_handler, - ContainerBatchPostResponse, + get_container, + get_container_handler, + GetContainerResponse, + create_container, + create_container_handler, + CreateContainerResponse, + create_container_batch, + create_container_batch_handler, + CreateContainerBatchResponse, ContainerEntity ); wrap_entity_handlers!( - creator_id_get, - creator_id_get_handler, - CreatorIdGetResponse, - creator_post, - creator_post_handler, - CreatorPostResponse, - creator_batch_post, - creator_batch_post_handler, - CreatorBatchPostResponse, + get_creator, + get_creator_handler, + GetCreatorResponse, + create_creator, + create_creator_handler, + CreateCreatorResponse, + create_creator_batch, + create_creator_batch_handler, + CreateCreatorBatchResponse, CreatorEntity ); wrap_entity_handlers!( - file_id_get, - file_id_get_handler, - FileIdGetResponse, - file_post, - file_post_handler, - FilePostResponse, - file_batch_post, - file_batch_post_handler, - FileBatchPostResponse, + get_file, + get_file_handler, + GetFileResponse, + create_file, + create_file_handler, + CreateFileResponse, + create_file_batch, + create_file_batch_handler, + CreateFileBatchResponse, FileEntity ); wrap_entity_handlers!( - release_id_get, - release_id_get_handler, - ReleaseIdGetResponse, - release_post, - release_post_handler, - ReleasePostResponse, - release_batch_post, - release_batch_post_handler, - ReleaseBatchPostResponse, + get_release, + get_release_handler, + GetReleaseResponse, + create_release, + create_release_handler, + CreateReleaseResponse, + create_release_batch, + create_release_batch_handler, + CreateReleaseBatchResponse, ReleaseEntity ); wrap_entity_handlers!( - work_id_get, - work_id_get_handler, - WorkIdGetResponse, - work_post, - work_post_handler, - WorkPostResponse, - work_batch_post, - work_batch_post_handler, - WorkBatchPostResponse, + get_work, + get_work_handler, + GetWorkResponse, + create_work, + create_work_handler, + CreateWorkResponse, + create_work_batch, + create_work_batch_handler, + CreateWorkBatchResponse, WorkEntity ); wrap_lookup_handler!( - container_lookup_get, - container_lookup_get_handler, - ContainerLookupGetResponse, + lookup_container, + lookup_container_handler, + LookupContainerResponse, issnl, String ); wrap_lookup_handler!( - creator_lookup_get, - creator_lookup_get_handler, - CreatorLookupGetResponse, + lookup_creator, + lookup_creator_handler, + LookupCreatorResponse, orcid, String ); wrap_lookup_handler!( - file_lookup_get, - file_lookup_get_handler, - FileLookupGetResponse, + lookup_file, + lookup_file_handler, + LookupFileResponse, sha1, String ); wrap_lookup_handler!( - release_lookup_get, - release_lookup_get_handler, - ReleaseLookupGetResponse, + lookup_release, + lookup_release_handler, + LookupReleaseResponse, doi, String ); - fn editgroup_id_accept_post( + fn accept_editgroup( &self, id: i64, _context: &Context, - ) -> Box<Future<Item = EditgroupIdAcceptPostResponse, Error = ApiError> + Send> { + ) -> Box<Future<Item = AcceptEditgroupResponse, Error = ApiError> + Send> { let conn = self.db_pool.get().expect("db_pool error"); accept_editgroup(id as i64, &conn).expect("failed to accept editgroup"); - let ret = EditgroupIdAcceptPostResponse::MergedSuccessfully(Success { + let ret = AcceptEditgroupResponse::MergedSuccessfully(Success { message: "horray!".to_string(), }); Box::new(futures::done(Ok(ret))) } - fn editgroup_id_get( + fn get_editgroup( &self, id: i64, _context: &Context, - ) -> Box<Future<Item = EditgroupIdGetResponse, Error = ApiError> + Send> { - let ret = match self.editgroup_id_get_handler(id) { + ) -> Box<Future<Item = GetEditgroupResponse, Error = ApiError> + Send> { + let ret = match self.editgroup_handler(id) { Ok(Some(entity)) => - EditgroupIdGetResponse::FoundEntity(entity), + GetEditgroupResponse::FoundEntity(entity), Ok(None) => - EditgroupIdGetResponse::NotFound( + GetEditgroupResponse::NotFound( ErrorResponse { message: "No such entity".to_string() }), Err(e) => // TODO: dig in to error type here - EditgroupIdGetResponse::BadRequest( + GetEditgroupResponse::BadRequest( ErrorResponse { message: e.to_string() }), }; Box::new(futures::done(Ok(ret))) } - fn editgroup_post( + fn create_editgroup( &self, entity: models::Editgroup, _context: &Context, - ) -> Box<Future<Item = EditgroupPostResponse, Error = ApiError> + Send> { + ) -> Box<Future<Item = CreateEditgroupResponse, Error = ApiError> + Send> { let conn = self.db_pool.get().expect("db_pool error"); let row: EditgroupRow = insert_into(editgroup::table) @@ -934,42 +955,42 @@ impl Api for Server { extra: row.extra_json, }; Box::new(futures::done(Ok( - EditgroupPostResponse::SuccessfullyCreated(new_eg), + CreateEditgroupResponse::SuccessfullyCreated(new_eg), ))) } - fn editor_username_changelog_get( + fn get_editor_changelog( &self, username: String, _context: &Context, - ) -> Box<Future<Item = EditorUsernameChangelogGetResponse, Error = ApiError> + Send> { + ) -> Box<Future<Item = GetEditorChangelogResponse, Error = ApiError> + Send> { let ret = match self.editor_changelog_get_handler(username) { Ok(Some(entries)) => - EditorUsernameChangelogGetResponse::FoundMergedChanges(entries), + GetEditorChangelogResponse::FoundMergedChanges(entries), Ok(None) => - EditorUsernameChangelogGetResponse::NotFound( + GetEditorChangelogResponse::NotFound( ErrorResponse { message: "No such entity".to_string() }), Err(e) => // TODO: dig in to error type here - EditorUsernameChangelogGetResponse::GenericError( + GetEditorChangelogResponse::GenericError( ErrorResponse { message: e.to_string() }), }; Box::new(futures::done(Ok(ret))) } - fn editor_username_get( + fn get_editor( &self, username: String, _context: &Context, - ) -> Box<Future<Item = EditorUsernameGetResponse, Error = ApiError> + Send> { - let ret = match self.editor_get_handler(username) { + ) -> Box<Future<Item = GetEditorResponse, Error = ApiError> + Send> { + let ret = match self.get_editor_handler(username) { Ok(Some(entity)) => - EditorUsernameGetResponse::FoundEditor(entity), + GetEditorResponse::FoundEditor(entity), Ok(None) => - EditorUsernameGetResponse::NotFound(ErrorResponse { message: "No such entity".to_string() }), + GetEditorResponse::NotFound(ErrorResponse { message: "No such entity".to_string() }), Err(e) => // TODO: dig in to error type here - EditorUsernameGetResponse::GenericError(ErrorResponse { message: e.to_string() }), + GetEditorResponse::GenericError(ErrorResponse { message: e.to_string() }), }; Box::new(futures::done(Ok(ret))) } |