aboutsummaryrefslogtreecommitdiffstats
path: root/rust/src/endpoint_handlers.rs
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2020-11-19 13:15:24 -0800
committerBryan Newbold <bnewbold@robocracy.org>2020-11-19 14:55:15 -0800
commit7fa96bab1bb4d1a99048cf9398fd3e1c8a4bf78a (patch)
treeaf898a5374fcecb03d9c4783c3cd025c1237a37c /rust/src/endpoint_handlers.rs
parent40b5d40bed9e20e5c7a40d1741601a8317e078d8 (diff)
downloadfatcat-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.rs150
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(),