
    h"'                        S SK JrJrJrJrJr  S SKJr  S SKJ	r	J
r
Jr  S SKJr  SSKJrJrJrJrJrJr  SSKJr  SSKJr  SS	KJr  S S
KrS S
KrS SKJr  \" 5         \" 5       r \ RC                  S\S9\" \RD                  5      4S\S\RF                  4S jj5       r$\ RK                  S\	\   S9\" \RD                  5      4S\RF                  4S jj5       r&\ RK                  S\S9\" \RD                  5      4S\'S\RF                  4S jj5       r(\ RC                  S\)S9\" \RD                  5      \" \5      4S\S\RF                  S\4S jj5       r*\ RC                  S\)S9\" \RD                  5      \" \5      4S\S\RF                  S\4S jj5       r+\ RC                  S\S9\" \RD                  5      \" \5      4S\'S\RF                  S\4S jj5       r,\ RK                  S\	\   S9\" \RD                  5      4S\RF                  4S jj5       r-\ RK                  S\
\'\\	\   \.4   4   S9\" \RD                  5      \" \5      4S\RF                  S\4S  jj5       r/\ RC                  S!5      \" \RD                  5      4S"\S#\S\RF                  4S$ jj5       r0\ RC                  S%5      S"\4S& j5       r1\ RC                  S'5      \" \RD                  5      4S"\S\RF                  4S( jj5       r2\ RC                  S)\S9\" \RD                  5      4S\S\RF                  4S* jj5       r3\ RK                  S+\S9\" \RD                  5      4S,\'S\RF                  4S- jj5       r4\ Rk                  S+\S9\" \RD                  5      4S,\'S\S\RF                  4S. jj5       r6\ Ro                  S+\)S9\" \RD                  5      4S,\'S\RF                  4S/ jj5       r8g
)0    )	APIRouterHTTPExceptionDependsRequestBackgroundTasks)JSONResponse)ListDictUnion)database   )SubscriptionTypeCreateSubscriptionTypeSubscriptionCreateSubscriptionPaymentSubscriptionUpdate)User)get_current_userdetails)subscriptionsN)load_dotenvz/subscription-types/)response_modelsubscription_typedbc                    #    [        S5         [        R                  " X5      I S h  vN $  N! [         a  n[	        S[        U5      S9eS nAff = f7f)Nz6subscription-typessubscription-typessubscription-types  status_codedetail)printsaas_service create_subscription_type_service	Exceptionr   strr   r   es      OC:\Suresh\moveshuttle\MDcreated\moveengine\app\v1\routers\saas\subscriptions.pycreate_subscription_typer(      sM     
 

BC<!BBCTYYYY <CF;;<0   A/ -/ A/ 
AAAAc                    #    [        S5         [        R                  " U 5      I S h  vN $  N! [         a  n[	        S[        U5      S9eS nAff = f7f)Nz>GET GET subscription-typessubscription-typessubscription-typesr   r   )r    r!   list_subscription_types_servicer#   r   r$   r   r&   s     r'   list_subscription_typesr-   !   sL      

JK<!AA"EEEE <CF;;<r)   z/subscription/{subscription_id}subscription_idc                    #    [        S5         [        R                  " X5      I S h  vN $  N! [         a  n[	        S[        U5      S9eS nAff = f7f)NUsubscriptionsubscriptionsubscriptionsubscription4848484848484848484999999999999999999  r   )r    r!   get_subscription_servicer#   r   r$   )r.   r   r&   s      r'   get_subscriptionr3   ,   sL     
 

ab<!::?OOOO <CF;;<r)   z
/subscribesubscriptioncurrent_userc                    #    [        S5         [        R                  " XU5      I S h  vN $  N! [         a  n[	        S[        U5      S9eS nAff = f7f)N-subscribesubscribesubscribe606292626262626262r   r   )r    r!   create_subscription_servicer#   r   r$   r4   r   r5   r&   s       r'   create_subscriptionr:   8   sO      

9:<!==lP\]]]] <CF;;<0   A0 .0 A0 
AAAAz/update/c                    #    [        S5         [        R                  " XU5      I S h  vN $  N! [         a  n[	        S[        U5      S9eS nAff = f7f)N)updateupdateupdateupdate75757575757575757r   r   )r    r!   update_subscription_servicer#   r   r$   r9   s       r'   update_subscriptionr?   E   sO      

56<!==lP\]]]] <CF;;<r;   z&/cancel_subscription/{subscription_id}c                    #    [        S5         [        R                  " XU5      I S h  vN $  N! [         a  n[	        S[        U5      S9eS nAff = f7f)N[cancel_subscriptioncancel_subscriptioncancel_subscriptioncancel_subscription888888888888888r1   r   )r    r!   cancel_subscription_servicer#   r   r$   )r.   r   r5   r&   s       r'   cancel_subscriptionrC   R   sO      

gh<!==oS_```` <CF;;<r;   z/subscriptions/c                    #    [        S5         [        R                  " U 5      I S h  vN $  N! [         a  n[	        S[        U5      S9eS nAff = f7f)Nz(subscriptions 99999999999999999999999999r   r   )r    r!   list_subscriptions_servicer#   r   r$   r,   s     r'   list_subscriptionsrF   _   sL      

45<!<<R@@@@ <CF;;<r)   z
/payments/c                    #    [        S5         [        R                  " X5      I S h  vN $  N! [         a  n[	        S[        U5      S9eS nAff = f7f)NzDpaymentspaymentspaymentspaymentspaymentspayments 1111111111111111111i  r   )r    r!   list_payments_servicer#   r   r$   )r   r5   r&   s      r'   list_paymentsrI   j   sL     
 

