Browse Source

Forum: runtime changes to support thread labels/tags

iorveth 3 years ago
parent
commit
da7facbeeb

+ 10 - 10
analyses/fee-analysis/main_notebook.ipynb

@@ -1087,7 +1087,7 @@
         "delete_category_lead",
         "delete_category_moderator",
         "create_thread",
-        "edit_thread_title",
+        "edit_thread_metadata",
         "update_thread_archival_status_lead",
         "update_thread_archival_status_moderator",
         "delete_thread_lead",
@@ -1473,7 +1473,7 @@
         "delete_category_lead",
         "delete_category_moderator",
         "create_thread",
-        "edit_thread_title",
+        "edit_thread_metadata",
         "update_thread_archival_status_lead",
         "update_thread_archival_status_moderator",
         "delete_thread_lead",
@@ -1828,7 +1828,7 @@
         "delete_category_lead",
         "delete_category_moderator",
         "create_thread",
-        "edit_thread_title",
+        "edit_thread_metadata",
         "update_thread_archival_status_lead",
         "update_thread_archival_status_moderator",
         "delete_thread_lead",
@@ -2399,7 +2399,7 @@
         "delete_category_lead",
         "delete_category_moderator",
         "create_thread",
-        "edit_thread_title",
+        "edit_thread_metadata",
         "update_thread_archival_status_lead",
         "update_thread_archival_status_moderator",
         "delete_thread_lead",
@@ -2698,7 +2698,7 @@
         "delete_category_lead",
         "delete_category_moderator",
         "create_thread",
-        "edit_thread_title",
+        "edit_thread_metadata",
         "update_thread_archival_status_lead",
         "update_thread_archival_status_moderator",
         "delete_thread_lead",
@@ -2952,7 +2952,7 @@
         "delete_category_lead",
         "delete_category_moderator",
         "create_thread",
-        "edit_thread_title",
+        "edit_thread_metadata",
         "update_thread_archival_status_lead",
         "update_thread_archival_status_moderator",
         "delete_thread_lead",
@@ -3415,7 +3415,7 @@
         "delete_category_lead",
         "delete_category_moderator",
         "create_thread",
-        "edit_thread_title",
+        "edit_thread_metadata",
         "update_thread_archival_status_lead",
         "update_thread_archival_status_moderator",
         "delete_thread_lead",
@@ -3706,7 +3706,7 @@
         "delete_category_lead",
         "delete_category_moderator",
         "create_thread",
-        "edit_thread_title",
+        "edit_thread_metadata",
         "update_thread_archival_status_lead",
         "update_thread_archival_status_moderator",
         "delete_thread_lead",
@@ -3897,7 +3897,7 @@
         "delete_category_lead",
         "delete_category_moderator",
         "create_thread",
-        "edit_thread_title",
+        "edit_thread_metadata",
         "update_thread_archival_status_lead",
         "update_thread_archival_status_moderator",
         "delete_thread_lead",
@@ -4176,7 +4176,7 @@
         "delete_category_lead",
         "delete_category_moderator",
         "create_thread",
-        "edit_thread_title",
+        "edit_thread_metadata",
         "update_thread_archival_status_lead",
         "update_thread_archival_status_moderator",
         "delete_thread_lead",

+ 12 - 12
runtime-modules/forum/src/benchmarking.rs

