aboutsummaryrefslogtreecommitdiffstats
path: root/rust
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2018-06-28 12:24:06 -0700
committerBryan Newbold <bnewbold@robocracy.org>2018-06-28 12:24:08 -0700
commit3a49586df2545723a6cc6280cd8c9b75a535042f (patch)
tree34ac04264fd750d6f4168af051cedb08ae470203 /rust
parentf30e45c3eae4371cc5f1bee030791187a173c284 (diff)
downloadfatcat-3a49586df2545723a6cc6280cd8c9b75a535042f.tar.gz
fatcat-3a49586df2545723a6cc6280cd8c9b75a535042f.zip
auto-create works for releases
If a work_id isn't supplied, create a new work and link it. Note that the work_id doesn't get passed back in the response, only the release_id.
Diffstat (limited to 'rust')
-rw-r--r--rust/src/api_server.rs21
-rw-r--r--rust/tests/test_api_server.rs15
2 files changed, 34 insertions, 2 deletions
diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs
index 61005226..ca57ae29 100644
--- a/rust/src/api_server.rs
+++ b/rust/src/api_server.rs
@@ -291,7 +291,7 @@ fn release_row2entity(
container_id: rev.container_ident_id.map(|u| u.to_string()),
publisher: rev.publisher,
language: rev.language,
- work_id: rev.work_ident_id.to_string(),
+ work_id: Some(rev.work_ident_id.to_string()),
refs: Some(refs),
contribs: Some(contribs),
state: state,
@@ -676,7 +676,24 @@ impl Server {
Some(param) => param as i64,
};
- let work_id = uuid::Uuid::parse_str(&entity.work_id)?;
+ let work_id = match entity.work_id {
+ Some(work_id) => uuid::Uuid::parse_str(&work_id)?,
+ None => {
+ // If a work_id wasn't passed, create a new work under the current editgroup
+ let work_model = models::WorkEntity {
+ work_type: None,
+ ident: None,
+ revision: None,
+ redirect: None,
+ state: None,
+ editgroup_id: Some(editgroup_id),
+ extra: None,
+ };
+ let new_entity = self.create_work_handler(work_model, Some(&conn))?;
+ uuid::Uuid::parse_str(&new_entity.ident)?
+ }
+ };
+
let container_id: Option<uuid::Uuid> = match entity.container_id {
Some(id) => Some(uuid::Uuid::parse_str(&id)?),
None => None,
diff --git a/rust/tests/test_api_server.rs b/rust/tests/test_api_server.rs
index 7d63afe9..3db01f65 100644
--- a/rust/tests/test_api_server.rs
+++ b/rust/tests/test_api_server.rs
@@ -286,6 +286,21 @@ fn test_post_release() {
None,
); // TODO: "secret paper"
+ // No work_id supplied (auto-created)
+ check_response(
+ request::post(
+ "http://localhost:9411/v0/release",
+ headers.clone(),
+ // TODO: target_release_id
+ r#"{"title": "secret minimal paper the second",
+ "release_type": "journal-article"
+ }"#,
+ &router,
+ ),
+ status::Created,
+ None,
+ );
+
check_response(
request::post(
"http://localhost:9411/v0/release",