diff options
| author | Bryan Newbold <bnewbold@robocracy.org> | 2018-09-11 16:10:47 -0700 | 
|---|---|---|
| committer | Bryan Newbold <bnewbold@robocracy.org> | 2018-09-11 16:10:47 -0700 | 
| commit | 91c080a2e82ec4e8908cb8e3916a543519151847 (patch) | |
| tree | 1d6f450546bcd0d0888bd0f4ec52d66a8a3cfd0f /rust/src | |
| parent | 6315c314969d4e66db4da09a8c2ff245aafe0fc1 (diff) | |
| download | fatcat-91c080a2e82ec4e8908cb8e3916a543519151847.tar.gz fatcat-91c080a2e82ec4e8908cb8e3916a543519151847.zip  | |
implement new editgroup_id behavior
Diffstat (limited to 'rust/src')
| -rw-r--r-- | rust/src/api_entity_crud.rs | 37 | ||||
| -rw-r--r-- | rust/src/api_helpers.rs | 41 | ||||
| -rw-r--r-- | rust/src/api_server.rs | 14 | ||||
| -rw-r--r-- | rust/src/api_wrappers.rs | 19 | 
4 files changed, 52 insertions, 59 deletions
diff --git a/rust/src/api_entity_crud.rs b/rust/src/api_entity_crud.rs index 401b9835..1cb9adf8 100644 --- a/rust/src/api_entity_crud.rs +++ b/rust/src/api_entity_crud.rs @@ -41,8 +41,6 @@ where      type IdentNewRow;      type RevRow; -    fn parse_editgroup_id(&self) -> Result<Option<FatCatId>>; -      // Generic Methods      fn db_get(conn: &DbConn, ident: FatCatId) -> Result<Self>;      fn db_get_rev(conn: &DbConn, rev_id: Uuid) -> Result<Self>; @@ -81,18 +79,6 @@ where      fn db_insert_revs(conn: &DbConn, models: &[&Self]) -> Result<Vec<Uuid>>;  } -// TODO: this could be a separate trait on all entities -macro_rules! generic_parse_editgroup_id{ -    () => { -        fn parse_editgroup_id(&self) -> Result<Option<FatCatId>> { -            match &self.editgroup_id { -                Some(s) => Ok(Some(FatCatId::from_str(&s)?)), -                None => Ok(None), -            } -        } -    } -} -  macro_rules! generic_db_get {      ($ident_table:ident, $rev_table:ident) => {          fn db_get(conn: &DbConn, ident: FatCatId) -> Result<Self> { @@ -394,7 +380,6 @@ impl EntityCrud for ContainerEntity {      type IdentNewRow = ContainerIdentNewRow;      type RevRow = ContainerRevRow; -    generic_parse_editgroup_id!();      generic_db_get!(container_ident, container_rev);      generic_db_get_rev!(container_rev);      generic_db_expand!(); @@ -432,7 +417,7 @@ impl EntityCrud for ContainerEntity {              revision: Some(rev_row.id.to_string()),              redirect: redirect_id,              extra: rev_row.extra_json, -            editgroup_id: None, +            edit_extra: None,          })      } @@ -475,7 +460,6 @@ impl EntityCrud for CreatorEntity {      type IdentNewRow = CreatorIdentNewRow;      type RevRow = CreatorRevRow; -    generic_parse_editgroup_id!();      generic_db_get!(creator_ident, creator_rev);      generic_db_get_rev!(creator_rev);      generic_db_expand!(); @@ -510,8 +494,8 @@ impl EntityCrud for CreatorEntity {              ident: ident_id,              revision: Some(rev_row.id.to_string()),              redirect: redirect_id, -            editgroup_id: None,              extra: rev_row.extra_json, +            edit_extra: None,          })      } @@ -553,7 +537,6 @@ impl EntityCrud for FileEntity {      type IdentNewRow = FileIdentNewRow;      type RevRow = FileRevRow; -    generic_parse_editgroup_id!();      generic_db_get!(file_ident, file_rev);      generic_db_get_rev!(file_rev);      generic_db_expand!(); @@ -608,8 +591,8 @@ impl EntityCrud for FileEntity {              ident: ident_id,              revision: Some(rev_row.id.to_string()),              redirect: redirect_id, -            editgroup_id: None,              extra: rev_row.extra_json, +            edit_extra: None,          })      } @@ -691,7 +674,6 @@ impl EntityCrud for ReleaseEntity {      type IdentNewRow = ReleaseIdentNewRow;      type RevRow = ReleaseRevRow; -    generic_parse_editgroup_id!();      generic_db_get!(release_ident, release_rev);      generic_db_get_rev!(release_rev);      //generic_db_create!(release_ident, release_edit); @@ -703,18 +685,16 @@ impl EntityCrud for ReleaseEntity {      generic_db_insert_rev!();      fn db_expand(&mut self, conn: &DbConn, expand: ExpandFlags) -> Result<()> { -          let ident = match &self.ident {              None => bail!("Can't expand a non-concrete entity"), -            Some(s) => FatCatId::from_str(&s)? +            Some(s) => FatCatId::from_str(&s)?,          };          if expand.files {              self.files = Some(get_release_files(ident, conn)?);          }          if expand.container {              if let Some(ref cid) = self.container_id { -                self.container = -                    Some(ContainerEntity::db_get(conn, FatCatId::from_str(&cid)?)?); +                self.container = Some(ContainerEntity::db_get(conn, FatCatId::from_str(&cid)?)?);              }          }          Ok(()) @@ -744,8 +724,8 @@ impl EntityCrud for ReleaseEntity {                      revision: None,                      redirect: None,                      state: None, -                    editgroup_id: None,                      extra: None, +                    edit_extra: None,                  });              };          } @@ -904,8 +884,8 @@ impl EntityCrud for ReleaseEntity {              ident: ident_id,              revision: Some(rev_row.id.to_string()),              redirect: redirect_id, -            editgroup_id: None,              extra: rev_row.extra_json, +            edit_extra: None,          })      } @@ -1086,7 +1066,6 @@ impl EntityCrud for WorkEntity {      type IdentNewRow = WorkIdentNewRow;      type RevRow = WorkRevRow; -    generic_parse_editgroup_id!();      generic_db_get!(work_ident, work_rev);      generic_db_get_rev!(work_rev);      generic_db_expand!(); @@ -1117,8 +1096,8 @@ impl EntityCrud for WorkEntity {              ident: ident_id,              revision: Some(rev_row.id.to_string()),              redirect: redirect_id, -            editgroup_id: None,              extra: rev_row.extra_json, +            edit_extra: None,          })      } diff --git a/rust/src/api_helpers.rs b/rust/src/api_helpers.rs index ee1f9f14..f260d25f 100644 --- a/rust/src/api_helpers.rs +++ b/rust/src/api_helpers.rs @@ -21,7 +21,7 @@ pub struct EditContext {      pub autoaccept: bool,  } -#[derive(Clone,Copy,PartialEq)] +#[derive(Clone, Copy, PartialEq)]  pub struct ExpandFlags {      pub files: bool,      pub container: bool, @@ -30,7 +30,6 @@ pub struct ExpandFlags {  }  impl ExpandFlags { -      pub fn from_string(param: &str) -> ExpandFlags {          let list: Vec<&str> = param.split_terminator(",").collect();          ExpandFlags::from_strings(&list) @@ -72,24 +71,34 @@ fn test_expand_flags() {      assert!(ExpandFlags::from_strings(&vec![]).files == false);      assert!(ExpandFlags::from_strings(&vec!["files"]).files == true);      assert!(ExpandFlags::from_strings(&vec!["file"]).files == false); -    let all = ExpandFlags::from_strings(&vec!["files", "container", "other_thing", "releases", "creators"]); -    assert!(all == ExpandFlags { -        files: true, -        container: true, -        releases: true, -        creators: true -    }); +    let all = ExpandFlags::from_strings(&vec![ +        "files", +        "container", +        "other_thing", +        "releases", +        "creators", +    ]); +    assert!( +        all == ExpandFlags { +            files: true, +            container: true, +            releases: true, +            creators: true +        } +    );      assert!(ExpandFlags::from_string("").files == false);      assert!(ExpandFlags::from_string("files").files == true);      assert!(ExpandFlags::from_string("something,,files").files == true);      assert!(ExpandFlags::from_string("file").files == false);      let all = ExpandFlags::from_string("files,container,other_thing,releases,creators"); -    assert!(all == ExpandFlags { -        files: true, -        container: true, -        releases: true, -        creators: true -    }); +    assert!( +        all == ExpandFlags { +            files: true, +            container: true, +            releases: true, +            creators: true +        } +    );      assert!(all == ExpandFlags::all());  } @@ -169,7 +178,7 @@ pub fn accept_editgroup(editgroup_id: FatCatId, conn: &DbConn) -> Result<Changel      Ok(entry)  } -#[derive(Clone,Copy,PartialEq)] +#[derive(Clone, Copy, PartialEq)]  pub struct FatCatId(Uuid);  impl ToString for FatCatId { diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs index f25e6169..055758e0 100644 --- a/rust/src/api_server.rs +++ b/rust/src/api_server.rs @@ -19,15 +19,11 @@ macro_rules! entity_batch_handler {              &self,              entity_list: &[models::$model],              autoaccept: bool, -            editgroup: Option<String>, +            editgroup_id: Option<FatCatId>,              conn: &DbConn,          ) -> Result<Vec<EntityEdit>> { -            let editgroup_id: Option<FatCatId> = match editgroup { -                Some(s) => Some(FatCatId::from_str(&s)?), -                None => None, -            }; -            let edit_context = make_edit_context(conn, editgroup_id.clone(), autoaccept)?; +            let edit_context = make_edit_context(conn, editgroup_id, 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())?; @@ -57,10 +53,7 @@ pub struct Server {      pub db_pool: ConnectionPool,  } -pub fn get_release_files ( -    id: FatCatId, -    conn: &DbConn, -) -> Result<Vec<FileEntity>> { +pub fn get_release_files(id: FatCatId, conn: &DbConn) -> Result<Vec<FileEntity>> {      let rows: Vec<(FileRevRow, FileIdentRow, FileReleaseRow)> = file_rev::table          .inner_join(file_ident::table)          .inner_join(file_release::table) @@ -75,7 +68,6 @@ pub fn get_release_files (  }  impl Server { -      pub fn lookup_container_handler(&self, issnl: &str, conn: &DbConn) -> Result<ContainerEntity> {          check_issn(issnl)?;          let (ident, rev): (ContainerIdentRow, ContainerRevRow) = container_ident::table diff --git a/rust/src/api_wrappers.rs b/rust/src/api_wrappers.rs index ca4081da..1f61cc9b 100644 --- a/rust/src/api_wrappers.rs +++ b/rust/src/api_wrappers.rs @@ -68,11 +68,15 @@ macro_rules! wrap_entity_handlers {          fn $post_fn(              &self,              entity: models::$model, +            editgroup: Option<String>,              _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(|| { -                let edit_context = make_edit_context(&conn, entity.parse_editgroup_id()?, false)?; +                let editgroup_id = if let Some(s) = editgroup { +                    Some(FatCatId::from_str(&s)?) +                } else { None }; +                let edit_context = make_edit_context(&conn, editgroup_id, false)?;                  entity.db_create(&conn, &edit_context)?.into_model()              }) {                  Ok(edit) => @@ -102,7 +106,12 @@ macro_rules! wrap_entity_handlers {              _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, autoaccept.unwrap_or(false), editgroup, &conn)) { +            let ret = match conn.transaction(|| { +                let editgroup_id = if let Some(s) = editgroup { +                    Some(FatCatId::from_str(&s)?) +                } else { None }; +                self.$post_batch_handler(entity_list, autoaccept.unwrap_or(false), editgroup_id, &conn) +            }) {                  Ok(edit) =>                      $post_batch_resp::CreatedEntities(edit),                  Err(Error(ErrorKind::Diesel(e), _)) => @@ -126,12 +135,16 @@ macro_rules! wrap_entity_handlers {              &self,              id: String,              entity: models::$model, +            editgroup: Option<String>,              _context: &Context,          ) -> Box<Future<Item = $update_resp, Error = ApiError> + Send> {              let conn = self.db_pool.get().expect("db_pool error");              let ret = match conn.transaction(|| {                  let entity_id = FatCatId::from_str(&id)?; -                let edit_context = make_edit_context(&conn, entity.parse_editgroup_id()?, false)?; +                let editgroup_id = if let Some(s) = editgroup { +                    Some(FatCatId::from_str(&s)?) +                } else { None }; +                let edit_context = make_edit_context(&conn, editgroup_id, false)?;                  entity.db_update(&conn, &edit_context, entity_id)?.into_model()              }) {                  Ok(edit) =>  | 
