
    [h;1                        d dl mZmZmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZmZmZ d dlmZ d dl	m	Z	 d d	lZd d	lZd d
lmZ d dlmZ d dlmZ d d	lZd d	lZ ede          Z ede          Zd Zd Z e!                    ddg          d             Z"e!                    ddg          d             Z#e!                    ddg          d             Z$e!                    ddg          d             Z%e!                    ddg          d             Z&e!                    ddg          d             Z'e!                    d d!g          d"             Z(e!                    d#dg          d$             Z)e!                    d%dg          d&             Z*e!                    d'dg          d(             Z+e!                    d)d!g          d*             Z,e!                    d+dg          d,             Z-d	S )-    )	Blueprintrequestjsonifycurrent_app)Message)mail)	timedelta)check_password_hash)UserPlakSelectedPlak)db)datetimeN)MIMEText)Notification)CORSuserplakc                 <    | j                             dd           d S )NzAccess-Control-Allow-Origin*)headersadd)responses    =/var/www/api.easyaligner.net/htdocs/app/routes/user_routes.pyafter_requestr      s"    6<<<<<    c                 T   t          d|           }d|d<   d|d<   | |d<   	 t          j        d          5 }|                    |d         | g|                                           d d d            d S # 1 swxY w Y   d S # t
          $ r}t          d|           Y d }~d S d }~ww xY w)	NzYour verification code is: zEasyAligner Email VerificationSubjectzno-reply@easyaligner.comFromTo	localhostzEmail sending failed:)r   smtplibSMTPsendmail	as_string	Exceptionprint)to_emailcodemsgserveres        r   send_verification_emailr-      s"   
777
8
8C5C	N,CKCI*\+&& 	F&OOCK(S]]__EEE	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F 	F * * *%q)))))))))*s:   B 1A5(B 5A99B <A9=B 
B'B""B'z	/registerPOST)methodsc                     	 t          j                    g d} t          fd| D                       st          ddi          dfS t          j                            d                                                   rt          ddi          d	fS d }                    d
          ro	 t          j
        d
         d          }nR# t          $ rE 	 t          j
        d
         d          }n%# t          $ r t          ddi          dfcY cY S w xY wY nw xY wd         }t          |t                    r#|                                rt          |          }ddd}|                    |          }|s|dv r|}|st          ddi          dfS t          t!          j        dd                    }t	          d                                         d                                         d                                                             d                              d          ||                    d          |d
  
        }|                    d                    t(          j                            |           t(          j                                         	 t1          d|j        gd|j         d | d!"          }t7          j        |           n'# t:          $ r}t=          d#|           Y d }~nd }~ww xY wt          d$d%d&          d'fS # t:          $ r[}	d(d l}
t=          d)t          |	                     t=          d* |
j                                t          dd+i          d,fcY d }	~	S d }	~	ww xY w)-N)
first_name	last_nameemailpassword	user_typec              3   0   K   | ]}|v o|         V  d S )N ).0fielddatas     r   	<genexpr>zregister.<locals>.<genexpr>,   s0      NNU5D=0T%[NNNNNNr   r*   zMissing required fields  r3   r3   zEmail already existsi  birthday%Y-%m-%dz%d.%m.%Yz5Invalid birthday format. Use YYYY-MM-DD or DD.MM.YYYYr5   doctorpatient)      )r@   rA   z4Invalid user_type. Use 1, 2, 'doctor', or 'patient'.順 ?B r1   r2   phonecity_id
user_tokenF)
r1   r2   r3   rF   rG   r>   r5   rH   verification_codeis_verifiedr4   u#   EasyAligner E-posta Doğrulama KoduMerhaba u   ,

Doğrulama kodunuz: u   

