o
    	,hV                     @   s   U d dl m Z mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlm  m  mZ d dl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Ze ed df e!d< G dd dZ"dS )    )datetime	timedeltaN)Literal)BackgroundTasksHTTPException)OAuth2PasswordRequestForm)Session)
JWTManagerJWTPayloadSchema)Messages)UserBaseTblUser)RESET_OTP_EXPIRE_MINUTESsend_otp_email)CustomResponse)studentadmin
superadmin.VALID_ROLESc                   @   s   e Zd ZdedefddZdejfddZdd	 Z	e
d
edefddZdd Zdd ZdejfddZdejdefddZdejfddZdS )UserServicedbtokenc                 C   s   || _ || _d S )N)r   r   )selfr   r    r   //var/www/html/RetailAPI/app/api/user/service.py__init__   s   
zUserService.__init__requestc                    s2   t |}t|| j | j  tdtjdS )N1statusmessage)	r   model_validater   creater   commitr   r   
USER_CREAT)r   r   created_userr   r   r   create_user   s
   

zUserService.create_userc                    st   t d }t|}W d    n1 sw   Y  |D ]}t|}t|| j	 q| j	
  tdtjdS )Nz&C:/Users/gokul/Retail/datas/roles.jsonr   r   )pathlibPathopenjsonloadr   r!   r   r"   r   r#   r   r   JSON_CRATE_SUCCES)r   f	data_listdatar%   r   r   r   create_json   s   

zUserService.create_jsoncredentialsc                    s   d| j i}t||}|stdtjd| j|jkr"tdtjd|j	 }|t
vr4tdd| dt|jd|t d}t|}|d	|j||jd
S )Nemail_id  status_codedetaili    zInvalid role: r   )user_id	user_type	user_roleexpbearer)access_token
token_typer2   roler8   )usernamer   get_by_user_filterr   r   USER_NOT_FOUNDpasswordINCORRECT_PASSWORDr?   stripr   r
   r8   r   utcnowr	   create_access_tokenr2   )r1   r   user_filteruser_logr?   payloadr=   r   r   r   
user_login&   s.   


zUserService.user_loginc                    sD   | j jd u rtdtjdt| j j| j}|s tdtj	dS |S )Nr7   r4   -1r   )
r   r8   r   r   USER_ID_MISSINGr   
get_usr_idr   r   rB   r   userr   r   r   get_demo_user@   s   zUserService.get_demo_userc                    sf   | j jd u rtdtjd| jttj| j jk	 }|s't
dtjdS | j  t
dtjdS )Nr7   r4   rL   r   r   )r   r8   r   r   rM   r   queryr   filterfirstr   rB   r#   USER_LOGOUTrO   r   r   r   logoutH   s    
zUserService.logoutc                    s   | j j}|stdtjdS tj|}t	|| j
}|s$tdtjdS |j|jkr1tdtjdS |j|jkr>tdtjdS |j|_| j
  tdtjdS )NrL   r   r   )r   r8   r   r   rM   schemasUserPassUpdater!   r   rN   r   rB   current_passwordrC   CURRENT_PASSORD_INCORRECTnew_passwordconfirm_password%NEWPASSWORD_CONFIRMPASSWORD_NOT_MATCHr#   PASSWORD_UPDATED)r   r   r8   updated_userrP   r   r   r   update_passQ   s   
zUserService.update_passbackground_tasksc                    s   | j ttj|jk }|stdtjdt	t
dd}||_t ttd |_| j | | j   |t|j| tdtjdS )z(Generates an OTP and sends it via email.r3   r4   i i?B )minutesr   r   )r   rR   r   rS   r2   rT   r   r   rB   strrandomrandintotpr   rF   r   r   
otp_expiryaddr#   add_taskr   r   OTP_SEND)r   r   ra   rP   rf   r   r   r   forgot_password_serviceb   s   
z#UserService.forgot_password_servicec                 C   s   | j ttj|jk }|stdtjd|j	|j	ks*|j
du s*|j
t k r1tdtjd|j|_d|_
| j | | j   tdtjdS )z'Verifies OTP and allows password reset.r3   r4   Nr7   r   r   )r   rR   r   rS   r2   rT   r   r   rB   rf   rg   r   rF   INVALID_OTPr[   rC   rh   r#   r   r^   )r   r   rP   r   r   r   reset_password_serviceo   s   $
z"UserService.reset_password_serviceN)__name__
__module____qualname__r   r
   r   rW   
UserCreater&   r0   staticmethodr   rK   rQ   rV   rX   r`   ForgotPasswordRequestr   rk   VerifyOTPRequestrm   r   r   r   r   r      s    		r   )#r   r   r*   r'   rd   typingr   fastapir   r   fastapi.securityr   sqlalchemy.ormr   app.api.user.schemasapirP   rW   app.dependency.authanticationr	   r
   app.locale.messagesr   app.models.main.userr   r   app.utils.emailr   r   app.utils.schemas_utilsr   r   tuple__annotations__r   r   r   r   r   <module>   s     