
    cVh\                     p   d dl mZmZmZmZ d dl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 d dlmZmZmZmZmZ d dlmZ d dlmZ d d	lmZ  ed
dg          Ze                    de           ee           ee          fdededefd            Z e!                    dee                    ed d            eddd           ed           ed           ee           ee          fde"de"de	e#         de	e#         dedefd            Z$e!                    de           ee           ee          fde"dedefd             Z%e&                    de           ee           ee          fde"d!ededefd"            Z'e(                    d           ee           ee          fde"dedefd#            Z)e                    d$           ee          fd%edefd&            Z*e!                    d'           ee           ee          fde"dedefd(            Z+dS ))    )	APIRouterDependsHTTPExceptionQuery)Session)ListOptional)get_db)Project	Criterion	SoftSkillUserproject_soft_skills)ProjectCreateProjectUpdateProjectResponseProjectFilterAIProjectAssistRequest)PaginationParams)get_current_active_user)	AIServicez	/projectsProjects)prefixtags/)response_modelprojectdbcurrent_userc                 n  K   t          | j        | j        | j        |j                  }|                    |           |                                 | j        D ]>}t          |j        |j        |j	        |j
                  }|                    |           ?| j        D ]k}|                    t                                        t          j        |k                                              }|r|j                            |           l|                                 |                    |           |S )zCreate a new admission project)titledescriptionstatusowner_id)
project_idr"   weightis_mandatory)r   r!   r"   r#   idaddflushcriteriar   r&   r'   soft_skill_idsqueryr   filterfirstsoft_skillsappendcommitrefresh)r   r   r   
db_projectcriterion_data	criterionskill_idskills           ./home/runner/workspace/app/routers/projects.pycreate_projectr:      s3      m'~	  J FF:HHJJJ "*  !}&2!('4	
 
 
	 	y * 1 1##**9<8+CDDJJLL 	1"))%000IIKKKJJz    )ged      i  )r<   leNskiplimitr#   searchc                 0  K   |                     t                    }|r#|                    t          j        |k              }|rZ|                    t          j                            d| d          t          j                            d| d          z            }ddlm} |j	        |j
        k    r(|                    t          j        |j        k              }|                    |                               |                                          }|S )z&List admission projects with filtering%r   )UserRole)r-   r   r.   r#   r!   iliker"   
app.modelsrE   roleADMINr$   r(   offsetrA   all)	r@   rA   r#   rB   r   r   r-   rE   projectss	            r9   list_projectsrM   5   s      HHWE  7W^v566 
MF..%%m&mmm445
 
 $#####HN**W-@AA||D!!''..2244HOr;   z/{project_id}r%   c                 "  K   |                     t                                        t          j        | k                                              }|st          dd          |j        dk    r!|j        |j        k    rt          dd          |S )zGet a specific project  Project not foundstatus_codedetailadmin  Not enough permissions)r-   r   r.   r(   r/   r   rH   r$   r%   r   r   r   s       r9   get_projectrX   S   s       hhw&&wzZ'?@@FFHHG I4GHHHH G##(8LO(K(K4LMMMMNr;   project_updatec                   K   |                     t                                        t          j        | k                                              }|st          dd          |j        dk    r!|j        |j        k    rt          dd          |                    d          	                                D ]\  }}t          |||           |                                 |                    |           |S )	zUpdate a projectrO   rP   rQ   rT   rU   rV   T)exclude_unset)r-   r   r.   r(   r/   r   rH   r$   
model_dumpitemssetattrr2   r3   )r%   rY   r   r   r   fieldvalues          r9   update_projectra   d   s       hhw&&wzZ'?@@FFHHG I4GHHHH G##(8LO(K(K4LMMMM '111EEKKMM ' 'u&&&&IIKKKJJwNr;   c                 x  K   |                     t                                        t          j        | k                                              }|st          dd          |j        dk    r!|j        |j        k    rt          dd          |                    |           |	                                 ddiS )	zDelete a projectrO   rP   rQ   rT   rU   rV   messagezProject deleted successfully)
r-   r   r.   r(   r/   r   rH   r$   deleter2   rW   s       r9   delete_projectre   |   s       hhw&&wzZ'?@@FFHHG I4GHHHH G##(8LO(K(K4LMMMMIIgIIKKK566r;   z
/ai-assistrequestc                 >   K   t          j        |            d{V }|S )z1Get AI assistance for creating admission projectsN)r   assist_project_creation)rf   r   
suggestions      r9   ai_assist_project_creationrj      s0       !8AAAAAAAAJr;   z/{project_id}/insightsc                 X  K   |                     t                                        t          j        | k                                              }|st          dd          |j        dk    r!|j        |j        k    rt          dd          t          j	        ||            d{V }|S )z1Get AI-powered insights about project performancerO   rP   rQ   rT   rU   rV   N)
r-   r   r.   r(   r/   r   rH   r$   r   generate_project_insights)r%   r   r   r   insightss        r9   get_project_insightsrn      s       hhw&&wzZ'?@@FFHHG I4GHHHH G##(8LO(K(K4LMMMM8ZHHHHHHHHHOr;   ),fastapir   r   r   r   sqlalchemy.ormr   typingr   r	   app.core.databaser
   rG   r   r   r   r   r   app.schemas.projectr   r   r   r   r   app.schemas.reportsr   app.services.authr   app.services.ai_servicesr   routerpostr:   getintstrrM   rX   putra   rd   re   rj   rn    r;   r9   <module>r~      se   < < < < < < < < < < < < " " " " " " ! ! ! ! ! ! ! ! $ $ $ $ $ $ O O O O O O O O O O O O O O              1 0 0 0 0 0 5 5 5 5 5 5 . . . . . .	+ZL	9	9	9S11 '&// !899" """ " " " 21"H C_ 566aAsqT***!E$KK!E$KK'&// !899 
 SM SM	
 	    76: OO<< '&// !899     =<  OO<< '&// !899	 ! 	 	   =<.  '&// !8997 777 7 7 7  7$ \ !!899 #    $%% '&// !899     &%  r;   