Teşekkürler,
Pariwa Ekibisubject
recipientsbodyzEmail send error:zUser registered successfully.T)r*   
email_sent   r   u   ❌ Registration error:z
Traceback:z5An unexpected error occurred. Please try again later.  )!r   get_jsonallr   r   query	filter_byfirstgetr   strptime
ValueError
isinstancestrisdigitintrandomrandintstripset_passwordr   sessionr   commitr   r3   r1   r   sendr&   r'   	traceback
format_exc)required_fieldsr>   user_type_rawuser_type_mapuser_type_valuerI   r   r*   email_errorr,   rf   r:   s              @r   registerrm   &   sL   N!!WWWNNNNoNNNNN 	DE#<=>>CC:d7m44::<< 	AE#9:;;S@@ 88J 	jj#,T*-=zJJ j j jj'0j1A:NNHH! j j j"E+b#cddfiiiiiiij Hj [)mS)) 	/m.C.C.E.E 	/..M 
 
 (++M:: 	,=4I#I#I+O 	aE#YZ[[]```  vv > >??L)//11;'--//w-%%''((7##HHY''%xx--/
 
 
 	$z*+++

t

	4= J<}}}J[}}}  C
 IcNNNN 	4 	4 	4%{33333333	4 2
 
    	
    'Q000l0I022333J
   	 	 	 	 	 		s   AL A
L L +C L 
DC.-D.DDL DDL DA9L DL %8K L 
L(K=8L =LL 
M>#AM93M>9M>z/verifyc                     	 t          j                    } t          |            | st           j        } | st	          ddd          dfS |                     d          }|st	          ddd          dfS t          j                            |          	                                }|st	          ddd          dfS |j
        rt	          dd	d          dfS d
|_
        d |_        t          j                                         t	          ddd          dfS # t          $ r<}t          j                                         t	          ddd          dfcY d }~S d }~ww xY w)NerrorzNo data provided)statusr*   r<   r)   zVerification code is required)rI   zInvalid verification codezEmail already verifiedTsuccesszEmail verified successfully   z%An error occurred during verificationrR   )r   rS   r'   formr   rX   r   rU   rV   rW   rJ   rI   r   rc   rd   r&   rollback)r:   r)   r   r,   s       r   verify_emailru   z   s   "!!d 	 <D 	Pg6HIIJJCOOxx 	]g6UVVWWY\\\z##d#;;AACC 	Yg6QRRSSUXXX 	Vg6NOOPPRUUU!%

0
 
    	
    

:
 
    	 	 	 	 	 	s7   AD *D 3AD ;D ?D 
E 1EEEz/loginc                     t          j                    } |                     d          }|                     d          }|r|st          ddi          dfS t          j                            |                                          }|st          ddi          dfS |j        st          dd	i          d
fS t          |j
        |          st          ddi          dfS t          j        |j        t          j                    t!          d          z   dt"          j        d         d          }t          dd||j        |j        |j        |j        |j        |j        |j        dd          dfS )Nr3   r4   r*   z Email and password are required.r<   r=   zUser not found.  zPlease verify your email first.i  zIncorrect password.i     )hours)user_idexp
SECRET_KEYHS256)	algorithmrq   zLogin successful)idr1   r2   rF   r>   r3   r5   )rp   r*   tokenr   rr   )r   rS   rX   r   r   rU   rV   rW   rJ   r
   password_hashjwtencoder   r   utcnowr	   r   configr1   r2   rF   r>   r3   r5   )r:   r3   r4   r   r   s        r   loginr      s   DHHWExx
##H I IABCCSHH:e,,2244D 80122C77 H@ABBCGGt18<< <4566;; Jw?$$yr':':'::	
 	
 	<(  E !'/ZZ
 
	    	 r   z/users/<int:user_id>GETc                    t           j                            |           }|st          ddi          dfS t          |j        |j        |j        |j        |j        |j	        |j
        r|j
                            d          nd d          dfS )Nr*   User not foundrw   r?   r   r1   r2   r3   rF   rG   r>   rr   )r   rU   rX   r   r   r1   r2   r3   rF   rG   r>   strftime)rz   r   s     r   get_userr      s    :>>'""D 7/011366go^<:>-QDM**:666T    	 r   z/forgot-passwordc            	      V   t          j                    } |                     d          }t          j                            |                                          }|st          ddi          dfS t          t          j
        dd                    }||_        t          j                    t          d	          z   |_        t           j                                         t'          d
|j        gd|j         d| d          }t-          j        |           t          ddi          dfS )Nr3   r=   r*   r   rw   rD   rE   <   )minutesu   Şifre Sıfırlama KodurK   u   ,

Şifre sıfırlama kodunuz: u1   
Kod 10 dakika boyunca geçerlidir.

