o
    :\h                     @   s   d dl mZ 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mZmZ d dlmZmZ d dlmZ d dlmZ G dd	 d	Zd
S )    )AsyncSession)	APIRouterHTTPExceptionDependsstatusRequestQuery)TaskRepo)TaskCreateRequestTaskUpdateRequestTaskResponseProjectModelMemeberTaskResponse)ListOptional)
verify_jwt)get_dbc                	   @   s:  e Zd ZeefdefddZeefdefddZeefde	de
defd	d
ZeefdedefddZeefdedede
defddZeefdedefddZeefdefddZeefdefddZeefdefddZedddedddedddeefdee dee d ee defd!d"ZdS )#
TaskRouterrepoc                 C   s   t dttgd| _| jjd| jdgd | jjd| jdgd | jjd| jdgd | jjd| jdgd | jjd	| j	dgt
d
 | jjd| jdgtt d
 | jjd| jdgtd
 | jjd| jdgtd
 | jjd| jdgtd
 d S )Nz/task)prefixdependenciesz/get_task_status_genericGET)methodsz/get_task_countsz/get_user_wise_task_countsz/get_project_wise_task_countsz/task_list_by_project)r   response_model/POSTz/{id}PUT)r   r   r   routeradd_api_routeget_task_status_genericget_task_countsget_user_wise_task_countsget_project_wise_task_countstask_list_by_projectr   indexr   r   createfindupdate)selfr    r(   6/var/www/html/pro-man-master/src/router/task/routes.py__init__
   s   zTaskRouter.__init__dbc                       t |}| I d H }|S N)r	   readAllr'   r+   r   recordsr(   r(   r)   r#         zTaskRouter.indexdatarequestc              
      sb   zt |jjd}t|}|||I d H }|W S  ty0 } z
ttj	d| dd }~ww )Nsubz(An error occurred during task creation: status_codedetail)
intstatedecoded_tokengetr	   r$   	Exceptionr   r   HTTP_500_INTERNAL_SERVER_ERROR)r'   r2   r3   r+   user_idr   r0   er(   r(   r)   r$      s    
zTaskRouter.createidc                    6   t |}||I d H }|d ur|S tdd| Ni  z Record not found for id )r	   r%   r   )r'   r@   r+   crudrecordr(   r(   r)   r%   /      zTaskRouter.findupdate_datac           	   
      s   z"t |jjd}t|}||||I d H }|s!tddd|W S  ty1 } z|d }~w tyF } z
ttj	d| dd }~ww )Nr4   i  zTask Not Foundr5   z&An error occurred during task update: )
r8   r9   r:   r;   r	   r&   r   r<   r   r=   )	r'   r@   rF   r3   r+   r>   rC   
db_projectr?   r(   r(   r)   r&   6   s$   zTaskRouter.update
project_idc                    rA   rB   )r	   r"   r   )r'   rH   r+   r   rD   r(   r(   r)   r"   J   rE   zTaskRouter.task_list_by_projectc                    r,   r-   )r	   r   r/   r(   r(   r)   r   Q   r1   zTaskRouter.get_task_countsc                    r,   r-   )r	   r    r/   r(   r(   r)   r    V   r1   z$TaskRouter.get_user_wise_task_countsc                    r,   r-   )r	   r!   r/   r(   r(   r)   r!   [   r1   z'TaskRouter.get_project_wise_task_countsNzFilter by project ID)descriptionzFilter by user IDzFilter by task statusr>   task_statusc                    s$   t |}|j|||dI d H }|S )N)rH   r>   rJ   )r	   task_status_generic)r'   rH   r>   rJ   r+   r   r0   r(   r(   r)   r   `   s   z"TaskRouter.get_task_status_generic)__name__
__module____qualname__r   r	   r*   r   r   r#   r
   r   r$   r8   r%   r   r&   r"   r   r    r!   r   r   strr   r(   r(   r(   r)   r   	   s(    "

r   N)sqlalchemy.ext.asyncior   fastapir   r   r   r   r   r   src.repo.task.TaskRepor	   src.request.task.TaskRequestr
   r   r   r   typingr   r   src.util.jwr   src.repo.enginer   r   r(   r(   r(   r)   <module>   s     