diff --git a/pallets/afloat/src/functions.rs b/pallets/afloat/src/functions.rs index c00078b8..10b75e2a 100644 --- a/pallets/afloat/src/functions.rs +++ b/pallets/afloat/src/functions.rs @@ -859,11 +859,14 @@ impl Pallet { Ok(()) } - pub fn do_cancel_offer(order_id: StorageId) -> DispatchResult { + pub fn do_cancel_offer(who: T::AccountId, order_id: StorageId) -> DispatchResult { // ensure offer exists ensure!(>::contains_key(order_id), Error::::OfferNotFound); //get offer details let offer = >::get(order_id).unwrap(); + let is_admin_or_owner = Self::is_admin_or_owner(who.clone())?; + ensure!(is_admin_or_owner || offer.creator_id == who, Error::::Unauthorized); + match offer.status { OfferStatus::CREATED => { >::try_mutate(order_id, |offer| -> DispatchResult { diff --git a/pallets/afloat/src/lib.rs b/pallets/afloat/src/lib.rs index ea5b0427..d1cb4cf7 100644 --- a/pallets/afloat/src/lib.rs +++ b/pallets/afloat/src/lib.rs @@ -255,11 +255,40 @@ pub mod pallet { #[pallet::call_index(1)] #[pallet::weight(Weight::from_parts(10_000,0) + T::DbWeight::get().reads_writes(1,1))] - pub fn kill_storage(origin: OriginFor) -> DispatchResult { + pub fn kill_storage(origin: OriginFor, args: KillStorageArgs) -> DispatchResult { // ensure sudo origin T::RemoveOrigin::ensure_origin(origin.clone())?; - Self::do_delete_all_users()?; - Ok(()) + match args { + KillStorageArgs::All => { + Self::do_delete_all_users()?; + >::kill(); + >::kill(); + >::kill(); + let _ = >::clear(1000, None); + let _ = >::clear(1000, None); + }, + KillStorageArgs::UserInfo => { + Self::do_delete_all_users()?; + } + KillStorageArgs::AfloatMarketPlaceId => { + >::kill(); + }, + KillStorageArgs::AfloatCollectionId => { + >::kill(); + }, + KillStorageArgs::AfloatAssetId => { + >::kill(); + }, + KillStorageArgs::AfloatOffers => { + let _ = >::clear(1000, None); + }, + KillStorageArgs::AfloatTransactions => { + let _ = >::clear(1000, None); + }, + + } + + Ok(()) } #[pallet::call_index(2)] @@ -404,9 +433,7 @@ pub mod pallet { #[pallet::weight(Weight::from_parts(10_000,0) + T::DbWeight::get().reads_writes(1,1))] pub fn cancel_offer(origin: OriginFor, order_id: StorageId) -> DispatchResult { let who = ensure_signed(origin.clone())?; - let is_admin_or_owner = Self::is_admin_or_owner(who.clone())?; - ensure!(is_admin_or_owner, Error::::Unauthorized); - Self::do_cancel_offer(order_id) + Self::do_cancel_offer(who, order_id) } } } diff --git a/pallets/afloat/src/types.rs b/pallets/afloat/src/types.rs index bafac000..a77fb3ab 100644 --- a/pallets/afloat/src/types.rs +++ b/pallets/afloat/src/types.rs @@ -161,6 +161,17 @@ pub enum CreateOfferArgs { }, } +#[derive(Encode, Decode, Clone, Eq, PartialEq, RuntimeDebugNoBound, TypeInfo)] +pub enum KillStorageArgs { + All, + UserInfo, + AfloatMarketPlaceId, + AfloatCollectionId, + AfloatAssetId, + AfloatOffers, + AfloatTransactions, +} + // ! Transaction structures #[derive(CloneNoBound, Encode, Decode, RuntimeDebugNoBound, TypeInfo, MaxEncodedLen, PartialEq)]