Browse Source

adedd checks for auction parameters

ignazio 3 years ago
parent
commit
762ab90618

+ 30 - 6
runtime-modules/content/src/lib.rs

@@ -1495,12 +1495,9 @@ decl_module! {
                 Self::ensure_royalty_bounds_satisfied(royalty.clone())?;
             }
 
-            if InitTransactionalStatus::<T>::Auction(auction_params)
-                = &params.init_transactional_status {
-                    Self::validate_auction_params(&auction_params)?;
-                }
-
-            let transactional_status = params.init_transactional_status.clone().try_into()?;
+            let transactional_status = Self::ensure_valid_init_transactional_status(
+                &params.init_transactional_status
+            )?;
 
             //
             // == MUTATION SAFE ==
@@ -2266,6 +2263,33 @@ impl<T: Trait> Module<T> {
         }
     }
 
+    pub fn ensure_valid_init_transactional_status(
+        init_status: &InitTransactionalStatus<T>,
+    ) -> Result<
+        TransactionalStatus<
+            <T as frame_system::Trait>::BlockNumber,
+            <T as common::MembershipTypes>::MemberId,
+            <T as frame_system::Trait>::AccountId,
+            CurrencyOf<T>,
+        >,
+        DispatchError,
+    > {
+        match init_status {
+            InitTransactionalStatus::<T>::Idle => Ok(TransactionalStatus::Idle),
+            InitTransactionalStatus::<T>::InitiatedOfferToMember(member, balance) => Ok(
+                TransactionalStatus::InitiatedOfferToMember(member.clone(), balance.clone()),
+            ),
+            InitTransactionalStatus::<T>::Auction(params) => {
+                Self::validate_auction_params(&params)?;
+                let mut auction = AuctionRecord::new(params.clone());
+                if params.starts_at.is_none() {
+                    auction.starts_at = <frame_system::Module<T>>::block_number();
+                }
+                Ok(TransactionalStatus::Auction(auction))
+            }
+        }
+    }
+
     fn bag_id_for_channel(channel_id: &T::ChannelId) -> storage::BagId<T> {
         // retrieve bag id from channel id
         let dyn_bag = DynamicBagIdType::<T::MemberId, T::ChannelId>::Channel(*channel_id);

+ 2 - 3
runtime-modules/content/src/nft/types.rs

@@ -523,15 +523,14 @@ pub enum InitTransactionalStatusRecord<
 > {
     Idle,
     InitiatedOfferToMember(MemberId, Option<Balance>),
-    Auction(AuctionParameters<BlockNumber, Balance, MemberId>),
+    Auction(AuctionParams<BlockNumber, Balance, MemberId>),
 }
 
 impl<
         BlockNumber: BaseArithmetic + Copy + Default,
         MemberId: Default + Copy + Ord,
-        AccountId: Default + Clone + Ord,
         Balance: Default + Clone + BaseArithmetic,
-    > Default for InitTransactionalStatusRecord<BlockNumber, MemberId, AccountId, Balance>
+    > Default for InitTransactionalStatusRecord<BlockNumber, MemberId, Balance>
 {
     fn default() -> Self {
         Self::Idle

+ 1 - 1
runtime-modules/content/src/tests/nft/issue_nft.rs

@@ -41,7 +41,7 @@ fn issue_nft() {
         let nft_status = Some(OwnedNFT::new(
             NFTOwner::ChannelOwner,
             None,
-            InitTransactionalStatus::<Test>::default().into(),
+            TransactionalStatus::Idle,
         ));
         assert_eq!(nft_status, Content::video_by_id(video_id).nft_status);