
    h              
          d dl mZmZmZ d dlmZ d dlmZmZ 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  ed	d
g      Z G d de      Z G d de      Z G d de      Z G d de      Zej1                  de	e          ee       ee      fdedefd       Zej5                  de       ee       ee      fdededefd       Zej1                  de       ee       ee      fdededefd       Zej5                  d       ee       ee      fdededefd       Zej5                  d        ee       ee      fdededefd!       Zej5                  d"       ee       ee      fded#ededefd$       Z y%)&    )	APIRouterDependsHTTPException)Session)datetime	timedelta)ListOptional)get_db)User)get_current_user)	BaseModelz/ab-testingz
ab-testing)prefixtagsc                   @    e Zd ZU eed<   eed<   eed<   eed<   eed<   y)ABTestVariantidnamecontenttraffic_percentagemetricsN)__name__
__module____qualname__int__annotations__strdict     ,/var/www/notifications/app/api/ab_testing.pyr   r      s    G
ILMr    r   c                   v    e Zd ZU eed<   eed<   eed<   ee   ed<   ee	   ed<   ee	   ed<   ee   ed<   e	ed<   y	)
ABTestr   r   statusvariants
start_dateend_datewinner_variant_id
created_atN)
r   r   r   r   r   r   r	   r   r
   r   r   r    r!   r#   r#      sB    G
IK=!!""x  }$r    r#   c                   2    e Zd ZU eed<   eed<   ee   ed<   y)ABTestCreater   template_idr%   N)r   r   r   r   r   r   r	   r   r   r    r!   r+   r+       s    
I4jr    r+   c                   ,    e Zd ZU eed<    G d d      Zy)	ABTestOut	tenant_idc                       e Zd ZdZy)ABTestOut.ConfigTN)r   r   r   from_attributesr   r    r!   Configr1   )   s    r    r3   N)r   r   r   r   r   r3   r   r    r!   r.   r.   &   s    N r    r.    )response_modelcurrent_userdbc                 H   t        d| j                  ddt        ddddddd	d
      t        dddddddd
      gt        j                         t        d      z
  t        j                         t        d      z
  dt        j                         t        d      z
  	      t        d| j                  ddt        dddddddd
      t        ddddddd d
      gt        j                         t        d      z
  d!d!t        j                         t        d      z
  	      gS )"z!List all A/B tests for the tenant   zWelcome Email Test	completedzVersion A (Original)zWelcome to our service!2   i  i     sentopenedclickedr   r   r   r   r      zVersion B (New)z&Welcome! Get 20% off your first order.i        days	r   r/   r   r$   r%   r&   r'   r(   r)   zOrder Confirmation Testrunning   StandardzYour order has been confirmed.i  i,  <      zWith Trackingz4Your order #12345 has been confirmed. Track it here.i@  P   Nr.   r/   r   r   utcnowr   )r6   r7   s     r!   list_ab_testsrP   -   s;    	",,%/5')%)SSI *D')%)SSI   (9!+<<__&)::(9!+<<1	
4 	",,*#<')%(CBG (R')%(CBG   (9!+<<"(9!+<<1	
75 5r    	test_datac                    t        d|j                  | j                  d| j                  D cg c]2  }t	        d|d   |d   dt        | j                        z  dddd	      4 c}d
d
d
t        j                         	      S c c}w )zCreate a new A/B testrI   draft   r   r   d   r   r=   rA   NrG   )r.   r/   r   r%   r   lenr   rO   )rQ   r6   r7   variants       r!   create_ab_testrX   l   s     ((^^ %--	
  V_	*#&#i.@.@*A#A!"aA>	
 ??$% 
	
s   7Bz
/{test_id}test_idc                    t        | |j                  ddt        ddddddd	d
      t        dddddddd
      gt        j                         t        d      z
  ddt        j                         t        d      z
  	      S )zGet specific A/B test detailsz
Test EmailrH   r9   z	Version AzTest content Ar;   rU   rK      r=   rA   rB   z	Version BzTest content BF      rE   NrG   rN   rY   r6   r7   s      r!   get_ab_testr_      s     (( (#%!$rB  (#%!$rB
  ??$ya'88??$ya'881 r    z/{test_id}/startc                     d|  dddS )zStart an A/B test	A/B test z started successfullysuccessmessager$   r   r^   s      r!   start_ab_testre           #7)+@AYWWr    z/{test_id}/stopc                     d|  dddS )zStop an A/B testra   z stopped successfullyrb   rc   r   r^   s      r!   stop_ab_testrh      rf   r    z/{test_id}/declare-winner
variant_idc                     d| d|  ddS )z!Declare a winner for the A/B testzVariant z declared as winner for test rb   rc   r   )rY   ri   r6   r7   s       r!   declare_winnerrk      s"     j\)FwiP r    N)!fastapir   r   r   sqlalchemy.ormr   r   r   typingr	   r
   app.db.sessionr   app.db.modelsr   app.api.depsr   pydanticr   routerr   r#   r+   r.   getrP   postrX   r   r_   re   rh   rk   r   r    r!   <module>rv      s1   5 5 " ( ! !  ) 	-|n	=I Y 9   BtI/ !12&/;;; 0;| R	* !!12&/ 	 +: L3 !!12&/    	  4 F   !!12&/XXX 	X !X  !!12&/XXX 	X  X () !!12&/	


 
 		
 *
r    