diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2020-11-19 13:15:24 -0800 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2020-11-19 14:55:15 -0800 |
commit | 7fa96bab1bb4d1a99048cf9398fd3e1c8a4bf78a (patch) | |
tree | af898a5374fcecb03d9c4783c3cd025c1237a37c /rust/src/endpoint_handlers.rs | |
parent | 40b5d40bed9e20e5c7a40d1741601a8317e078d8 (diff) | |
download | fatcat-7fa96bab1bb4d1a99048cf9398fd3e1c8a4bf78a.tar.gz fatcat-7fa96bab1bb4d1a99048cf9398fd3e1c8a4bf78a.zip |
update fatcatd rust code for 'oai' external identifier
Diffstat (limited to 'rust/src/endpoint_handlers.rs')
-rw-r--r-- | rust/src/endpoint_handlers.rs | 150 |
1 files changed, 139 insertions, 11 deletions
diff --git a/rust/src/endpoint_handlers.rs b/rust/src/endpoint_handlers.rs index 1b7bd0b6..91ea2393 100644 --- a/rust/src/endpoint_handlers.rs +++ b/rust/src/endpoint_handlers.rs @@ -263,6 +263,7 @@ impl Server { mag: &Option<String>, doaj: &Option<String>, dblp: &Option<String>, + oai: &Option<String>, expand_flags: ExpandFlags, hide_flags: HideFlags, ) -> Result<ReleaseEntity> { @@ -279,8 +280,9 @@ impl Server { mag, doaj, dblp, + oai, ) { - (Some(doi), None, None, None, None, None, None, None, None, None, None, None) => { + (Some(doi), None, None, None, None, None, None, None, None, None, None, None, None) => { // DOIs always stored lower-case; lookups are case-insensitive let doi = doi.to_lowercase(); check_doi(&doi)?; @@ -304,6 +306,7 @@ impl Server { None, None, None, + None, ) => { check_wikidata_qid(wikidata_qid)?; release_ident::table @@ -313,7 +316,21 @@ impl Server { .filter(release_ident::redirect_id.is_null()) .first(conn)? } - (None, None, Some(isbn13), None, None, None, None, None, None, None, None, None) => { + ( + None, + None, + Some(isbn13), + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + ) => { check_isbn13(isbn13)?; let (rev, ident, _extid): (ReleaseRevRow, ReleaseIdentRow, ReleaseExtidRow) = release_rev::table @@ -326,7 +343,21 @@ impl Server { .first(conn)?; (ident, rev) } - (None, None, None, Some(pmid), None, None, None, None, None, None, None, None) => { + ( + None, + None, + None, + Some(pmid), + None, + None, + None, + None, + None, + None, + None, + None, + None, + ) => { check_pmid(pmid)?; release_ident::table .inner_join(release_rev::table) @@ -335,7 +366,21 @@ impl Server { .filter(release_ident::redirect_id.is_null()) .first(conn)? } - (None, None, None, None, Some(pmcid), None, None, None, None, None, None, None) => { + ( + None, + None, + None, + None, + Some(pmcid), + None, + None, + None, + None, + None, + None, + None, + None, + ) => { check_pmcid(pmcid)?; release_ident::table .inner_join(release_rev::table) @@ -344,7 +389,21 @@ impl Server { .filter(release_ident::redirect_id.is_null()) .first(conn)? } - (None, None, None, None, None, Some(core), None, None, None, None, None, None) => { + ( + None, + None, + None, + None, + None, + Some(core), + None, + None, + None, + None, + None, + None, + None, + ) => { check_core_id(core)?; release_ident::table .inner_join(release_rev::table) @@ -353,7 +412,21 @@ impl Server { .filter(release_ident::redirect_id.is_null()) .first(conn)? } - (None, None, None, None, None, None, Some(arxiv), None, None, None, None, None) => { + ( + None, + None, + None, + None, + None, + None, + Some(arxiv), + None, + None, + None, + None, + None, + None, + ) => { // TODO: this allows only lookup by full, versioned arxiv identifier. Probably also // want to allow lookup by "work" style identifier? check_arxiv_id(arxiv)?; @@ -368,7 +441,21 @@ impl Server { .first(conn)?; (ident, rev) } - (None, None, None, None, None, None, None, Some(jstor), None, None, None, None) => { + ( + None, + None, + None, + None, + None, + None, + None, + Some(jstor), + None, + None, + None, + None, + None, + ) => { check_jstor_id(jstor)?; let (rev, ident, _extid): (ReleaseRevRow, ReleaseIdentRow, ReleaseExtidRow) = release_rev::table @@ -381,7 +468,7 @@ impl Server { .first(conn)?; (ident, rev) } - (None, None, None, None, None, None, None, None, Some(ark), None, None, None) => { + (None, None, None, None, None, None, None, None, Some(ark), None, None, None, None) => { check_ark_id(ark)?; let (rev, ident, _extid): (ReleaseRevRow, ReleaseIdentRow, ReleaseExtidRow) = release_rev::table @@ -394,7 +481,7 @@ impl Server { .first(conn)?; (ident, rev) } - (None, None, None, None, None, None, None, None, None, Some(mag), None, None) => { + (None, None, None, None, None, None, None, None, None, Some(mag), None, None, None) => { check_mag_id(mag)?; let (rev, ident, _extid): (ReleaseRevRow, ReleaseIdentRow, ReleaseExtidRow) = release_rev::table @@ -407,7 +494,21 @@ impl Server { .first(conn)?; (ident, rev) } - (None, None, None, None, None, None, None, None, None, None, Some(doaj), None) => { + ( + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + Some(doaj), + None, + None, + ) => { check_doaj_id(doaj)?; let (rev, ident, _extid): (ReleaseRevRow, ReleaseIdentRow, ReleaseExtidRow) = release_rev::table @@ -420,7 +521,21 @@ impl Server { .first(conn)?; (ident, rev) } - (None, None, None, None, None, None, None, None, None, None, None, Some(dblp)) => { + ( + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + Some(dblp), + None, + ) => { check_dblp_id(dblp)?; let (rev, ident, _extid): (ReleaseRevRow, ReleaseIdentRow, ReleaseExtidRow) = release_rev::table @@ -433,6 +548,19 @@ impl Server { .first(conn)?; (ident, rev) } + (None, None, None, None, None, None, None, None, None, None, None, None, Some(oai)) => { + check_oai_id(oai)?; + let (rev, ident, _extid): (ReleaseRevRow, ReleaseIdentRow, ReleaseExtidRow) = + release_rev::table + .inner_join(release_ident::table) + .inner_join(release_rev_extid::table) + .filter(release_rev_extid::extid_type.eq("oai".to_string())) + .filter(release_rev_extid::value.eq(oai)) + .filter(release_ident::is_live.eq(true)) + .filter(release_ident::redirect_id.is_null()) + .first(conn)?; + (ident, rev) + } _ => { return Err( FatcatError::MissingOrMultipleExternalId("in lookup".to_string()).into(), |