Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions contracts/common_types/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,7 @@ pub enum UserRole {
pub enum MembershipStatus {
/// Active membership
Active,
Paused,
/// Expired membership
Expired,
/// Revoked membership
Expand Down Expand Up @@ -507,11 +508,13 @@ mod tests {
#[test]
fn test_membership_status_variants() {
let active = MembershipStatus::Active;
let paused = MembershipStatus::Paused;
let expired = MembershipStatus::Expired;
let revoked = MembershipStatus::Revoked;
let inactive = MembershipStatus::Inactive;

assert_eq!(active, MembershipStatus::Active);
assert_eq!(paused, MembershipStatus::Paused);
assert_eq!(expired, MembershipStatus::Expired);
assert_eq!(revoked, MembershipStatus::Revoked);
assert_eq!(inactive, MembershipStatus::Inactive);
Expand Down
46 changes: 24 additions & 22 deletions contracts/manage_hub/src/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,26 +25,28 @@ pub enum Error {
MetadataTextValueTooLong = 20,
MetadataValidationFailed = 21,
InvalidMetadataVersion = 22,
// Tier management errors (30-50)
TierNotFound = 30,
TierAlreadyExists = 31,
TierNotActive = 32,
InvalidTierPrice = 33,
InvalidTierLevel = 34,
TierHasActiveSubscriptions = 35,
InvalidTierChange = 36,
TierChangeNotFound = 37,
TierChangeAlreadyProcessed = 38,
CannotDowngradeToHigherTier = 39,
CannotUpgradeToLowerTier = 40,
PromoCodeInvalid = 41,
PromoCodeExpired = 42,
PromoCodeMaxRedemptions = 43,
PromotionNotFound = 44,
PromotionAlreadyExists = 45,
InvalidDiscountPercent = 46,
InvalidPromoDateRange = 47,
FeatureNotAvailable = 48,
UserLimitExceeded = 49,
StorageLimitExceeded = 50,
// Pause/Resume related errors
InvalidPauseConfig = 23,
SubscriptionPaused = 24,
SubscriptionNotActive = 25,
PauseCountExceeded = 26,
PauseTooEarly = 27,
SubscriptionNotPaused = 28,
// Tier and feature related errors
TierNotFound = 29,
FeatureNotAvailable = 30,
// Tier change related errors
TierChangeAlreadyProcessed = 31,
InvalidDiscountPercent = 32,
InvalidPromoDateRange = 33,
PromotionAlreadyExists = 34,
PromotionNotFound = 35,
PromoCodeExpired = 36,
PromoCodeMaxRedemptions = 37,
PromoCodeInvalid = 38,
// Tier management errors
InvalidTierPrice = 39,
TierAlreadyExists = 40,
TierNotActive = 41,
TierChangeNotFound = 42,
}
43 changes: 40 additions & 3 deletions contracts/manage_hub/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ use errors::Error;
use membership_token::{MembershipToken, MembershipTokenContract};
use subscription::SubscriptionContract;
use types::{
AttendanceAction, BillingCycle, CreatePromotionParams, CreateTierParams, Subscription,
SubscriptionTier, TierAnalytics, TierFeature, TierPromotion, UpdateTierParams,
UserSubscriptionInfo,
AttendanceAction, BillingCycle, CreatePromotionParams, CreateTierParams, PauseConfig,
PauseHistoryEntry, PauseStats, Subscription, SubscriptionTier, TierAnalytics, TierFeature,
TierPromotion, UpdateTierParams, UserSubscriptionInfo,
};

#[contract]
Expand Down Expand Up @@ -98,6 +98,43 @@ impl Contract {
SubscriptionContract::cancel_subscription(env, id)
}

pub fn pause_subscription(env: Env, id: String, reason: Option<String>) -> Result<(), Error> {
SubscriptionContract::pause_subscription(env, id, reason)
}

pub fn resume_subscription(env: Env, id: String) -> Result<(), Error> {
SubscriptionContract::resume_subscription(env, id)
}

pub fn pause_subscription_admin(
env: Env,
id: String,
admin: Address,
reason: Option<String>,
) -> Result<(), Error> {
SubscriptionContract::pause_subscription_admin(env, id, admin, reason)
}

pub fn resume_subscription_admin(env: Env, id: String, admin: Address) -> Result<(), Error> {
SubscriptionContract::resume_subscription_admin(env, id, admin)
}

pub fn set_pause_config(env: Env, admin: Address, config: PauseConfig) -> Result<(), Error> {
SubscriptionContract::set_pause_config(env, admin, config)
}

pub fn get_pause_config(env: Env) -> PauseConfig {
SubscriptionContract::get_pause_config(env)
}

pub fn get_pause_history(env: Env, id: String) -> Result<Vec<PauseHistoryEntry>, Error> {
SubscriptionContract::get_pause_history(env, id)
}

pub fn get_pause_stats(env: Env, id: String) -> Result<PauseStats, Error> {
SubscriptionContract::get_pause_stats(env, id)
}

pub fn set_usdc_contract(env: Env, admin: Address, usdc_address: Address) -> Result<(), Error> {
SubscriptionContract::set_usdc_contract(env, admin, usdc_address)
}
Expand Down
Loading