diff --git a/services/blob/src/constants.rs b/services/blob/src/constants.rs --- a/services/blob/src/constants.rs +++ b/services/blob/src/constants.rs @@ -27,6 +27,7 @@ pub const ATTR_BLOB_HASH: &str = "blob_hash"; pub const ATTR_HOLDER: &str = "holder"; pub const ATTR_INDEXED_TAG: &str = "indexed_tag"; + pub const ATTR_TAGS: &str = "tags"; pub const ATTR_CREATED_AT: &str = "created_at"; pub const ATTR_LAST_MODIFIED: &str = "last_modified"; pub const ATTR_S3_PATH: &str = "s3_path"; diff --git a/services/blob/src/database/client.rs b/services/blob/src/database/client.rs --- a/services/blob/src/database/client.rs +++ b/services/blob/src/database/client.rs @@ -108,11 +108,12 @@ &self, blob_hash: impl Into, holder: impl Into, + tags: &[String], ) -> DBResult<()> { let blob_hash: String = blob_hash.into(); let holder: String = holder.into(); - let indexed_tag = get_indexable_tag(&holder, &[]); + let indexed_tag = get_indexable_tag(&holder, tags); validate_holder(&holder)?; let mut item = HashMap::from([ @@ -121,6 +122,15 @@ (ATTR_UNCHECKED.to_string(), UncheckedKind::Holder.into()), ]); + if !tags.is_empty() { + item.insert(ATTR_TAGS.to_string(), AttributeValue::Ss(tags.to_vec())); + } else if let Some(single_tag) = &indexed_tag { + item.insert( + ATTR_TAGS.to_string(), + AttributeValue::Ss(vec![single_tag.to_string()]), + ); + } + if let Some(tag) = indexed_tag { item.insert(ATTR_INDEXED_TAG.to_string(), AttributeValue::S(tag)); } diff --git a/services/blob/src/service.rs b/services/blob/src/service.rs --- a/services/blob/src/service.rs +++ b/services/blob/src/service.rs @@ -223,12 +223,21 @@ &self, blob_hash: impl Into, holder: impl Into, + ) -> BlobServiceResult<()> { + self.assign_holder_with_tags(blob_hash, holder, &[]).await + } + + pub async fn assign_holder_with_tags( + &self, + blob_hash: impl Into, + holder: impl Into, + tags: &[String], ) -> BlobServiceResult<()> { let blob_hash: String = blob_hash.into(); trace!(blob_hash, "Attempting to assign holder"); self .db - .put_holder_assignment(blob_hash.clone(), holder.into()) + .put_holder_assignment(blob_hash.clone(), holder.into(), tags) .await?; trace!("Holder assigned.");