Pariwa EkibirL   zReset code sent to your email.rr   )r   rS   rX   r   rU   rV   rW   r   r\   r_   r`   
reset_coder   r   r	   reset_code_expirationr   rc   rd   r   r3   r1   r   re   )r:   r3   r   r   r*   s        r   forgot_passwordr      s*   DHHWE:e,,2244D 7/011366V^FF3344J DO!)!2!2Yr5J5J5J!JDJ
)J< K  K  K*  K  K  K  C
 	IcNNNE;<==sBBr   z/reset-passwordc                  P   t          j                    } |                     d          }|                     d          }|                     d          }t          j                            |                                          }|st          ddi          dfS |j        |k    st          j
                    |j        k    rt          ddi          d	fS |                    |           d |_        d |_        t          j                                         t          dd
i          dfS )Nr3   r)   new_passwordr=   r*   r   rw   zInvalid or expired reset coder<   zPassword reset successfulrr   )r   rS   rX   r   rU   rV   rW   r   r   r   r   r   rb   r   rc   rd   )r:   r3   r)   r   r   s        r   reset_passwordr      s   DHHWE88FD88N++L:e,,2244D 7/011366$(/"3"3d6P"P"P>?@@#EEl###DO!%DJE6788#==r   z/<int:id>/updatePUTc                 |   t          j                    }t          j                            |           }|st          ddi          dfS |                    d|j                  |_        |                    d|j                  |_        |                    d|j                  |_        |                    d|j	                  |_	        |                    d          r t          j        |d         d	          |_        |                    d
          r|                    |d
                    t          j                    |_        t           j                                         t          d|j        |j        |j        |j        |j        |j	        |j        r|j                            d	          nd dd          dfS )Nr*   r   rw   r1   r2   rF   rG   r>   r?   r   zUser updated successfullyr   )r*   r   rr   )r   rS   r   rU   rX   r   r1   r2   rF   rG   r   rY   r>   rb   r   
updated_atr   rc   rd   r   r3   r   )r   r:   r   s      r   update_userr     s   D:>>"D 7/011366 hh|T_==DOXXk4>::DN'4:..DJ88It|44DLxx
 H )$z*:JGG xx 0$~.///o''DOJ*'/ZZ|>BmU..z:::QU
 
    	 r   z /plaks/selected/<int:patient_id>c                     t           j                            |                                           }|st	          ddi          dfS |j        }t	          |j        |j        |j        |j	        d          S )N)
patient_idr*   zNo plak selectedrw   )r   titledescription	image_url)
r   rU   rV   rW   r   r   r   r   r   r   )r   	selectionr   s      r   get_selected_plakr   8  s    ",,
,CCIIKKI 91233S88>Dg'^	    r   z/notificationsc                     t          j                    } t          | d         | d         | d                   }t          j                            |           t          j                                         t          ddi          dfS )Nrz   r   messagerz   r   r   r*   zNotification createdrQ   )r   rS   r   r   rc   r   rd   r   )r:   notifications     r   create_notificationr   G  s|    DY7mY  L
 JNN<   JE1233S88r   z/notifications/<int:user_id>c                     t           j                            |                               t           j                                                                                  }t          d |D                       dfS )N)rz   c           	      v    g | ]6}|j         |j        |j        |j        |j                            d           d7S )z%Y-%m-%d %H:%M:%S)r   r   r   is_read
created_at)r   r   r   r   r   r   )r8   ns     r   
<listcomp>z%get_notifications.<locals>.<listcomp>W  sY         $Wyy,//0CDD	
 	
  r   rr   )r   rU   rV   order_byr   descrT   r   )rz   notificationss     r   get_notificationsr   T  s~     &000AAJJ<KbKgKgKiKijjnnppM   !     	 r   z/notifications/<int:id>/readc                     t           j                            |           }d|_        t          j                                         t          ddi          dfS )NTr*   zMarked as readrr   )r   rU   
get_or_404r   r   rc   rd   r   )r   r   s     r   mark_as_readr   b  sM    %0044LLJE+,--s22r   z!/notifications/mock/<int:user_id>c                    ddddddddddd	dg}|D ]?}t          | |d
         |d                   }t          j                            |           @t          j                                         t          ddi          dfS )NEasyaligneru/   Yeni plaklarımız mevcut, ilk inceleyen sen ol)r   r   u   Tedavi Süreciu6   Bugün tedavi sürecinizi fotoğraflamayı unutmayın.zDoktorunuzdan Mesaju/   Tedavi planınız hakkında yeni öneriler var.u   Fotoğraf Onaylandıu@   Yüklediğiniz tedavi fotoğrafı doktor tarafından onaylandı.r   r   r   r*   zMock notifications created.rQ   )r   r   rc   r   rd   r   )rz   	mock_dataitemr   s       r   create_mock_notificationsr   j  s      ,]^^"/ghh'4eff(5wxx	I  % %#G4=RVW`Rabbb

|$$$$JE89::C??r   ).flaskr   r   r   r   
flask_mailr   appr   r   r	   werkzeug.securityr
   
app.modelsr   r   r   app.dbr   r_   r"   email.mime.textr   r   
flask_corsr   rf   r   __name__user_bpplak_bpr   r-   routerm   ru   r   r   r   r   r   r   r   r   r   r   r7   r   r   <module>r      s   : : : : : : : : : : : :                   1 1 1 1 1 1 / / / / / / / / / /               $ $ $ $ $ $ # # # # # #           



 )FH
%
%
)FH
%
%= = =
* 
* 
* 	{VH--O O .-Of 	y6(++# # ,+#N 	x&*** * +**Z 	%w77  87 	!F844C C 54C0 	 6(33> > 43>* 	!E733! ! 43!P 	1E7CC  DC 	&22	9 	9 32	9 	-w??
 
 @?
 	-w??3 3 @?3 	2VHEE@ @ FE@ @ @r   