summaryrefslogtreecommitdiffstats
path: root/rust/src
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2018-08-20 02:16:08 -0700
committerBryan Newbold <bnewbold@robocracy.org>2018-08-20 02:17:11 -0700
commit2f7cff3c597af42c8dd02313bdceb98a11c2e414 (patch)
tree4c484c305d02fd57aa2f1974abf1a35bb4e3c483 /rust/src
parentbf4a949f83b30a8e9bb501871bc62224472c59aa (diff)
downloadfatcat-2f7cff3c597af42c8dd02313bdceb98a11c2e414.tar.gz
fatcat-2f7cff3c597af42c8dd02313bdceb98a11c2e414.zip
implement autoaccept
Need to review: - changelog creation - clobbering of existing editgroup flag
Diffstat (limited to 'rust/src')
-rw-r--r--rust/src/api_server.rs61
-rw-r--r--rust/src/api_wrappers.rs5
2 files changed, 46 insertions, 20 deletions
diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs
index b0dff173..0cb07e81 100644
--- a/rust/src/api_server.rs
+++ b/rust/src/api_server.rs
@@ -25,11 +25,23 @@ macro_rules! entity_batch_handler {
pub fn $post_batch_handler(
&self,
entity_list: &[models::$model],
+ autoaccept: bool,
conn: &DbConn,
) -> Result<Vec<EntityEdit>> {
let mut ret: Vec<EntityEdit> = vec![];
+ let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001")?; // TODO: auth
+ let eg_row: EditgroupRow = diesel::insert_into(editgroup::table)
+ .values((editgroup::editor_id.eq(editor_id),))
+ .get_result(conn)?;
for entity in entity_list {
- ret.push(self.$post_handler(entity.clone(), conn)?);
+ let mut e = entity.clone();
+ e.editgroup_id = Some(uuid2fcid(&eg_row.id));
+ ret.push(self.$post_handler(e, autoaccept, conn)?);
+ }
+ if autoaccept {
+ let _clr: ChangelogRow = diesel::insert_into(changelog::table)
+ .values((changelog::editgroup_id.eq(eg_row.id),))
+ .get_result(conn)?;
}
Ok(ret)
}
@@ -216,7 +228,10 @@ fn release_row2entity(
let contribs: Vec<ReleaseContrib> = release_contrib::table
.filter(release_contrib::release_rev.eq(rev.id))
- .order((release_contrib::role.asc(), release_contrib::index_val.asc()))
+ .order((
+ release_contrib::role.asc(),
+ release_contrib::index_val.asc(),
+ ))
.get_results(conn)
.expect("fetch release refs")
.into_iter()
@@ -495,6 +510,7 @@ impl Server {
pub fn create_container_handler(
&self,
entity: models::ContainerEntity,
+ autoaccept: bool,
conn: &DbConn,
) -> Result<EntityEdit> {
let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001")?; // TODO: auth
@@ -513,11 +529,11 @@ impl Server {
"WITH rev AS ( INSERT INTO container_rev (name, publisher, issnl, wikidata_qid, abbrev, coden, extra_json)
VALUES ($1, $2, $3, $4, $5, $6, $7)
RETURNING id ),
- ident AS ( INSERT INTO container_ident (rev_id)
- VALUES ((SELECT rev.id FROM rev))
+ ident AS ( INSERT INTO container_ident (is_live, rev_id)
+ VALUES ($8, (SELECT rev.id FROM rev))
RETURNING id )
INSERT INTO container_edit (editgroup_id, ident_id, rev_id) VALUES
- ($8, (SELECT ident.id FROM ident), (SELECT rev.id FROM rev))
+ ($9, (SELECT ident.id FROM ident), (SELECT rev.id FROM rev))
RETURNING *",
).bind::<diesel::sql_types::Text, _>(entity.name)
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Text>, _>(entity.publisher)
@@ -526,6 +542,7 @@ impl Server {
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Text>, _>(entity.abbrev)
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Text>, _>(entity.coden)
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Json>, _>(entity.extra)
+ .bind::<diesel::sql_types::Bool, _>(autoaccept)
.bind::<diesel::sql_types::Uuid, _>(editgroup_id)
.get_result(conn)?;
@@ -535,6 +552,7 @@ impl Server {
pub fn create_creator_handler(
&self,
entity: models::CreatorEntity,
+ autoaccept: bool,
conn: &DbConn,
) -> Result<EntityEdit> {
let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001")?; // TODO: auth
@@ -553,11 +571,11 @@ impl Server {
"WITH rev AS ( INSERT INTO creator_rev (display_name, given_name, surname, orcid, wikidata_qid, extra_json)
VALUES ($1, $2, $3, $4, $5, $6)
RETURNING id ),
- ident AS ( INSERT INTO creator_ident (rev_id)
- VALUES ((SELECT rev.id FROM rev))
+ ident AS ( INSERT INTO creator_ident (is_live, rev_id)
+ VALUES ($7, (SELECT rev.id FROM rev))
RETURNING id )
INSERT INTO creator_edit (editgroup_id, ident_id, rev_id) VALUES
- ($7, (SELECT ident.id FROM ident), (SELECT rev.id FROM rev))
+ ($8, (SELECT ident.id FROM ident), (SELECT rev.id FROM rev))
RETURNING *",
).bind::<diesel::sql_types::Text, _>(entity.display_name)
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Text>, _>(entity.given_name)
@@ -565,6 +583,7 @@ impl Server {
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Text>, _>(entity.orcid)
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Text>, _>(entity.wikidata_qid)
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Json>, _>(entity.extra)
+ .bind::<diesel::sql_types::Bool, _>(autoaccept)
.bind::<diesel::sql_types::Uuid, _>(editgroup_id)
.get_result(conn)?;
@@ -574,6 +593,7 @@ impl Server {
pub fn create_file_handler(
&self,
entity: models::FileEntity,
+ autoaccept: bool,
conn: &DbConn,
) -> Result<EntityEdit> {
let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001")?; // TODO: auth
@@ -587,11 +607,11 @@ impl Server {
"WITH rev AS ( INSERT INTO file_rev (size, sha1, sha256, md5, mimetype, extra_json)
VALUES ($1, $2, $3, $4, $5, $6)
RETURNING id ),
- ident AS ( INSERT INTO file_ident (rev_id)
- VALUES ((SELECT rev.id FROM rev))
+ ident AS ( INSERT INTO file_ident (is_live, rev_id)
+ VALUES ($7, (SELECT rev.id FROM rev))
RETURNING id )
INSERT INTO file_edit (editgroup_id, ident_id, rev_id) VALUES
- ($7, (SELECT ident.id FROM ident), (SELECT rev.id FROM rev))
+ ($8, (SELECT ident.id FROM ident), (SELECT rev.id FROM rev))
RETURNING *",
).bind::<diesel::sql_types::Nullable<diesel::sql_types::Int8>, _>(entity.size)
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Text>, _>(entity.sha1)
@@ -599,6 +619,7 @@ impl Server {
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Text>, _>(entity.md5)
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Text>, _>(entity.mimetype)
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Json>, _>(entity.extra)
+ .bind::<diesel::sql_types::Bool, _>(autoaccept)
.bind::<diesel::sql_types::Uuid, _>(editgroup_id)
.get_result(conn)?;
@@ -654,6 +675,7 @@ impl Server {
pub fn create_release_handler(
&self,
entity: models::ReleaseEntity,
+ autoaccept: bool,
conn: &DbConn,
) -> Result<EntityEdit> {
let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001")?; // TODO: auth
@@ -686,7 +708,7 @@ impl Server {
editgroup_id: Some(uuid2fcid(&editgroup_id)),
extra: None,
};
- let new_entity = self.create_work_handler(work_model, conn)?;
+ let new_entity = self.create_work_handler(work_model, autoaccept, conn)?;
fcid2uuid(&new_entity.ident)?
}
};
@@ -700,11 +722,11 @@ impl Server {
"WITH rev AS ( INSERT INTO release_rev (title, release_type, release_status, release_date, doi, pmid, pmcid, wikidata_qid, isbn13, core_id, volume, issue, pages, work_ident_id, container_ident_id, publisher, language, extra_json)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18)
RETURNING id ),
- ident AS ( INSERT INTO release_ident (rev_id)
- VALUES ((SELECT rev.id FROM rev))
+ ident AS ( INSERT INTO release_ident (is_live, rev_id)
+ VALUES ($19, (SELECT rev.id FROM rev))
RETURNING id )
INSERT INTO release_edit (editgroup_id, ident_id, rev_id) VALUES
- ($19, (SELECT ident.id FROM ident), (SELECT rev.id FROM rev))
+ ($20, (SELECT ident.id FROM ident), (SELECT rev.id FROM rev))
RETURNING *",
).bind::<diesel::sql_types::Text, _>(entity.title)
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Text>, _>(entity.release_type)
@@ -725,6 +747,7 @@ impl Server {
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Text>, _>(entity.publisher)
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Text>, _>(entity.language)
.bind::<diesel::sql_types::Nullable<diesel::sql_types::Json>, _>(entity.extra)
+ .bind::<diesel::sql_types::Bool, _>(autoaccept)
.bind::<diesel::sql_types::Uuid, _>(editgroup_id)
.get_result(conn)?;
@@ -829,6 +852,7 @@ impl Server {
pub fn create_work_handler(
&self,
entity: models::WorkEntity,
+ autoaccept: bool,
conn: &DbConn,
) -> Result<EntityEdit> {
let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001")?; // TODO: auth
@@ -842,13 +866,14 @@ impl Server {
"WITH rev AS ( INSERT INTO work_rev (extra_json)
VALUES ($1)
RETURNING id ),
- ident AS ( INSERT INTO work_ident (rev_id)
- VALUES ((SELECT rev.id FROM rev))
+ ident AS ( INSERT INTO work_ident (is_live, rev_id)
+ VALUES ($2, (SELECT rev.id FROM rev))
RETURNING id )
INSERT INTO work_edit (editgroup_id, ident_id, rev_id) VALUES
- ($2, (SELECT ident.id FROM ident), (SELECT rev.id FROM rev))
+ ($3, (SELECT ident.id FROM ident), (SELECT rev.id FROM rev))
RETURNING *",
).bind::<diesel::sql_types::Nullable<diesel::sql_types::Json>, _>(entity.extra)
+ .bind::<diesel::sql_types::Bool, _>(autoaccept)
.bind::<diesel::sql_types::Uuid, _>(editgroup_id)
.get_result(conn)?;
diff --git a/rust/src/api_wrappers.rs b/rust/src/api_wrappers.rs
index 95336d3f..4f126385 100644
--- a/rust/src/api_wrappers.rs
+++ b/rust/src/api_wrappers.rs
@@ -60,7 +60,7 @@ macro_rules! wrap_entity_handlers {
_context: &Context,
) -> Box<Future<Item = $post_resp, Error = ApiError> + Send> {
let conn = self.db_pool.get().expect("db_pool error");
- let ret = match conn.transaction(|| self.$post_handler(entity, &conn)) {
+ let ret = match conn.transaction(|| self.$post_handler(entity, false, &conn)) {
Ok(edit) =>
$post_resp::CreatedEntity(edit),
Err(Error(ErrorKind::Diesel(e), _)) =>
@@ -83,10 +83,11 @@ macro_rules! wrap_entity_handlers {
fn $post_batch_fn(
&self,
entity_list: &Vec<models::$model>,
+ autoaccept: Option<bool>,
_context: &Context,
) -> Box<Future<Item = $post_batch_resp, Error = ApiError> + Send> {
let conn = self.db_pool.get().expect("db_pool error");
- let ret = match conn.transaction(|| self.$post_batch_handler(entity_list, &conn)) {
+ let ret = match conn.transaction(|| self.$post_batch_handler(entity_list, autoaccept.unwrap_or(false), &conn)) {
Ok(edit) =>
$post_batch_resp::CreatedEntities(edit),
Err(Error(ErrorKind::Diesel(e), _)) =>