소스 검색

vnft refactoring: replace NftStatus enum with Option

iorveth 3 년 전
부모
커밋
5284c29c4a
4개의 변경된 파일28개의 추가작업 그리고 59개의 파일을 삭제
  1. 8 8
      runtime-modules/content/src/lib.rs
  2. 6 6
      runtime-modules/content/src/nft/mod.rs
  3. 0 27
      runtime-modules/content/src/nft/types.rs
  4. 14 18
      runtime-modules/content/src/types.rs

+ 8 - 8
runtime-modules/content/src/lib.rs

@@ -619,7 +619,7 @@ decl_module! {
                 /// Whether the curators have censored the video or not.
                 is_censored: false,
                 /// Newly created video has no nft
-                nft_status: NFTStatus::NoneIssued,
+                nft_status: None,
             };
 
             VideoById::<T>::insert(video_id, video);
@@ -1025,7 +1025,7 @@ decl_module! {
             //
             // == MUTATION SAFE ==
             //
-            
+
             // Unreserve previous bidder balance
             if let Some((last_bidder_account_id, last_bid_amount)) = last_bid_data {
                 T::Currency::unreserve(&last_bidder_account_id, last_bid_amount);
@@ -1184,7 +1184,7 @@ decl_module! {
             // Ensure auction can be completed
             Self::ensure_auction_can_be_completed(&auction)?;
 
-            if let NFTStatus::Owned(owned_nft) = &video.nft_status {
+            if let Some(owned_nft) = &video.nft_status {
 
                 let owner_account_id = Self::ensure_owner_account_id(&video, &owned_nft)?;
 
@@ -1199,7 +1199,7 @@ decl_module! {
                 // Update the video
                 VideoById::<T>::insert(video_id, video);
             }
-            
+
             // Trigger event
             Self::deposit_event(RawEvent::AuctionCompleted(member_id, video_id, metadata));
         }
@@ -1228,7 +1228,7 @@ decl_module! {
             // Ensure actor is authorized to accept open auction bid
             Self::authorize_nft_owner(origin, &actor, &video)?;
 
-            if let NFTStatus::Owned(owned_nft) = &video.nft_status {
+            if let Some(owned_nft) = &video.nft_status {
 
                 let owner_account_id = Self::ensure_owner_account_id(&video, &owned_nft)?;
 
@@ -1290,7 +1290,7 @@ decl_module! {
 
             // Issue NFT
             let mut video = video;
-            video.nft_status = NFTStatus::Owned(OwnedNFT {
+            video.nft_status = Some(OwnedNFT {
                 transactional_status: TransactionalStatus::Idle,
                 owner: content_owner.clone(),
                 creator_royalty: royalty,
@@ -1396,7 +1396,7 @@ decl_module! {
             // Ensure new pending offer is available to proceed
             Self::ensure_new_pending_offer_available_to_proceed(&video, participant_id, &receiver_account_id)?;
 
-            if let NFTStatus::Owned(owned_nft) = &video.nft_status {
+            if let Some(owned_nft) = &video.nft_status {
 
                 let owner_account_id = Self::ensure_owner_account_id(&video, &owned_nft)?;
 
@@ -1468,7 +1468,7 @@ decl_module! {
             // Ensure given participant can buy nft now
             Self::ensure_can_buy_now(&video, &participant_account_id)?;
 
-            if let NFTStatus::Owned(owned_nft) = &video.nft_status {
+            if let Some(owned_nft) = &video.nft_status {
 
                 let owner_account_id = Self::ensure_owner_account_id(&video, &owned_nft)?;
 

+ 6 - 6
runtime-modules/content/src/nft/mod.rs

@@ -239,7 +239,7 @@ impl<T: Trait> Module<T> {
         video: &Video<T>,
         participant_account_id: &T::AccountId,
     ) -> DispatchResult {
-        if let NFTStatus::Owned(OwnedNFT {
+        if let Some(OwnedNFT {
             transactional_status: TransactionalStatus::BuyNow(price),
             ..
         }) = &video.nft_status
@@ -257,7 +257,7 @@ impl<T: Trait> Module<T> {
         participant_account_id: &T::AccountId,
     ) -> DispatchResult {
         match &video.nft_status {
-            NFTStatus::Owned(OwnedNFT {
+            Some(OwnedNFT {
                 transactional_status: TransactionalStatus::InitiatedOfferToMember(to, price),
                 ..
             }) if participant == *to => {
@@ -277,7 +277,7 @@ impl<T: Trait> Module<T> {
         new_owner_account_id: T::AccountId,
         new_owner: T::MemberId,
     ) -> Video<T> {
-        if let NFTStatus::Owned(OwnedNFT {
+        if let Some(OwnedNFT {
             transactional_status: TransactionalStatus::BuyNow(price),
             ref mut owner,
             ..
@@ -299,7 +299,7 @@ impl<T: Trait> Module<T> {
         owner_account_id: T::AccountId,
         new_owner_account_id: T::AccountId,
     ) -> Video<T> {
-        if let NFTStatus::Owned(OwnedNFT {
+        if let Some(OwnedNFT {
             transactional_status: TransactionalStatus::InitiatedOfferToMember(to, price),
             ref mut owner,
             ..
@@ -326,7 +326,7 @@ impl<T: Trait> Module<T> {
         owner_account_id: T::AccountId,
         last_bid_amount: BalanceOf<T>,
     ) {
-        if let NFTStatus::Owned(OwnedNFT {
+        if let Some(OwnedNFT {
             owner,
             transactional_status,
             creator_royalty,
@@ -375,7 +375,7 @@ impl<T: Trait> Module<T> {
         last_bidder_account_id: T::AccountId,
         owner_account_id: T::AccountId,
     ) -> Video<T> {
-        if let NFTStatus::Owned(OwnedNFT {
+        if let Some(OwnedNFT {
             transactional_status: TransactionalStatus::Auction(auction),
             ..
         }) = &video.nft_status

+ 0 - 27
runtime-modules/content/src/nft/types.rs

@@ -73,33 +73,6 @@ impl<
     }
 }
 
-/// Enum, representing nft issuance status
-#[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
-#[derive(Encode, Decode, Clone, PartialEq, Eq, Debug)]
-pub enum NFTStatus<
-    BlockNumber: BaseArithmetic + Copy,
-    MemberId: Default + Copy + Ord,
-    CuratorGroupId: Default + Copy,
-    DAOId: Default + Copy,
-    Balance: Default,
-> {
-    NoneIssued,
-    Owned(OwnedNFT<BlockNumber, MemberId, CuratorGroupId, DAOId, Balance>),
-}
-
-impl<
-        BlockNumber: BaseArithmetic + Copy,
-        MemberId: Default + Copy + Ord,
-        CuratorGroupId: Default + Copy,
-        DAOId: Default + Copy,
-        Balance: Default,
-    > Default for NFTStatus<BlockNumber, MemberId, CuratorGroupId, DAOId, Balance>
-{
-    fn default() -> Self {
-        Self::NoneIssued
-    }
-}
-
 /// Information on the auction being created.
 #[cfg_attr(feature = "std", derive(Serialize, Deserialize))]
 #[derive(Encode, Decode, Default, Clone, PartialEq, Eq, Debug)]

+ 14 - 18
runtime-modules/content/src/types.rs

@@ -233,7 +233,7 @@ pub struct VideoRecord<
     /// Whether the curators have censored the video or not.
     pub is_censored: bool,
     /// Whether nft for this video have been issued.
-    pub nft_status: NFTStatus<BlockNumber, MemberId, CuratorGroupId, DAOId, Balance>,
+    pub nft_status: Option<OwnedNFT<BlockNumber, MemberId, CuratorGroupId, DAOId, Balance>>,
 }
 
 impl<
@@ -247,11 +247,7 @@ impl<
     > VideoRecord<ChannelId, SeriesId, BlockNumber, MemberId, CuratorGroupId, DAOId, Balance>
 {
     fn is_issued(&self) -> bool {
-        if let NFTStatus::NoneIssued = self.nft_status {
-            false
-        } else {
-            true
-        }
+        self.nft_status.is_some()
     }
 
     /// Ensure nft status is set to `NoneIssued`
@@ -271,7 +267,7 @@ impl<
         &self,
         owner: &ContentOwner<MemberId, CuratorGroupId, DAOId>,
     ) -> DispatchResult {
-        if let NFTStatus::Owned(owned_nft) = &self.nft_status {
+        if let Some(owned_nft) = &self.nft_status {
             ensure!(owned_nft.is_owner(owner), Error::<T>::DoesNotOwnNFT);
         }
         Ok(())
@@ -281,7 +277,7 @@ impl<
     pub fn is_nft_auction_started(&self) -> bool {
         matches!(
             self.nft_status,
-            NFTStatus::Owned(OwnedNFT {
+            Some(OwnedNFT {
                 transactional_status: TransactionalStatus::Auction(..),
                 ..
             })
@@ -292,7 +288,7 @@ impl<
     pub fn ensure_nft_auction_state<T: Trait>(
         &self,
     ) -> Result<AuctionRecord<BlockNumber, Balance, MemberId>, Error<T>> {
-        if let NFTStatus::Owned(OwnedNFT {
+        if let Some(OwnedNFT {
             transactional_status: TransactionalStatus::Auction(auction),
             ..
         }) = &self.nft_status
@@ -305,7 +301,7 @@ impl<
 
     /// Get nft auction record
     pub fn get_nft_auction(&self) -> Option<AuctionRecord<BlockNumber, Balance, MemberId>> {
-        if let NFTStatus::Owned(OwnedNFT {
+        if let Some(OwnedNFT {
             transactional_status: TransactionalStatus::Auction(ref auction),
             ..
         }) = self.nft_status
@@ -318,7 +314,7 @@ impl<
 
     /// Get nft auction record by reference
     pub fn get_nft_auction_ref(&self) -> Option<&AuctionRecord<BlockNumber, Balance, MemberId>> {
-        if let NFTStatus::Owned(OwnedNFT {
+        if let Some(OwnedNFT {
             transactional_status: TransactionalStatus::Auction(ref auction),
             ..
         }) = self.nft_status
@@ -333,7 +329,7 @@ impl<
     pub fn get_nft_auction_ref_mut(
         &mut self,
     ) -> Option<&mut AuctionRecord<BlockNumber, Balance, MemberId>> {
-        if let NFTStatus::Owned(OwnedNFT {
+        if let Some(OwnedNFT {
             transactional_status: TransactionalStatus::Auction(ref mut auction),
             ..
         }) = self.nft_status
@@ -348,7 +344,7 @@ impl<
     pub fn ensure_nft_transactional_status_is_idle<T: Trait>(&self) -> DispatchResult {
         let is_idle = matches!(
             self.nft_status,
-            NFTStatus::Owned(OwnedNFT {
+            Some(OwnedNFT {
                 transactional_status: TransactionalStatus::Idle,
                 ..
             })
@@ -359,7 +355,7 @@ impl<
 
     /// Sets nft transactional status to `BuyNow`
     pub fn set_buy_now_transactionl_status(mut self, buy_now_price: Balance) -> Self {
-        if let NFTStatus::Owned(owned_nft) = &mut self.nft_status {
+        if let Some(owned_nft) = &mut self.nft_status {
             owned_nft.transactional_status = TransactionalStatus::BuyNow(buy_now_price);
         }
         self
@@ -370,7 +366,7 @@ impl<
         mut self,
         auction: AuctionRecord<BlockNumber, Balance, MemberId>,
     ) -> Self {
-        if let NFTStatus::Owned(owned_nft) = &mut self.nft_status {
+        if let Some(owned_nft) = &mut self.nft_status {
             owned_nft.transactional_status = TransactionalStatus::Auction(auction);
         }
         self
@@ -378,7 +374,7 @@ impl<
 
     /// Set nft transactional status to `Idle`
     pub fn set_idle_transactional_status(mut self) -> Self {
-        if let NFTStatus::Owned(owned_nft) = &mut self.nft_status {
+        if let Some(owned_nft) = &mut self.nft_status {
             owned_nft.transactional_status = TransactionalStatus::Idle;
         }
         self
@@ -390,7 +386,7 @@ impl<
         to: MemberId,
         balance: Option<Balance>,
     ) -> Self {
-        if let NFTStatus::Owned(owned_nft) = &mut self.nft_status {
+        if let Some(owned_nft) = &mut self.nft_status {
             owned_nft.transactional_status =
                 TransactionalStatus::InitiatedOfferToMember(to, balance);
         }
@@ -401,7 +397,7 @@ impl<
     pub fn is_pending_offer_transactional_status(&self) -> bool {
         matches!(
             self.nft_status,
-            NFTStatus::Owned(OwnedNFT {
+            Some(OwnedNFT {
                 transactional_status: TransactionalStatus::InitiatedOfferToMember(..),
                 ..
             })