From 2f7cff3c597af42c8dd02313bdceb98a11c2e414 Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Mon, 20 Aug 2018 02:16:08 -0700 Subject: implement autoaccept Need to review: - changelog creation - clobbering of existing editgroup flag --- rust/src/api_wrappers.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'rust/src/api_wrappers.rs') 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 + 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, + autoaccept: Option, _context: &Context, ) -> Box + 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), _)) => -- cgit v1.2.3 From cc11d5000910b5fd53e40bfd01056c0db60c35aa Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Thu, 30 Aug 2018 16:52:03 -0700 Subject: editgroup parameter for batch inserts --- rust/src/api_server.rs | 24 +++++++++++++++++++----- rust/src/api_wrappers.rs | 3 ++- 2 files changed, 21 insertions(+), 6 deletions(-) (limited to 'rust/src/api_wrappers.rs') diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs index 0cb07e81..e8e7d062 100644 --- a/rust/src/api_server.rs +++ b/rust/src/api_server.rs @@ -26,21 +26,35 @@ macro_rules! entity_batch_handler { &self, entity_list: &[models::$model], autoaccept: bool, + editgroup: Option, conn: &DbConn, ) -> Result> { let mut ret: Vec = 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)?; + // editgroup override logic based on parameters + let eg_id: Option = match (editgroup, autoaccept) { + (Some(eg_string), _) => Some(Uuid::parse_str(&eg_string)?), + (None, true) => { + let eg_row: EditgroupRow = diesel::insert_into(editgroup::table) + .values((editgroup::editor_id.eq(editor_id),)) + .get_result(conn)?; + Some(eg_row.id) + }, + (None, false) => None + }; for entity in entity_list { let mut e = entity.clone(); - e.editgroup_id = Some(uuid2fcid(&eg_row.id)); + // override individual editgroup IDs (if set earlier) + if let Some(inner_id) = eg_id { + e.editgroup_id = Some(uuid2fcid(&inner_id)); + } + // actual wrapped function call here ret.push(self.$post_handler(e, autoaccept, conn)?); } if autoaccept { + // if autoaccept, eg_id is always Some let _clr: ChangelogRow = diesel::insert_into(changelog::table) - .values((changelog::editgroup_id.eq(eg_row.id),)) + .values((changelog::editgroup_id.eq(eg_id.unwrap()),)) .get_result(conn)?; } Ok(ret) diff --git a/rust/src/api_wrappers.rs b/rust/src/api_wrappers.rs index 4f126385..da6139d2 100644 --- a/rust/src/api_wrappers.rs +++ b/rust/src/api_wrappers.rs @@ -84,10 +84,11 @@ macro_rules! wrap_entity_handlers { &self, entity_list: &Vec, autoaccept: Option, + editgroup: Option, _context: &Context, ) -> Box + Send> { let conn = self.db_pool.get().expect("db_pool error"); - let ret = match conn.transaction(|| self.$post_batch_handler(entity_list, autoaccept.unwrap_or(false), &conn)) { + let ret = match conn.transaction(|| self.$post_batch_handler(entity_list, autoaccept.unwrap_or(false), editgroup, &conn)) { Ok(edit) => $post_batch_resp::CreatedEntities(edit), Err(Error(ErrorKind::Diesel(e), _)) => -- cgit v1.2.3 From 0053d133f8ff96aa4dedc1ff7e2754812ddfc79a Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Fri, 31 Aug 2018 14:43:58 -0700 Subject: correct EditgroupAlreadyAccepted response --- rust/src/api_helpers.rs | 5 +---- rust/src/api_server.rs | 5 ++++- rust/src/api_wrappers.rs | 5 +++++ rust/src/lib.rs | 4 ++++ 4 files changed, 14 insertions(+), 5 deletions(-) (limited to 'rust/src/api_wrappers.rs') diff --git a/rust/src/api_helpers.rs b/rust/src/api_helpers.rs index 020aad76..a68ed8a9 100644 --- a/rust/src/api_helpers.rs +++ b/rust/src/api_helpers.rs @@ -34,10 +34,7 @@ pub fn accept_editgroup(editgroup_id: Uuid, conn: &PgConnection) -> Result 0 { - bail!( - "editgroup {} has already been accepted", - editgroup_id.to_string() - ); + return Err(ErrorKind::EditgroupAlreadyAccepted(uuid2fcid(&editgroup_id)).into()); } // for each entity type... diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs index b0dff173..7bf3122b 100644 --- a/rust/src/api_server.rs +++ b/rust/src/api_server.rs @@ -216,7 +216,10 @@ fn release_row2entity( let contribs: Vec = 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() diff --git a/rust/src/api_wrappers.rs b/rust/src/api_wrappers.rs index 95336d3f..403c7caf 100644 --- a/rust/src/api_wrappers.rs +++ b/rust/src/api_wrappers.rs @@ -308,6 +308,11 @@ impl Api for Server { message: format!("No such editgroup: {}", id), }) } + Err(Error(ErrorKind::EditgroupAlreadyAccepted(e), _)) => { + AcceptEditgroupResponse::BadRequest(ErrorResponse { + message: ErrorKind::EditgroupAlreadyAccepted(e).to_string(), + }) + } Err(e) => AcceptEditgroupResponse::GenericError(ErrorResponse { message: e.to_string(), }), diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 50a7d410..12ce0973 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -47,6 +47,10 @@ mod errors { description("external identifier doesn't match required pattern") display("external identifier doesn't match required pattern") } + EditgroupAlreadyAccepted(id: String) { + description("editgroup was already accepted") + display("attempted to accept an editgroup which was already accepted: {}", id) + } } } } -- cgit v1.2.3 From 0f229e57965901a1230dd346fb676e8caf67ec2e Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Thu, 6 Sep 2018 15:02:57 -0700 Subject: skeleton create/delete endpoints for works Other entities just stubs --- rust/src/api_server.rs | 122 ++++++++++++++++++++++++++++++++++++++++++ rust/src/api_wrappers.rs | 108 ++++++++++++++++++++++++++++++++++++- rust/tests/test_api_server.rs | 65 ++++++++++++++++++++++ 3 files changed, 293 insertions(+), 2 deletions(-) (limited to 'rust/src/api_wrappers.rs') diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs index 7bf3122b..66c31f61 100644 --- a/rust/src/api_server.rs +++ b/rust/src/api_server.rs @@ -535,6 +535,19 @@ impl Server { edit.into_model() } + // XXX: + pub fn update_container_handler( + &self, + id: &Uuid, + entity: models::ContainerEntity, + conn: &DbConn, + ) -> Result { + unimplemented!() + } + pub fn delete_container_handler(&self, id: &Uuid, editgroup_id: Option, conn: &DbConn) -> Result { + unimplemented!() + } + pub fn create_creator_handler( &self, entity: models::CreatorEntity, @@ -574,6 +587,19 @@ impl Server { edit.into_model() } + // XXX: + pub fn update_creator_handler( + &self, + id: &Uuid, + entity: models::CreatorEntity, + conn: &DbConn, + ) -> Result { + unimplemented!() + } + pub fn delete_creator_handler(&self, id: &Uuid, editgroup_id: Option, conn: &DbConn) -> Result { + unimplemented!() + } + pub fn create_file_handler( &self, entity: models::FileEntity, @@ -654,6 +680,19 @@ impl Server { edit.into_model() } + // XXX: + pub fn update_file_handler( + &self, + id: &Uuid, + entity: models::FileEntity, + conn: &DbConn, + ) -> Result { + unimplemented!() + } + pub fn delete_file_handler(&self, id: &Uuid, editgroup_id: Option, conn: &DbConn) -> Result { + unimplemented!() + } + pub fn create_release_handler( &self, entity: models::ReleaseEntity, @@ -829,6 +868,19 @@ impl Server { edit.into_model() } + // XXX: + pub fn update_release_handler( + &self, + id: &Uuid, + entity: models::ReleaseEntity, + conn: &DbConn, + ) -> Result { + unimplemented!() + } + pub fn delete_release_handler(&self, id: &Uuid, editgroup_id: Option, conn: &DbConn) -> Result { + unimplemented!() + } + pub fn create_work_handler( &self, entity: models::WorkEntity, @@ -858,6 +910,76 @@ impl Server { edit.into_model() } + pub fn update_work_handler( + &self, + id: &Uuid, + entity: models::WorkEntity, + conn: &DbConn, + ) -> Result { + let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001")?; // TODO: auth + let editgroup_id = match entity.editgroup_id { + None => get_or_create_editgroup(editor_id, conn).expect("current editgroup"), + Some(param) => fcid2uuid(¶m)?, + }; + + // TODO: refactor this into a check on WorkIdentRow + let current: WorkIdentRow = work_ident::table.find(id).first(conn)?; + if current.is_live != true { + // TODO: what if isn't live? 4xx not 5xx + bail!("can't delete an entity that doesn't exist yet"); + } + if current.rev_id.is_none() { + // TODO: what if it's already deleted? 4xx not 5xx + bail!("entity was already deleted"); + } + + let edit: WorkEditRow = + diesel::sql_query( + "WITH rev AS ( INSERT INTO work_rev (extra_json) + VALUES ($1) + RETURNING id ), + INSERT INTO work_edit (editgroup_id, ident_id, rev_id, prev_rev) VALUES + ($2, $3, (SELECT rev.id FROM rev), $4) + RETURNING *", + ).bind::, _>(entity.extra) + .bind::(editgroup_id) + .bind::(id) + .bind::(current.rev_id.unwrap()) + .get_result(conn)?; + + edit.into_model() + } + + pub fn delete_work_handler(&self, id: &Uuid, editgroup_id: Option, conn: &DbConn) -> Result { + let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001")?; // TODO: auth + let editgroup_id = match editgroup_id { + Some(egid) => egid, + None => get_or_create_editgroup(editor_id, conn)? + }; + + let current: WorkIdentRow = work_ident::table.find(id).first(conn)?; + if current.is_live != true { + // TODO: what if isn't live? 4xx not 5xx + bail!("can't delete an entity that doesn't exist yet"); + } + if current.rev_id.is_none() { + // TODO: what if it's already deleted? 4xx not 5xx + bail!("entity was already deleted"); + } + let edit: WorkEditRow = insert_into(work_edit::table) + .values(( + work_edit::editgroup_id.eq(editgroup_id), + work_edit::ident_id.eq(id), + work_edit::rev_id.eq(None::), + work_edit::redirect_id.eq(None::), + work_edit::prev_rev.eq(current.rev_id), + //work_edit::extra_json.eq(extra), + )) + .get_result(conn)?; + + edit.into_model() + } + pub fn accept_editgroup_handler(&self, id: &str, conn: &DbConn) -> Result<()> { accept_editgroup(fcid2uuid(id)?, conn)?; Ok(()) diff --git a/rust/src/api_wrappers.rs b/rust/src/api_wrappers.rs index 403c7caf..de1fc9da 100644 --- a/rust/src/api_wrappers.rs +++ b/rust/src/api_wrappers.rs @@ -19,8 +19,9 @@ macro_rules! wrap_entity_handlers { // The only stable approach I know of would be: https://github.com/dtolnay/mashup ($get_fn:ident, $get_handler:ident, $get_resp:ident, $post_fn:ident, $post_handler:ident, $post_resp:ident, $post_batch_fn:ident, $post_batch_handler:ident, - $post_batch_resp:ident, $get_history_fn:ident, $get_history_handler:ident, - $get_history_resp:ident, $model:ident) => { + $post_batch_resp:ident, $update_fn:ident, $update_handler:ident, $update_resp:ident, + $delete_fn:ident, $delete_handler:ident, $delete_resp:ident, $get_history_fn:ident, + $get_history_handler:ident, $get_history_resp:ident, $model:ident) => { fn $get_fn( &self, @@ -106,6 +107,79 @@ macro_rules! wrap_entity_handlers { Box::new(futures::done(Ok(ret))) } + fn $update_fn( + &self, + id: String, + entity: models::$model, + _context: &Context, + ) -> Box + Send> { + let id = if let Ok(parsed) = fcid2uuid(&id) { parsed } else { + return Box::new(futures::done(Ok($update_resp::BadRequest(ErrorResponse { + message: ErrorKind::InvalidFatcatId(id).to_string() })))); + }; + let conn = self.db_pool.get().expect("db_pool error"); + let ret = match conn.transaction(|| self.$update_handler(&id, entity, &conn)) { + Ok(edit) => + $update_resp::UpdatedEntity(edit), + Err(Error(ErrorKind::Diesel(::diesel::result::Error::NotFound), _)) => + $update_resp::NotFound(ErrorResponse { message: format!("No such entity {}: {}", stringify!($model), id) }), + Err(Error(ErrorKind::Diesel(e), _)) => + $update_resp::BadRequest(ErrorResponse { message: e.to_string() }), + Err(Error(ErrorKind::Uuid(e), _)) => + $update_resp::BadRequest(ErrorResponse { message: e.to_string() }), + Err(Error(ErrorKind::InvalidFatcatId(e), _)) => + $update_resp::BadRequest(ErrorResponse { + message: ErrorKind::InvalidFatcatId(e).to_string() }), + Err(Error(ErrorKind::MalformedExternalId(e), _)) => + $update_resp::BadRequest(ErrorResponse { message: e.to_string() }), + Err(e) => { + error!("{}", e); + $update_resp::GenericError(ErrorResponse { message: e.to_string() }) + }, + }; + Box::new(futures::done(Ok(ret))) + } + + fn $delete_fn( + &self, + id: String, + editgroup_id: Option, + _context: &Context, + ) -> Box + Send> { + let id = if let Ok(parsed) = fcid2uuid(&id) { parsed } else { + return Box::new(futures::done(Ok($delete_resp::BadRequest(ErrorResponse { + message: ErrorKind::InvalidFatcatId(id).to_string() })))); + }; + let editgroup_id = match editgroup_id { + Some(raw) => if let Ok(parsed) = fcid2uuid(&raw) { Some(parsed) } else { + return Box::new(futures::done(Ok($delete_resp::BadRequest(ErrorResponse { + message: ErrorKind::InvalidFatcatId(raw).to_string() })))) + } + None => None + }; + let conn = self.db_pool.get().expect("db_pool error"); + let ret = match conn.transaction(|| self.$delete_handler(&id, editgroup_id, &conn)) { + Ok(edit) => + $delete_resp::DeletedEntity(edit), + Err(Error(ErrorKind::Diesel(::diesel::result::Error::NotFound), _)) => + $delete_resp::NotFound(ErrorResponse { message: format!("No such entity {}: {}", stringify!($model), id) }), + Err(Error(ErrorKind::Diesel(e), _)) => + $delete_resp::BadRequest(ErrorResponse { message: e.to_string() }), + Err(Error(ErrorKind::Uuid(e), _)) => + $delete_resp::BadRequest(ErrorResponse { message: e.to_string() }), + Err(Error(ErrorKind::InvalidFatcatId(e), _)) => + $delete_resp::BadRequest(ErrorResponse { + message: ErrorKind::InvalidFatcatId(e).to_string() }), + Err(Error(ErrorKind::MalformedExternalId(e), _)) => + $delete_resp::BadRequest(ErrorResponse { message: e.to_string() }), + Err(e) => { + error!("{}", e); + $delete_resp::GenericError(ErrorResponse { message: e.to_string() }) + }, + }; + Box::new(futures::done(Ok(ret))) + } + fn $get_history_fn( &self, id: String, @@ -175,6 +249,12 @@ impl Api for Server { create_container_batch, create_container_batch_handler, CreateContainerBatchResponse, + update_container, + update_container_handler, + UpdateContainerResponse, + delete_container, + delete_container_handler, + DeleteContainerResponse, get_container_history, get_container_history_handler, GetContainerHistoryResponse, @@ -191,6 +271,12 @@ impl Api for Server { create_creator_batch, create_creator_batch_handler, CreateCreatorBatchResponse, + update_creator, + update_creator_handler, + UpdateCreatorResponse, + delete_creator, + delete_creator_handler, + DeleteCreatorResponse, get_creator_history, get_creator_history_handler, GetCreatorHistoryResponse, @@ -206,6 +292,12 @@ impl Api for Server { create_file_batch, create_file_batch_handler, CreateFileBatchResponse, + update_file, + update_file_handler, + UpdateFileResponse, + delete_file, + delete_file_handler, + DeleteFileResponse, get_file_history, get_file_history_handler, GetFileHistoryResponse, @@ -221,6 +313,12 @@ impl Api for Server { create_release_batch, create_release_batch_handler, CreateReleaseBatchResponse, + update_release, + update_release_handler, + UpdateReleaseResponse, + delete_release, + delete_release_handler, + DeleteReleaseResponse, get_release_history, get_release_history_handler, GetReleaseHistoryResponse, @@ -236,6 +334,12 @@ impl Api for Server { create_work_batch, create_work_batch_handler, CreateWorkBatchResponse, + update_work, + update_work_handler, + UpdateWorkResponse, + delete_work, + delete_work_handler, + DeleteWorkResponse, get_work_history, get_work_history_handler, GetWorkHistoryResponse, diff --git a/rust/tests/test_api_server.rs b/rust/tests/test_api_server.rs index 02c77413..4b181188 100644 --- a/rust/tests/test_api_server.rs +++ b/rust/tests/test_api_server.rs @@ -468,6 +468,71 @@ fn test_post_work() { ); } +#[test] +fn test_update_work() { + let (headers, router, conn) = setup(); + + check_response( + request::post( + "http://localhost:9411/v0/work", + headers.clone(), + r#"{ + "extra": { "source": "other speculation" } + }"#, + &router, + ), + status::Created, + None, + ); + + let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); + let editgroup_id = get_or_create_editgroup(editor_id, &conn).unwrap(); + check_response( + request::post( + &format!( + "http://localhost:9411/v0/editgroup/{}/accept", + uuid2fcid(&editgroup_id) + ), + headers.clone(), + "", + &router, + ), + status::Ok, + None, + ); +} + +#[test] +fn test_delete_work() { + let (headers, router, conn) = setup(); + + check_response( + request::delete( + "http://localhost:9411/v0/work/aaaaaaaaaaaaavkvaaaaaaaaai", + headers.clone(), + &router, + ), + status::Ok, + None, + ); + + let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001").unwrap(); + let editgroup_id = get_or_create_editgroup(editor_id, &conn).unwrap(); + check_response( + request::post( + &format!( + "http://localhost:9411/v0/editgroup/{}/accept", + uuid2fcid(&editgroup_id) + ), + headers.clone(), + "", + &router, + ), + status::Ok, + None, + ); +} + #[test] fn test_accept_editgroup() { let (headers, router, conn) = setup(); -- cgit v1.2.3 From fc2025b8db9e058d429136f382749ade52df326c Mon Sep 17 00:00:00 2001 From: Bryan Newbold Date: Fri, 7 Sep 2018 22:32:20 -0700 Subject: fixes after autoaccept merge --- rust/src/api_helpers.rs | 1 + rust/src/api_server.rs | 79 ++++++++++++++++++---------------------- rust/src/api_wrappers.rs | 2 +- rust/src/database_entity_crud.rs | 8 ++-- 4 files changed, 41 insertions(+), 49 deletions(-) (limited to 'rust/src/api_wrappers.rs') diff --git a/rust/src/api_helpers.rs b/rust/src/api_helpers.rs index fd0ad9e7..925a6073 100644 --- a/rust/src/api_helpers.rs +++ b/rust/src/api_helpers.rs @@ -91,6 +91,7 @@ pub fn accept_editgroup(editgroup_id: Uuid, conn: &PgConnection) -> Result, conn: &DbConn, ) -> Result> { - // editgroup override logic based on parameters - let eg_id: Option = match (editgroup, autoaccept) { - (Some(eg_string), _) => Some(fcid2uuid(&eg_string)?), - (None, true) => { - let eg_row: EditgroupRow = diesel::insert_into(editgroup::table) - .values((editgroup::editor_id.eq(editor_id),)) - .get_result(conn)?; - Some(eg_row.id) - }, - (None, false) => None + + let editgroup_id: Option = match editgroup { + Some(s) => Some(FatCatId::from_str(&s)?), + None => None, }; - for entity in entity_list { - let mut e = entity.clone(); - // override individual editgroup IDs (if set earlier) - if let Some(inner_id) = eg_id { - e.editgroup_id = Some(uuid2fcid(&inner_id)); - } - // actual wrapped function call here - ret.push(self.$post_handler(e, autoaccept, conn)?); - } - let mut edit_context = make_edit_context(conn, eg_id)?; - edit_context.autoaccept = autoaccept; + let edit_context = make_edit_context(conn, editgroup_id.clone(), autoaccept)?; let model_list: Vec<&models::$model> = entity_list.iter().map(|e| e).collect(); let edits = $model::db_create_batch(conn, &edit_context, model_list.as_slice())?; + if autoaccept { - // if autoaccept, eg_id is always Some let _clr: ChangelogRow = diesel::insert_into(changelog::table) - .values((changelog::editgroup_id.eq(eg_id.unwrap()),)) + // if autoaccept, eg_id is always Some + .values((changelog::editgroup_id.eq(edit_context.editgroup_id.to_uuid()),)) .get_result(conn)?; } edits.into_iter().map(|e| e.into_model()).collect() @@ -75,17 +59,24 @@ macro_rules! count_entity { }}; } -fn make_edit_context(conn: &DbConn, editgroup_id: Option) -> Result { +fn make_edit_context(conn: &DbConn, editgroup_id: Option, autoaccept: bool) -> Result { let editor_id = Uuid::parse_str("00000000-0000-0000-AAAA-000000000001")?; // TODO: auth - let editgroup_id = match editgroup_id { - None => FatCatId::from_uuid(&get_or_create_editgroup(editor_id, conn)?), - Some(param) => param, + let editgroup_id: FatCatId = match (editgroup_id, autoaccept) { + (Some(eg), _) => eg, + // If autoaccept and no editgroup_id passed, always create a new one for this transaction + (None, true) => { + let eg_row: EditgroupRow = diesel::insert_into(editgroup::table) + .values((editgroup::editor_id.eq(editor_id),)) + .get_result(conn)?; + FatCatId::from_uuid(&eg_row.id) + }, + (None, false) => FatCatId::from_uuid(&get_or_create_editgroup(editor_id, conn)?), }; Ok(EditContext { editor_id: FatCatId::from_uuid(&editor_id), editgroup_id: editgroup_id, extra_json: None, - autoapprove: false, + autoaccept: autoaccept, }) } @@ -268,7 +259,7 @@ impl Server { entity: models::ContainerEntity, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?)?; + let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?, false)?; let edit = entity.db_create(conn, &edit_context)?; edit.into_model() } @@ -279,7 +270,7 @@ impl Server { entity: models::ContainerEntity, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?)?; + let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?, false)?; let edit = entity.db_update(conn, &edit_context, FatCatId::from_uuid(id))?; edit.into_model() } @@ -289,7 +280,7 @@ impl Server { editgroup_id: Option, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, editgroup_id.map(|u| FatCatId::from_uuid(&u)))?; + let edit_context = make_edit_context(conn, editgroup_id.map(|u| FatCatId::from_uuid(&u)), false)?; let edit = ContainerEntity::db_delete(conn, &edit_context, FatCatId::from_uuid(id))?; edit.into_model() } @@ -299,7 +290,7 @@ impl Server { entity: models::CreatorEntity, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?)?; + let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?, false)?; let edit = entity.db_create(conn, &edit_context)?; edit.into_model() } @@ -310,7 +301,7 @@ impl Server { entity: models::CreatorEntity, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?)?; + let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?, false)?; let edit = entity.db_update(conn, &edit_context, FatCatId::from_uuid(id))?; edit.into_model() } @@ -320,7 +311,7 @@ impl Server { editgroup_id: Option, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, editgroup_id.map(|u| FatCatId::from_uuid(&u)))?; + let edit_context = make_edit_context(conn, editgroup_id.map(|u| FatCatId::from_uuid(&u)), false)?; let edit = CreatorEntity::db_delete(conn, &edit_context, FatCatId::from_uuid(id))?; edit.into_model() } @@ -330,7 +321,7 @@ impl Server { entity: models::FileEntity, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?)?; + let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?, false)?; let edit = entity.db_create(conn, &edit_context)?; edit.into_model() } @@ -341,7 +332,7 @@ impl Server { entity: models::FileEntity, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?)?; + let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?, false)?; let edit = entity.db_update(conn, &edit_context, FatCatId::from_uuid(id))?; edit.into_model() } @@ -351,7 +342,7 @@ impl Server { editgroup_id: Option, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, editgroup_id.map(|u| FatCatId::from_uuid(&u)))?; + let edit_context = make_edit_context(conn, editgroup_id.map(|u| FatCatId::from_uuid(&u)), false)?; let edit = FileEntity::db_delete(conn, &edit_context, FatCatId::from_uuid(id))?; edit.into_model() } @@ -361,7 +352,7 @@ impl Server { entity: models::ReleaseEntity, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?)?; + let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?, false)?; let edit = entity.db_create(conn, &edit_context)?; edit.into_model() } @@ -372,7 +363,7 @@ impl Server { entity: models::ReleaseEntity, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?)?; + let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?, false)?; let edit = entity.db_update(conn, &edit_context, FatCatId::from_uuid(id))?; edit.into_model() } @@ -382,7 +373,7 @@ impl Server { editgroup_id: Option, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, editgroup_id.map(|u| FatCatId::from_uuid(&u)))?; + let edit_context = make_edit_context(conn, editgroup_id.map(|u| FatCatId::from_uuid(&u)), false)?; let edit = ReleaseEntity::db_delete(conn, &edit_context, FatCatId::from_uuid(id))?; edit.into_model() } @@ -392,7 +383,7 @@ impl Server { entity: models::WorkEntity, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?)?; + let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?, false)?; let edit = entity.db_create(conn, &edit_context)?; edit.into_model() } @@ -403,7 +394,7 @@ impl Server { entity: models::WorkEntity, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?)?; + let edit_context = make_edit_context(conn, entity.parse_editgroup_id()?, false)?; let edit = entity.db_update(conn, &edit_context, FatCatId::from_uuid(id))?; edit.into_model() } @@ -414,7 +405,7 @@ impl Server { editgroup_id: Option, conn: &DbConn, ) -> Result { - let edit_context = make_edit_context(conn, editgroup_id.map(|u| FatCatId::from_uuid(&u)))?; + let edit_context = make_edit_context(conn, editgroup_id.map(|u| FatCatId::from_uuid(&u)), false)?; let edit = WorkEntity::db_delete(conn, &edit_context, FatCatId::from_uuid(id))?; edit.into_model() diff --git a/rust/src/api_wrappers.rs b/rust/src/api_wrappers.rs index 6272814e..faafe984 100644 --- a/rust/src/api_wrappers.rs +++ b/rust/src/api_wrappers.rs @@ -61,7 +61,7 @@ macro_rules! wrap_entity_handlers { _context: &Context, ) -> Box + Send> { let conn = self.db_pool.get().expect("db_pool error"); - let ret = match conn.transaction(|| self.$post_handler(entity, false, &conn)) { + let ret = match conn.transaction(|| self.$post_handler(entity, &conn)) { Ok(edit) => $post_resp::CreatedEntity(edit), Err(Error(ErrorKind::Diesel(e), _)) => diff --git a/rust/src/database_entity_crud.rs b/rust/src/database_entity_crud.rs index 3f13a27d..9a47c2de 100644 --- a/rust/src/database_entity_crud.rs +++ b/rust/src/database_entity_crud.rs @@ -3,7 +3,7 @@ use chrono; use database_models::*; use database_schema::*; use diesel::prelude::*; -use diesel::{self, insert_into}; +use diesel::insert_into; use errors::*; use fatcat_api::models::*; use serde_json; @@ -16,7 +16,7 @@ pub struct EditContext { pub editor_id: FatCatId, pub editgroup_id: FatCatId, pub extra_json: Option, - pub autoapprove: bool, + pub autoaccept: bool, } /* One goal here is to abstract the non-entity-specific bits into generic traits or functions, @@ -155,7 +155,7 @@ macro_rules! generic_db_create_batch { .iter() .map(|rev_id| Self::IdentNewRow { rev_id: Some(rev_id.clone()), - is_live: edit_context.autoapprove, + is_live: edit_context.autoaccept, redirect_id: None, }) .collect::>(), @@ -650,7 +650,7 @@ impl EntityCrud for ReleaseEntity { .iter() .map(|rev_id| Self::IdentNewRow { rev_id: Some(rev_id.clone()), - is_live: edit_context.autoapprove, + is_live: edit_context.autoaccept, redirect_id: None, }) .collect::>(), -- cgit v1.2.3