@@ -922,7 +922,7 @@ benchmarks! {
         let (category_id, _) = generate_categories_tree::<T>(caller_id.clone(), i, None);
         let mut category = Module::<T>::category_by_id(category_id);
 
-        let title = vec![0u8].repeat(j as usize);
+        let metadata = vec![0u8].repeat(j as usize);
 
         let text = vec![0u8].repeat(k as usize);
 
@@ -939,7 +939,7 @@ benchmarks! {
         let next_post_id = Module::<T>::next_post_id();
         let initial_balance = Balances::<T>::usable_balance(&caller_id);
 
-    }: _ (RawOrigin::Signed(caller_id.clone()), forum_user_id.saturated_into(), category_id, title.clone(), text.clone(), poll_input.clone())
+    }: _ (RawOrigin::Signed(caller_id.clone()), forum_user_id.saturated_into(), category_id, metadata.clone(), text.clone(), poll_input.clone())
     verify {
 
         assert_eq!(
@@ -963,7 +963,7 @@ benchmarks! {
         // Ensure new thread created successfully
         let new_thread = Thread {
             category_id,
-            title_hash: T::calculate_hash(&title),
+            metadata_hash: T::calculate_hash(&metadata),
             author_id: forum_user_id.saturated_into(),
             poll: poll_input.clone().map(<Module<T>>::from_poll_input),
             cleanup_pay_off: T::ThreadDeposit::get(),
@@ -987,14 +987,14 @@ benchmarks! {
                 next_thread_id,
                 next_post_id,
                 forum_user_id.saturated_into(),
-                title,
+                metadata,
                 text,
                 poll_input,
             ).into()
         );
     }
 
-    edit_thread_title {
+    edit_thread_metadata {
         let forum_user_id = 0;
 
         let caller_id =
@@ -1014,19 +1014,19 @@ benchmarks! {
         );
         let mut thread = Module::<T>::thread_by_id(category_id, thread_id);
 
-        let text = vec![0u8].repeat(j as usize);
+        let new_metadata = vec![0u8].repeat(j as usize);
 
-    }: _ (RawOrigin::Signed(caller_id), forum_user_id.saturated_into(), category_id, thread_id, text.clone())
+    }: _ (RawOrigin::Signed(caller_id), forum_user_id.saturated_into(), category_id, thread_id, new_metadata.clone())
     verify {
-        thread.title_hash = T::calculate_hash(&text);
+        thread.metadata_hash = T::calculate_hash(&new_metadata);
         assert_eq!(Module::<T>::thread_by_id(category_id, thread_id), thread);
 
         assert_last_event::<T>(
-            RawEvent::ThreadTitleUpdated(
+            RawEvent::ThreadMetadataUpdated(
                 thread_id,
                 forum_user_id.saturated_into(),
                 category_id,
-                text
+                new_metadata
             ).into()
         );
     }
@@ -1908,9 +1908,9 @@ mod tests {
     }
 
     #[test]
-    fn test_edit_thread_title() {
+    fn test_edit_thread_metadata() {
         with_test_externalities(|| {
-            assert_ok!(test_benchmark_edit_thread_title::<Runtime>());
+            assert_ok!(test_benchmark_edit_thread_metadata::<Runtime>());
         });
     }
 

+ 23 - 17
runtime-modules/forum/src/lib.rs

@@ -68,7 +68,7 @@ pub trait WeightInfo {
     fn delete_category_lead(i: u32) -> Weight;
     fn delete_category_moderator(i: u32) -> Weight;
     fn create_thread(j: u32, k: u32, i: u32) -> Weight;
-    fn edit_thread_title(i: u32, j: u32) -> Weight;
+    fn edit_thread_metadata(i: u32, j: u32) -> Weight;
     fn delete_thread(i: u32) -> Weight;
     fn move_thread_to_category_lead(i: u32) -> Weight;
     fn move_thread_to_category_moderator(i: u32) -> Weight;
@@ -263,8 +263,8 @@ pub struct Post<ForumUserId, ThreadId, Hash, Balance, BlockNumber> {
 #[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
 #[derive(Encode, Decode, Default, Clone, PartialEq, Debug, Eq)]
 pub struct Thread<ForumUserId, CategoryId, Moment, Hash, Balance> {
-    /// Title hash
-    pub title_hash: Hash,
+    /// Metadata hash
+    pub metadata_hash: Hash,
 
     /// Category in which this thread lives
     pub category_id: CategoryId,
@@ -536,8 +536,8 @@ decl_event!(
         /// The second argument reflects the new archival status of the thread.
         ThreadUpdated(ThreadId, bool, PrivilegedActor, CategoryId),
 
-        /// A thread with given id was moderated.
-        ThreadTitleUpdated(ThreadId, ForumUserId, CategoryId, Vec<u8>),
+        /// A thread metadata given id was updated.
+        ThreadMetadataUpdated(ThreadId, ForumUserId, CategoryId, Vec<u8>),
 
         /// A thread was deleted.
         ThreadDeleted(ThreadId, ForumUserId, CategoryId, bool),
@@ -898,7 +898,7 @@ decl_module! {
         ///    - O(W)
         /// # </weight>
         #[weight = WeightInfoForum::<T>::create_thread(
-            title.len().saturated_into(),
+            metadata.len().saturated_into(),
             text.len().saturated_into(),
             T::MaxCategoryDepth::get() as u32,
         )]
@@ -906,7 +906,7 @@ decl_module! {
             origin,
             forum_user_id: ForumUserId<T>,
             category_id: T::CategoryId,
-            title: Vec<u8>,
+            metadata: Vec<u8>,
             text: Vec<u8>,
             poll_input: Option<PollInput<T::Moment>>,
         ) -> DispatchResult {
@@ -947,7 +947,7 @@ decl_module! {
             // Build a new thread
             let new_thread = Thread {
                 category_id,
-                title_hash: T::calculate_hash(&title),
+                metadata_hash: T::calculate_hash(&metadata),
                 author_id: forum_user_id,
                 poll,
                 cleanup_pay_off: T::ThreadDeposit::get(),
@@ -981,7 +981,7 @@ decl_module! {
                     new_thread_id,
                     initial_post_id,
                     forum_user_id,
-                    title,
+                    metadata,
                     text,
                     poll_input,
                 )
@@ -1001,11 +1001,17 @@ decl_module! {
         /// - DB:
         ///    - O(W)
         /// # </weight>
-        #[weight = WeightInfoForum::<T>::edit_thread_title(
+        #[weight = WeightInfoForum::<T>::edit_thread_metadata(
             T::MaxCategoryDepth::get() as u32,
-            new_title.len().saturated_into(),
+            new_metadata.len().saturated_into(),
         )]
-        fn edit_thread_title(origin, forum_user_id: ForumUserId<T>, category_id: T::CategoryId, thread_id: T::ThreadId, new_title: Vec<u8>) -> DispatchResult {
+        fn edit_thread_metadata(
+            origin, 
+            forum_user_id: ForumUserId<T>, 
+            category_id: T::CategoryId, 
+            thread_id: T::ThreadId, 
+            new_metadata: Vec<u8>
+        ) -> DispatchResult {
             // Ensure data migration is done
             Self::ensure_data_migration_done()?;
 
@@ -1017,17 +1023,17 @@ decl_module! {
             // == MUTATION SAFE ==
             //
 
-            // Update thread title
-            let title_hash = T::calculate_hash(&new_title);
-            <ThreadById<T>>::mutate(thread.category_id, thread_id, |thread| thread.title_hash = title_hash);
+            // Update thread metadata
+            let metadata_hash = T::calculate_hash(&new_metadata);
+            <ThreadById<T>>::mutate(thread.category_id, thread_id, |thread| thread.metadata_hash = metadata_hash);
 
             // Store the event
             Self::deposit_event(
-                RawEvent::ThreadTitleUpdated(
+                RawEvent::ThreadMetadataUpdated(
                     thread_id,
                     forum_user_id,
                     category_id,
-                    new_title,
+                    new_metadata,
                 )
             );
 

+ 11 - 11
runtime-modules/forum/src/mock.rs

@@ -463,7 +463,7 @@ impl WeightInfo for () {
     fn create_thread(_: u32, _: u32, _: u32) -> Weight {
         0
     }
-    fn edit_thread_title(_: u32, _: u32) -> Weight {
+    fn edit_thread_metadata(_: u32, _: u32) -> Weight {
         0
     }
     fn delete_thread(_: u32) -> Weight {
@@ -579,8 +579,8 @@ pub fn good_thread_text() -> Vec<u8> {
     b"The first post in this thread".to_vec()
 }
 
-pub fn good_thread_new_title() -> Vec<u8> {
-    b"Brand new thread title".to_vec()
+pub fn good_thread_new_metadata() -> Vec<u8> {
+    b"Brand new thread metadata".to_vec()
 }
 
 pub fn good_post_text() -> Vec<u8> {
@@ -716,36 +716,36 @@ pub fn create_thread_mock(
     thread_id
 }
 
-pub fn edit_thread_title_mock(
+pub fn edit_thread_metadata_mock(
     origin: OriginType,
     forum_user_id: ForumUserId<Runtime>,
     category_id: <Runtime as Trait>::CategoryId,
     thread_id: <Runtime as Trait>::PostId,
-    new_title: Vec<u8>,
+    new_metadata: Vec<u8>,
     result: DispatchResult,
 ) -> <Runtime as Trait>::PostId {
     assert_eq!(
-        TestForumModule::edit_thread_title(
+        TestForumModule::edit_thread_metadata(
             mock_origin(origin),
             forum_user_id,
             category_id,
             thread_id,
-            new_title.clone(),
+            new_metadata.clone(),
         ),
         result
     );
     if result.is_ok() {
         assert_eq!(
-            TestForumModule::thread_by_id(category_id, thread_id).title_hash,
-            Runtime::calculate_hash(new_title.as_slice()),
+            TestForumModule::thread_by_id(category_id, thread_id).metadata_hash,
+            Runtime::calculate_hash(new_metadata.as_slice()),
         );
         assert_eq!(
             System::events().last().unwrap().event,
-            TestEvent::forum_mod(RawEvent::ThreadTitleUpdated(
+            TestEvent::forum_mod(RawEvent::ThreadMetadataUpdated(
                 thread_id,
                 forum_user_id,
                 category_id,
-                new_title.clone()
+                new_metadata
             ))
         );
     }

+ 7 - 7
runtime-modules/forum/src/tests.rs

@@ -404,12 +404,12 @@ fn update_category_archival_status_lock_works() {
         );
 
         // can't update thread
-        edit_thread_title_mock(
+        edit_thread_metadata_mock(
             origin.clone(),
             forum_lead,
             category_id,
             thread_id,
-            good_thread_new_title(),
+            good_thread_new_metadata(),
             Err(Error::<Runtime>::AncestorCategoryImmutable.into()),
         );
     });
@@ -990,7 +990,7 @@ fn create_thread_poll_timestamp() {
 
 #[test]
 // test if author can edit thread's title
-fn edit_thread_title() {
+fn edit_thread_metadata() {
     let forum_users = [NOT_FORUM_LEAD_ORIGIN_ID, NOT_FORUM_LEAD_2_ORIGIN_ID];
     let origins = [NOT_FORUM_LEAD_ORIGIN, NOT_FORUM_LEAD_2_ORIGIN];
 
@@ -1028,22 +1028,22 @@ fn edit_thread_title() {
         );
 
         // check author can edit text
-        edit_thread_title_mock(
+        edit_thread_metadata_mock(
             origins[0].clone(),
             forum_users[0],
             category_id,
             thread_id,
-            good_thread_new_title(),
+            good_thread_new_metadata(),
             Ok(()),
         );
 
         // check non-author is forbidden from editing text
-        edit_thread_title_mock(
+        edit_thread_metadata_mock(
             origins[1].clone(),
             forum_users[1],
             category_id,
             thread_id,
-            good_thread_new_title(),
+            good_thread_new_metadata(),
             Err(Error::<Runtime>::AccountDoesNotMatchThreadAuthor.into()),
         );
     });

+ 1 - 1
runtime/src/weights/forum.rs

@@ -63,7 +63,7 @@ impl forum::WeightInfo for WeightInfo {
             .saturating_add(DbWeight::get().reads((1 as Weight).saturating_mul(i as Weight)))
             .saturating_add(DbWeight::get().writes(7 as Weight))
     }
-    fn edit_thread_title(i: u32, j: u32) -> Weight {
+    fn edit_thread_metadata(i: u32, j: u32) -> Weight {
         (249_076_000 as Weight)
             .saturating_add((65_112_000 as Weight).saturating_mul(i as Weight))
             .saturating_add((145_000 as Weight).saturating_mul(j as Weight))