diff options
Diffstat (limited to 'rust/src/endpoint_handlers.rs')
-rw-r--r-- | rust/src/endpoint_handlers.rs | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/rust/src/endpoint_handlers.rs b/rust/src/endpoint_handlers.rs index f43b3559..cd2f1afa 100644 --- a/rust/src/endpoint_handlers.rs +++ b/rust/src/endpoint_handlers.rs @@ -263,6 +263,8 @@ impl Server { core_id: &Option<String>, arxiv_id: &Option<String>, jstor_id: &Option<String>, + ark_id: &Option<String>, + mag_id: &Option<String>, expand_flags: ExpandFlags, hide_flags: HideFlags, ) -> Result<ReleaseEntity> { @@ -275,8 +277,10 @@ impl Server { core_id, arxiv_id, jstor_id, + ark_id, + mag_id, ) { - (Some(doi), None, None, None, None, None, None, None) => { + (Some(doi), 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)?; @@ -287,7 +291,7 @@ impl Server { .filter(release_ident::redirect_id.is_null()) .first(conn)? } - (None, Some(wikidata_qid), None, None, None, None, None, None) => { + (None, Some(wikidata_qid), None, None, None, None, None, None, None, None) => { check_wikidata_qid(wikidata_qid)?; release_ident::table .inner_join(release_rev::table) @@ -296,7 +300,7 @@ impl Server { .filter(release_ident::redirect_id.is_null()) .first(conn)? } - (None, None, Some(isbn13), None, None, None, None, None) => { + (None, None, Some(isbn13), None, None, None, None, None, None, None) => { // TODO: check_isbn13(isbn13)?; release_ident::table .inner_join(release_rev::table) @@ -305,7 +309,7 @@ impl Server { .filter(release_ident::redirect_id.is_null()) .first(conn)? } - (None, None, None, Some(pmid), None, None, None, None) => { + (None, None, None, Some(pmid), None, None, None, None, None, None) => { check_pmid(pmid)?; release_ident::table .inner_join(release_rev::table) @@ -314,7 +318,7 @@ impl Server { .filter(release_ident::redirect_id.is_null()) .first(conn)? } - (None, None, None, None, Some(pmcid), None, None, None) => { + (None, None, None, None, Some(pmcid), None, None, None, None, None) => { check_pmcid(pmcid)?; release_ident::table .inner_join(release_rev::table) @@ -323,7 +327,7 @@ impl Server { .filter(release_ident::redirect_id.is_null()) .first(conn)? } - (None, None, None, None, None, Some(core_id), None, None) => { + (None, None, None, None, None, Some(core_id), None, None, None, None) => { // TODO: check_core_id(core_id)?; release_ident::table .inner_join(release_rev::table) @@ -332,7 +336,7 @@ impl Server { .filter(release_ident::redirect_id.is_null()) .first(conn)? } - (None, None, None, None, None, None, Some(arxiv_id), None) => { + (None, None, None, None, None, None, Some(arxiv_id), None, None, None) => { // TODO: check_arxiv_id(arxiv_id)?; release_ident::table .inner_join(release_rev::table) @@ -341,7 +345,7 @@ impl Server { .filter(release_ident::redirect_id.is_null()) .first(conn)? } - (None, None, None, None, None, None, None, Some(jstor_id)) => { + (None, None, None, None, None, None, None, Some(jstor_id), None, None) => { // TODO: check_jstor_id(jstor_id)?; release_ident::table .inner_join(release_rev::table) @@ -350,6 +354,24 @@ impl Server { .filter(release_ident::redirect_id.is_null()) .first(conn)? } + (None, None, None, None, None, None, None, None, Some(ark_id), None) => { + // TODO: check_ark_id(ark_id)?; + release_ident::table + .inner_join(release_rev::table) + .filter(release_rev::ark_id.eq(ark_id)) + .filter(release_ident::is_live.eq(true)) + .filter(release_ident::redirect_id.is_null()) + .first(conn)? + } + (None, None, None, None, None, None, None, None, None, Some(mag_id)) => { + // TODO: check_ark_id(ark_id)?; + release_ident::table + .inner_join(release_rev::table) + .filter(release_rev::mag_id.eq(mag_id)) + .filter(release_ident::is_live.eq(true)) + .filter(release_ident::redirect_id.is_null()) + .first(conn)? + } _ => { return Err( FatcatError::MissingOrMultipleExternalId("in lookup".to_string()).into(), |