
    ^Kj                     X    d dl m Z mZ d dlmZ d dlmZ d dlmZ d dlm	Z	  G d d      Z
y)	    )datetime	timedelta)UserSubscriptionRepository)SubscriptionRepository)UserRepository)UserSubscriptionModelc                   R    e Zd Zd ZdefdZdedefdZdefdZdefdZ	defd	Z
y
)UserSubscriptionServicec                 ^    t               | _        t               | _        t	               | _        y N)r   subscription_repor   	plan_repor   	user_repo)selfs    R/var/www/html/photoedit/app/modules/user_subscription/user_subscription_service.py__init__z UserSubscriptionService.__init__   s!    !;!=/1')    duration_daysc                 D    t        j                         t        |      z   S )z~
        Plan duration ke according expiry date calculate karega.
        Example:
        30 days -> Today + 30 Days
        )days)r   utcnowr   )r   r   s     r   calculate_end_datez*UserSubscriptionService.calculate_end_date   s      9-#@@@r   user_idplan_idc                 x  K   | j                   j                  |       d {   }|st        d      | j                  j	                  |       d {   }|st        d      | j
                  j                  |       d {   }|rK|d   t        j                         kD  rt        d      | j
                  j                  |d          d {    t        j                         }| j                  |d         }t        ||||      }| j
                  j                  |       d {   }	|	S 7 7 7 7 g7 w)NzUser not foundzSubscription plan not foundend_datez(User already has an active subscription._idr   )r   r   
start_dater   )r   
find_by_id	Exceptionr   get_plan_by_idr   get_active_subscriptionr   r   expire_subscriptionr   r   create_subscription)
r   r   r   userplanactive_subscriptionr   r   subscriptionresults
             r   activate_subscriptionz-UserSubscriptionService.activate_subscription   sM     ^^..w77,-- ^^227;;9:: %)$:$:$R$R%
 
  #:.1BB> 
 ((<<#E*   __&
**!

 -!	
 --AA
 
 a 8 <
&
sY   D:D//D:D2/D:D4AD:D6AD:(D8)D:2D:4D:6D:8D:c                    K   | j                   j                  |       d {   }|sy |d   t        j                         k  r'| j                   j	                  |d          d {    y |S 7 J7 	w)Nr   r   )r   r"   r   r   r#   r   r   r(   s      r   r"   z/UserSubscriptionService.get_active_subscriptionV   s     
 "33KK
 
  
#x'88((<<U#   !
s"   A0A,AA0$A.%A0.A0c                 H   K   | j                  |       d {   }|d uS 7 wr   )r"   r,   s      r   
is_premiumz"UserSubscriptionService.is_premiumm   s2     
 "99
 
 4''	
s   " 	"c                 \   K   | j                   j                  |       d {   }|d uS 7 wr   )r   get_valid_subscriptionr,   s      r   has_active_subscriptionz/UserSubscriptionService.has_active_subscriptiony   s8     
 "33JJ
 
 4''	
s   ,*	,N)__name__
__module____qualname__r   intr   strr*   r"   r.   r1    r   r   r
   r
      sT    *
A A66 6p.	(	(	(	(r   r
   N)r   r   :app.modules.user_subscription.user_subscription_repositoryr   0app.modules.subscription.subscription_repositoryr    app.modules.user.user_repositoryr   5app.modules.user_subscription.user_subscription_modelr   r
   r7   r   r   <module>r<      s(    ( <
s( s(r   