o
    ̿Si                     @   s  d dl mZmZmZmZmZmZ d dlmZ d dl	m
Z
mZ d dlZd dlmZ ddlmZmZmZmZmZmZmZ ddlmZmZ dd	lmZ dd
lmZmZmZm Z m!Z!m"Z"m#Z# e Z$e$j%dedeej&fdededej'fddZ(e$%deej&fdededej'fddZ)e$%deej&eefdededej'defddZ*e$j+dedd dddeej&eefde,de,dee- dee. dej'defd d!Z/e$j+d"edd dddeej&eefde,de,dee- dee. dej'defd#d!Z/e$j+d$edeej&fd%e-dej'fd&d'Z0e$j1d$edeej&fd%e-d(edej'fd)d*Z2e$j3d$eded+d,d-eej&fd%e-dej'fd.d/Z4e$%d0eej&fd1edej'fd2d3Z5dS )4    )	APIRouterDependsHTTPExceptionBackgroundTasksPathRequest)JSONResponse)ListOptionalN)database   )UserUserBase	UserLogin
UserUpdateUserResponseListEmailActionResetPasswordRequest)create_access_tokenget_current_userdetails)str_to_objectid)create_user_servicesend_email_verification_serviceget_users_serviceread_user_serviceupdate_user_servicedelete_user_servicereset_password_service/)response_modeluserbackground_tasksdbc              
   C   sH   t | ||}td|d dd}|jdd|d  dd	d	d
ddd |S )z
    Creates a new user after verifying email code and then sends a welcome email.
    Returns a JSONResponse with a secure JWT set as a cookie.
    zUser created successfully	user_data)messager    )contentAuthorizationzBearer tokenTi  r   None)keyvaluehttponlymax_ageexpirespathsecuresamesite)r   r   
set_cookie)r    r!   r"   resultresponse r4   7/var/www/html/Trade-python/app/v1/routers/saas/users.pycreate_user_endpoint   s   

r6   z/emailverification/email_actionc                 C   s   t | ||S z]
    Sends a verification code via email for signup, forgot password, or invite actions.
    r   )r7   r!   r"   r4   r4   r5   send_email_verification4   s   	r:   z/invite/current_userc                 C   s   t | |||S r8   r9   )r7   r!   r"   r;   r4   r4   r5   send_invite@   s   
r<   z/list/
   skiplimitq	is_activec                 C   s   | d}t|| |||||S )8
    Returns a list of users for the given account.
    
account_id)getr   r>   r?   r@   rA   r"   r;   rC   r4   r4   r5   	get_usersL   s   
rF   z
/list/all/c                 C   s   d}t || |||||S )rB   all)r   rE   r4   r4   r5   rF   \   s   z
/{user_id}user_idc                 C   "   t | |}|du rtddd|S )z*
    Returns user details by user ID.
    N  User not foundstatus_codedetail)r   r   rH   r"   r    r4   r4   r5   	read_userl      
rP   r#   c                 C   s$   t | ||}|du rtddd|S )z#
    Updates user information.
    NrJ   zUser not found after updaterL   )r   r   )rH   r#   r"   updated_userr4   r4   r5   update_usery   s   	rS   .zThe ID of the user)descriptionc                 C   rI   )z
    Deletes a user by ID.
    NrJ   rK   rL   )r   r   rO   r4   r4   r5   delete_user   rQ   rU   z/reset-password/request_bodyc                 C   s
   t | |S )zE
    Resets a user's password after verifying the provided code.
    )r   )rV   r"   r4   r4   r5   reset_password   s   
rW   )6fastapir   r   r   r   r   r   fastapi.responsesr   typingr	   r
   jsonapp.dbr   models.saas.usersmodelr   r   r   r   r   r   r   dependencies.authr   r   libraries.objectr   services.saas.usersr   r   r   r   r   r   r   routerpostget_mongo_dbMongoDBr6   r:   r<   rD   intstrboolrF   rP   putrS   deleterU   rW   r4   r4   r4   r5   <module>   s     $$

