@@ -1884,6 +1884,8 @@ class S3Storage(BaseModel):
18841884REASON_PAUSED = "subscriptionPaused"
18851885REASON_CANCELED = "subscriptionCanceled"
18861886
1887+ SubscriptionEventType = Literal ["create" , "import" , "update" , "cancel" , "add-minutes" ]
1888+
18871889
18881890# ============================================================================
18891891class OrgQuotas (BaseModel ):
@@ -1936,6 +1938,7 @@ class SubscriptionEventOut(BaseModel):
19361938
19371939 oid : UUID
19381940 timestamp : datetime
1941+ type : SubscriptionEventType
19391942
19401943
19411944# ============================================================================
@@ -2001,18 +2004,54 @@ class SubscriptionCancel(BaseModel):
20012004
20022005
20032006# ============================================================================
2004- class SubscriptionTrialEndReminder ( BaseModel ):
2005- """Email reminder that subscription will end soon """
2007+ class SubscriptionCancelOut ( SubscriptionCancel , SubscriptionEventOut ):
2008+ """Output model for subscription cancellation event """
20062009
2007- subId : str
2008- behavior_on_trial_end : Literal ["cancel" , "continue" , "read-only" ]
2010+ type : Literal ["cancel" ] = "cancel"
20092011
20102012
20112013# ============================================================================
2012- class SubscriptionCancelOut (SubscriptionCancel , SubscriptionEventOut ):
2013- """Output model for subscription cancellation event"""
2014+ class SubscriptionAddMinutes (BaseModel ):
2015+ """Represents a purchase of additional minutes"""
2016+
2017+ oid : UUID
2018+ minutes : int
2019+ totalPrice : float
2020+ currency : str
2021+ paymentId : str
20142022
2015- type : Literal ["cancel" ] = "cancel"
2023+
2024+ # ============================================================================
2025+ class SubscriptionAddMinutesOut (SubscriptionAddMinutes , SubscriptionEventOut ):
2026+ """SubscriptionAddMinutes output model"""
2027+
2028+ type : Literal ["add-minutes" ] = "add-minutes"
2029+
2030+
2031+ # ============================================================================
2032+ SubscriptionEventAny = Union [
2033+ SubscriptionCreate ,
2034+ SubscriptionUpdate ,
2035+ SubscriptionCancel ,
2036+ SubscriptionImport ,
2037+ SubscriptionAddMinutes ,
2038+ ]
2039+
2040+ SubscriptionEventAnyOut = Union [
2041+ SubscriptionCreateOut ,
2042+ SubscriptionUpdateOut ,
2043+ SubscriptionCancelOut ,
2044+ SubscriptionImportOut ,
2045+ SubscriptionAddMinutesOut ,
2046+ ]
2047+
2048+
2049+ # ============================================================================
2050+ class SubscriptionTrialEndReminder (BaseModel ):
2051+ """Email reminder that subscription will end soon"""
2052+
2053+ subId : str
2054+ behavior_on_trial_end : Literal ["cancel" , "continue" , "read-only" ]
20162055
20172056
20182057# ============================================================================
@@ -2035,6 +2074,30 @@ class SubscriptionPortalUrlResponse(BaseModel):
20352074 portalUrl : str = ""
20362075
20372076
2077+ # ============================================================================
2078+ class AddonMinutesPricing (BaseModel ):
2079+ """Addon minutes pricing"""
2080+
2081+ value : float
2082+ currency : str
2083+
2084+
2085+ # ============================================================================
2086+ class CheckoutAddonMinutesRequest (BaseModel ):
2087+ """Request for additional minutes checkout session"""
2088+
2089+ orgId : str
2090+ subId : str
2091+ minutes : int | None = None
2092+ return_url : str
2093+
2094+
2095+ class CheckoutAddonMinutesResponse (BaseModel ):
2096+ """Response for additional minutes checkout session"""
2097+
2098+ checkoutUrl : str
2099+
2100+
20382101# ============================================================================
20392102class Subscription (BaseModel ):
20402103 """subscription data"""
@@ -2113,6 +2176,15 @@ class OrgQuotaUpdate(BaseModel):
21132176
21142177 modified : datetime
21152178 update : OrgQuotas
2179+ subEventId : str | None = None
2180+
2181+
2182+ # ============================================================================
2183+ class OrgQuotaUpdateOut (BaseModel ):
2184+ """Organization quota update output for admins"""
2185+
2186+ modified : datetime
2187+ update : OrgQuotas
21162188
21172189
21182190# ============================================================================
@@ -2189,7 +2261,7 @@ class OrgOut(BaseMongoModel):
21892261 giftedExecSecondsAvailable : int = 0
21902262
21912263 quotas : OrgQuotas = OrgQuotas ()
2192- quotaUpdates : Optional [List [OrgQuotaUpdate ]] = []
2264+ quotaUpdates : Optional [List [OrgQuotaUpdateOut ]] = []
21932265
21942266 webhookUrls : Optional [OrgWebhookUrls ] = OrgWebhookUrls ()
21952267
@@ -3154,14 +3226,7 @@ class PaginatedProfileResponse(PaginatedResponse):
31543226class PaginatedSubscriptionEventResponse (PaginatedResponse ):
31553227 """Response model for paginated subscription events"""
31563228
3157- items : List [
3158- Union [
3159- SubscriptionCreateOut ,
3160- SubscriptionUpdateOut ,
3161- SubscriptionCancelOut ,
3162- SubscriptionImportOut ,
3163- ]
3164- ]
3229+ items : List [SubscriptionEventAnyOut ]
31653230
31663231
31673232# ============================================================================
0 commit comments