
    hR                        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  ed	d
g      Zej;                  de       ee       ee      fdededefd       Zej?                  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j?                  de       ee       ee      fde dedefd       Z#ejI                  de       ee       ee      fde d ededefd!       Z%ejM                  d       ee       ee      fde dedefd"       Z'ej;                  d#       ee       ee      fd$ededefd%       Z(ej?                  d&       ee       ee      fde dedefd'       Z)y)(    )	APIRouterDependsHTTPExceptionQuery)Session)ListOptional)get_db)Project	Criterion	SoftSkillUserproject_soft_skills)ProjectCreateProjectUpdateProjectResponseProjectFilterAIProjectAssistRequest)get_current_active_user)	AIServicez	/projectsProjects)prefixtags/)response_modelprojectdbcurrent_userc                   K   t        | j                  | j                  | j                  |j                        }|j                  |       |j                          | j                  D ]J  }t        |j                  |j                  |j                  |j                        }|j                  |       L | j                  D ]c  }|j                  t              j                  t        j                  |k(        j                         }|sI|j                   j#                  |       e |j%                          |j'                  |       |S w)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           A/home/www/40-admission.kofcorporation.com/app/routers/projects.pycreate_projectr9      s     mm''~~	J FF:HHJ "** !}}&22!(('44	
	 	y ** 1#**9<<8+CDJJL""))%01
 IIKJJzs   DE		A E	)ged      i  )r:   leNskiplimitr"   searchc                 "  K   |j                  t              }|r"|j                  t        j                  |k(        }|rV|j                  t        j                  j                  d| d      t        j                  j                  d| d      z        }ddlm} |j                  |j                  k7  r,|j                  t        j                  |j                  k(        }|j                  |       j                  |      j                         }|S w)z&List admission projects with filtering%r   )UserRole)r,   r   r-   r"   r    iliker!   
app.modelsrC   roleADMINr#   r'   offsetr?   all)	r>   r?   r"   r@   r   r   r,   rC   projectss	            r8   list_projectsrK   4   s      HHWE W^^v56MM!F81.%%&m45
 $HNN*W--@A||D!''.224HOs   DDz/{project_id}r$   c                   K   |j                  t              j                  t        j                  | k(        j	                         }|st        dd      |j                  dk7  r&|j                  |j                  k7  rt        dd      |S w)zGet a specific project  Project not foundstatus_codedetailadmin  Not enough permissions)r,   r   r-   r'   r.   r   rF   r#   r$   r   r   r   s       r8   get_projectrV   R   sx      hhw&&wzzZ'?@FFHG4GHH G#(8(8LOO(K4LMMNs   B
Bproject_updatec                   K   |j                  t              j                  t        j                  | k(        j	                         }|st        dd      |j                  dk7  r&|j                  |j                  k7  rt        dd      |j                  d      j                         D ]  \  }}t        |||        |j                          |j                  |       |S w)	zUpdate a projectrM   rN   rO   rR   rS   rT   T)exclude_unset)r,   r   r-   r'   r.   r   rF   r#   
model_dumpitemssetattrr1   r2   )r$   rW   r   r   r   fieldvalues          r8   update_projectr_   c   s      hhw&&wzzZ'?@FFHG4GHH G#(8(8LOO(K4LMM '111EKKM 'u&' IIKJJwNs   C C"c                 b  K   |j                  t              j                  t        j                  | k(        j	                         }|st        dd      |j                  dk7  r&|j                  |j                  k7  rt        dd      |j                  |       |j                          ddiS w)	zDelete a projectrM   rN   rO   rR   rS   rT   messagezProject deleted successfully)
r,   r   r-   r'   r.   r   rF   r#   deleter1   rU   s       r8   delete_projectrc   {   s      hhw&&wzzZ'?@FFHG4GHH G#(8(8LOO(K4LMMIIgIIK566s   B-B/z
/ai-assistrequestc                 N   K   t        j                  ||        d{   }|S 7 w)z1Get AI assistance for creating admission projectsN)r   assist_project_creation)rd   r   r   
suggestions       r8   ai_assist_project_creationrh      s)      !88WEEJ Fs   %#%z/{project_id}/insightsc                 \  K   |j                  t              j                  t        j                  | k(        j	                         }|st        dd      |j                  dk7  r&|j                  |j                  k7  rt        dd      t        j                  ||        d{   }|S 7 w)z1Get AI-powered insights about project performancerM   rN   rO   rR   rS   rT   N)
r,   r   r-   r'   r.   r   rF   r#   r   generate_project_insights)r$   r   r   r   insightss        r8   get_project_insightsrl      s      hhw&&wzzZ'?@FFHG4GHH G#(8(8LOO(K4LMM88ZHHHO Is   B!B,#B*$B,)*fastapir   r   r   r   sqlalchemy.ormr   typingr   r	   app.core.databaser
   rE   r   r   r   r   r   app.schemas.projectr   r   r   r   r   app.services.authr   app.services.ai_servicesr   routerpostr9   getintstrrK   rV   putr_   rb   rc   rh   rl        r8   <module>r|      s   < < " ! $ O O  6 .	+ZL	9S1 &/ !89""" " 2"H C_ 56aAsqT*!$K!$K&/ !89
 SM SM	
 	  7: OO< &/ !89  =  OO< &/ !89	! 	 	 =.  &/ !89777 7  7$ \ &/ !89#   $% &/ !89  &r{   