PQ<!77IIII <CF;;<r)   z/stripe-webhook/requestbackground_tasksc                    #    [        S5         U R                  5       I S h  vN n[        SUR                  5       5         [        R                  " U 5      I S h  vN n[        SUS    35        [        R                  " XU5      I S h  vN   [        S	S
05      $  Nz NC! [
         a  n[        SU5        [        SSS9eS nAff = f N=! [
         a6  nSS K	n[        SUR                  5       5        [        S[        U5      S9eS nAff = f7f)Nz'stripe-webhook 137137137137137137137137u%   🔔 Incoming Stripe Webhook Payload:u"   ❌ Signature verification failed:  zInvalid Stripe signaturer   u   ✅ Stripe event received: typestatussuccessr   u"   🔥 Exception in webhook handler:r   )r    bodydecoder!   verify_stripe_signaturer#   r   stripe_webhook_servicer   	traceback
format_excr$   )rJ   rK   r   raw_bodyeventsig_errr&   rU   s           r'   stripe_webhookrZ      s     

34< '5x7HI	T&>>wGGE
 	+E&M?;< 11'RPPPXy122 (
 H 	T6@C8RSS	T 	Q  <2I4H4H4JKCF;;<sz   DC BC B! BB!  +C C	C DC B! !
C+CCC 
D1DDDz/stripe/verifyc                 (  #    [        S5        U R                  5       I S h  vN nUR                  S5      nU(       d
  [        SSS9e [        R
                  " U5      I S h  vN nU$  NG N! [         a  n[        S[        U5      S9eS nAff = f7f)NzAstripe-verifyverifyverifyverify 166166166166166166166166166166166
session_idrM   zSession ID is requiredr   r   )r    jsongetr   r!   verify_payment_servicer#   r$   )rJ   rQ   r\   resultr&   s        r'   verify_paymentra      s     	
MND,'J4LMM<#:::FF  
 G <CF;;<E   BA)&B	A- "A+#A- (B+A- -
B7B

BBz/stripe/portal/c                 (  #    [        S5        U R                  5       I S h  vN nUR                  S5      nU(       d
  [        SSS9e [        R
                  " X15      I S h  vN nU$  NG N! [         a  n[        S[        U5      S9eS nAff = f7f)Nz8stripe-portalportalportalportalportal 783783783183183183r.   rM   zSubscription ID is required.r   r   )r    r]   r^   r   r!   create_portal_session_servicer#   r$   )rJ   r   rQ   r.   r`   r&   s         r'   create_portal_sessionre      s     
 

DEDhh01O4RSS<#AA/VV  
 W <CF;;<rb   z/subscription-types/createc                    #    [        S5          [        R                  " X5      I S h  vN $  N! [         a  n[	        SSU 3S9eS nAff = f7f)Nz7stripe-typescreatecreatecreate 200200200200200200200200r   z$Failed to create subscription type: r   )r    r!   r"   r#   r   r%   s      r'   +create_subscription_type_static_status_truerg      s[     
 

CD`!BBCTYYYY `6Z[\Z]4^__`s0   A0 .0 A0 
AAAAz*/subscription-types/{subscription_type_id}subscription_type_idc                    #    [        S5         [        R                  " X5      I S h  vN $  N! [         a  n[	        S[        U5      S9eS nAff = f7f)Nz@stripe-typescreatecreatecreate 215215215215215215215215215215215r1   r   )r    r!   get_subscription_type_servicer#   r   r$   )rh   r   r&   s      r'   get_subscription_typerk      sM     
 

LM<!??@TYYYY <CF;;<r)   c                    #    [        S5         [        R                  " XU5      I S h  vN $  N! [         a  n[	        S[        U5      S9eS nAff = f7f)Nz@stripe-typescreatecreatecreate 227227227227227227227227227227227r   r   )r    r!    update_subscription_type_servicer#   r   r$   )rh   r   r   r&   s       r'   update_subscription_typern      sP      

LM<!BBCWlnoooo <CF;;<r;   c                    #    [        S5         [        R                  " X5      I S h  vN nU(       d
  [        SSS9eSS0$  N! [         a  n[        S[        U5      S9eS nAff = f7f)Nz=stripe-typescreatecreatecreate 238238238238238238238238238238r1   zSubscription type not found.r   messagez'Subscription type deleted successfully.r   )r    r!    delete_subscription_type_servicer   r#   r$   )rh   r   rP   r&   s       r'   delete_subscription_typerr      sn     
 

IJ<$EEFZ__C8VWWDEE `  <CF;;<s8   A)A AA A)A 
A&A!!A&&A))9fastapir   r   r   r   r   fastapi.responsesr   typingr	   r
   r   app.dbr   models.saas.subscriptionsr   r   r   r   r   r   models.saas.usersmodelr   dependencies.authr   services.saasr   r!   stripeosdotenvr   routerpostget_mongo_dbMongoDBr(   r^   r-   r$   r3   dictr:   r?   rC   rF   intrI   rZ   ra   re   rg   rk   putrn   deleterr        r'   <module>r      s   O O * $ $   + 8 :  	  	 #4DE #8#8#89<-<< F< "48H3IJ"8#8#89<< K< -lK #8#8#89<<< L< \$/ #8#8#89 !89	<$	<	< 	< 0	< Z- #8#8#89 !89	<$	<	< 	< .	< 5lS #8#8#89 !89	<	<	< 	< T	< d<.@A"8#8#89<< B< Lc5g9K3L.L)MN"8#8#89 !89<<< O<0   #8#8#89<<%< 	< !<@ 
<' 
< 
<  #8#8#89<<<  <  ):JK #8#8#89`-`` L` 8IYZ #8#8#89<<< [< 8IYZ #8#8#89	<	<-	< 		< [	< ;DQ #8#8#89<<< R<r   