o
    ߭h'!                     @   s   d dl mZmZmZmZmZmZ 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ee	je	jf dee
j d	ee
j d
ee	je	jf dedefddZdS )    )	APIRouterDependsHTTPExceptionRequestResponsestatus)
exceptionsmodelsschemas)Authenticator)BaseUserManagerUserManagerDependency)	ErrorCode
ErrorModelFget_user_manageruser_schemauser_update_schemaauthenticatorrequires_verificationreturnc                    s  t  }|jd|d}|jd|dd}t| fdtdttjtjf dtjfdd}|jd	 d
t	j
ddiidt|fdtjf fdd}	|jd	 t|gdt	j
ddit	jtddtjddtjidtjddtjddidiiididt|t| fdtd|dtjdttjtjf f fdd}
|jd  t|gd!t	j
ddit	jdd"it	jdd#iidt|f fd$d%	}|jd  t|gd&t	j
ddit	jdd"it	jdd#it	jtddtjddtjidtjddtjddidiiididt|t| fd|dtdttjtjf f fd'd(}|jd t	jtt|gd)t	j
ddit	jdd"it	jdd#iid*t|t| fdtdttjtjf fd+d,}|S )-z1Generate a router with the authentication routes.T)activeverified)r   r   	superuseriduser_managerr   c              
      sN   z| | }||I d H W S  tjtjfy& } zttjd|d }~ww )N)status_code)parse_idgetr   UserNotExists	InvalidIDr   r   HTTP_404_NOT_FOUND)r   r   	parsed_ide r#   _/var/www/html/stock_analysis/be/venv/lib/python3.10/site-packages/fastapi_users/router/users.pyget_user_or_404   s   
z)get_users_router.<locals>.get_user_or_404z/mezusers:current_userdescriptionzMissing token or inactive user.)response_modelname	responsesuserc                       t  | S Nr
   model_validater*   r   r#   r$   me$   s   zget_users_router.<locals>.mezusers:patch_current_userzapplication/jsonexamplesz&A user with this email already exists.detail)summaryvaluezPassword validation failed.z'Password should beat least 3 characterscodereason)modelcontent)r'   dependenciesr(   r)   requestuser_updatec              
      sz   z|j ||d| dI d H }t |W S  tjy- } zttjtj	|j
ddd }~w tjy<   ttjtjdw )NTsafer<   r6   r   r3   r3   updater
   r.   r   InvalidPasswordExceptionr   r   HTTP_400_BAD_REQUESTr   UPDATE_USER_INVALID_PASSWORDr8   UserAlreadyExists UPDATE_USER_EMAIL_ALREADY_EXISTS)r<   r=   r*   r   r"   r0   r#   r$   	update_me3   s(   *z#get_users_router.<locals>.update_mez/{id}z
users:userzNot a superuser.zThe user does not exist.c                    r+   r,   r-   r/   r0   r#   r$   get_userp   s   z"get_users_router.<locals>.get_userzusers:patch_userc              
      sz   z|j | |d|dI d H }t |W S  tjy- } zttjtj	|j
ddd }~w tjy<   ttjtjdw )NFr>   r6   r@   rA   rB   )r=   r<   r*   r   r"   r0   r#   r$   update_user   s(   0z%get_users_router.<locals>.update_userzusers:delete_user)r   response_classr;   r(   r)   c                    s   |j || dI d H  d S )N)r<   )delete)r<   r*   r   r#   r#   r$   delete_user   s   z%get_users_router.<locals>.delete_user)r   current_userr   strr   r	   UPIDr   r   HTTP_401_UNAUTHORIZEDpatchrE   r   r   rH   rF   r   HTTP_403_FORBIDDENr    rM   HTTP_204_NO_CONTENTr   )r   r   r   r   r   routerget_current_active_userget_current_superuserr%   r1   rI   rJ   rK   rN   r#   r0   r$   get_users_router	   s<  

'-rZ   N)F)fastapir   r   r   r   r   r   fastapi_usersr   r	   r
   fastapi_users.authenticationr   fastapi_users.managerr   r   fastapi_users.router.commonr   r   rQ   rR   typeUUUboolrZ   r#   r#   r#   r$   <module>   s&     