
    Xj                         d dl m Z  d dlmZ d dlmZ d dlmZ d dlmZm	Z	  ee
          Z G d d          Zded	efd
ZdS )    )datetime)Any)desc)Session)
get_loggerlog_executionc                   f   e Zd ZdefdZ ee          d!dedee	         dee	         de	dz  de
dz  d	e
e	ef         fd
            Zd"dedee	         dz  dee	         dz  de	dz  d	e
e	ef         f
dZ ee          d#dedededz  d	e
e	ef         fd            Zdeded	e
e	ef         fdZded	e
e	ef         fdZd$de	ded	ee
e	ef                  fdZd%de	ded	ee
e	ef                  fdZd#dede	dz  d	ee
e	ef                  fdZdefdZd Zd	e
e	ef         fdZd	e
e	ef         fd ZdS )&ExpertProfileManagerdbc                     || _         d S Nr   )selfr   s     U/lsinfo/ai/hellotax_ai/training_center/backend/app/services/expert_profile_manager.py__init__zExpertProfileManager.__init__   s        Nuser_idexpertise_areasskillsbiometadatareturnc                 8   ddl m}  |||||dddd|pi 	  	        }| j                            |           | j                                         | j                            |           t                              d|            |                     |          S )Nr   ExpertProfile        )	r   r   r   r   total_annotationstotal_reviewsavg_quality_scorereputation_score	meta_dataz Created expert profile for user )	
app.modelsr   r   addcommitrefreshloggerinfo_profile_to_dict)r   r   r   r   r   r   r   profiles           r   create_profilez#ExpertProfileManager.create_profile   s    ,,,,,,-Y_eh|}  NO  cf  yz  FN  FT  RT  U  U  UG   @w@@AAA$$W---r   c                    ddl m} | j                            |                              |j        |k                                              }|st          d| d          |||_        |||_	        |||_
        t          j                    |_        | j                                         | j                            |           t                               d|            |                     |          S )Nr   r   Profile for user 
 not foundz Updated expert profile for user )r"   r   r   queryfilterr   first
ValueErrorr   r   r   r   utcnow
updated_atr$   r%   r&   r'   r(   )r   r   r   r   r   r   r)   s          r   update_profilez#ExpertProfileManager.update_profile   s    ,,,,,,'--..55m6Kw6VWW]]__ 	FDDDDEEE&&5G##GN?GK%_..   @w@@AAA$$W---r   task_idquality_scorec                 h   ddl m}m} | j                            |                              |j        |k                                              }|st          d| d           ||d||          }| j        	                    |           |xj
        dz  c_
        |r+|                     ||           |                     |           | j                                         | j                            |           t                              d| d	|            |                     |          S )
Nr   ExpertContributionr   r,   r-   
annotation)r   contribution_typer5   r6      zRecorded annotation for user , task )r"   r9   r   r   r.   r/   r   r0   r1   r#   r   _update_avg_quality_update_reputationr$   r%   r&   r'   r(   )r   r   r5   r6   r9   r   r)   contributions           r   record_annotationz&ExpertProfileManager.record_annotation*   sQ   @@@@@@@@'--..55m6Kw6VWW]]__ 	FDDDDEEE))'\cj  {H  I  I  IL!!!!!Q&!! 	-$$Wm<<<##G,,,   MGMMGMMNNN$$W---r   c                 6   ddl m}m} | j                            |                              |j        |k                                              }|st          d| d           ||d|          }| j        	                    |           |xj
        dz  c_
        |                     |           | j                                         | j                            |           t                              d| d	|            |                     |          S )
Nr   r8   r,   r-   review)r   r;   r5   r<   zRecorded review for user r=   )r"   r9   r   r   r.   r/   r   r0   r1   r#   r   r?   r$   r%   r&   r'   r(   )r   r   r5   r9   r   r)   r@   s          r   record_reviewz"ExpertProfileManager.record_review;   s#   @@@@@@@@'--..55m6Kw6VWW]]__ 	FDDDDEEE))'X_fgggL!!!"(((   IIIIIJJJ$$W---r   c                     ddl m} | j                            |                              |j        |k                                              }|st          d| d          |                     |          S )Nr   r   r,   r-   )	r"   r   r   r.   r/   r   r0   r1   r(   )r   r   r   r)   s       r   get_profilez ExpertProfileManager.get_profileI   s    ,,,,,,'--..55m6Kw6VWW]]__ 	FDDDDEEE$$W---r   r    
   metriclimitc                     ddl m} t          |||j                  } j                            |                              t          |                                        |          	                                } fd|D             S )Nr   r   c                 :    g | ]}                     |          S  r(   .0pr   s     r   
<listcomp>z8ExpertProfileManager.get_leaderboard.<locals>.<listcomp>T   '    ;;;Q%%a((;;;r   )
r"   r   getattrr    r   r.   order_byr   rI   all)r   rH   rI   r   order_columnprofiless   `     r   get_leaderboardz$ExpertProfileManager.get_leaderboardP   s    ,,,,,,}fm6TUU7==//88l9K9KLLRRSXYY]]__;;;;(;;;;r   r   expertise_areamin_quality_scorec                 :    ddl m}  j                            |                              |j                            |g          |j        |k                                  t          |j
                                                            } fd|D             S )Nr   r   c                 :    g | ]}                     |          S rL   rM   rN   s     r   rQ   zBExpertProfileManager.find_experts_by_expertise.<locals>.<listcomp>Y   rR   r   )r"   r   r   r.   r/   r   containsr   rT   r   r    rU   )r   rY   rZ   r   rW   s   `    r   find_experts_by_expertisez.ExpertProfileManager.find_experts_by_expertiseV   s    ,,,,,,7==//66}7T7]7]_m^n7o7oq~  rQ  Uf  rf  g  g  p  p  qu  vC  vT  qU  qU  V  V  Z  Z  \  \;;;;(;;;;r   r;   c                 J    ddl m}  j                            |                              |j        |k              }|r|                    |j        |k              }|                    t          |j	                            
                                } fd|D             S )Nr   )r9   c                 :    g | ]}                     |          S rL   )_contribution_to_dict)rO   cr   s     r   rQ   z:ExpertProfileManager.get_contributions.<locals>.<listcomp>a   s'    EEE!**1--EEEr   )r"   r9   r   r.   r/   r   r;   rT   r   
created_atrU   )r   r   r;   r9   r.   contributionss   `     r   get_contributionsz&ExpertProfileManager.get_contributions[   s    111111011889K9SW^9^__ 	\LL!3!EIZ!Z[[Et,>,I'J'JKKOOQQEEEE}EEEEr   	new_scorec                 L    |j         }|j        pd}||dz
  z  |z   |z  |_        d S )Nr   r<   )r   r   )r   r)   rf   totalcurrent_avgs        r   r>   z(ExpertProfileManager._update_avg_qualityc   s8    )/63%0EAI%>%Je$S!!!r   c                 T    |j         dz  |j        dz  z   |j        pddz  z   |_        d S )NrG      r   d   )r   r   r   r    r   r)   s     r   r?   z'ExpertProfileManager._update_reputationh   sF    #*#<r#AGDY\]D]#]ahaza~  DG  aG  $G   r   c                    |j         |j        |j        |j        |j        |j        |j        |j        |j        |j	        r|j	        
                                nd |j        r|j        
                                nd |j        dS )N)idr   r   r   r   r   r   r   r    rc   r3   r!   )ro   r   r   r   r   r   r   r   r    rc   	isoformatr3   r!   rm   s     r   r(   z%ExpertProfileManager._profile_to_dictk   s   jW_QXQht{  uC  LS  LW  nu  nG  Za  Zo  FM  F_  u|  uM  F  Q  ][  ]d  ]o  ]y  ]y  ]{  ]{  ]{  W[  MT  M_  ki  kr  k}  kG  kG  kI  kI  kI  ei  x  xI  J  J  	Jr   c                     |j         |j        |j        |j        |j        |j        r|j                                        nd dS )N)ro   r   r;   r5   r6   rc   )ro   r   r;   r5   r6   rc   rp   )r   r@   s     r   ra   z*ExpertProfileManager._contribution_to_dictn   s    "o,2F]i]{  IU  I]  p|  pJ  AM  AX  Zb  Zf  Zq  Z{  Z{  Z}  Z}  Z}  ^b  c  c  	cr   )NN)NNNr   )r    rG   )r   )__name__
__module____qualname__r   r   r   r&   intliststrdictr   r*   r4   floatrA   rD   rF   rX   r^   re   r>   r?   r(   ra   rL   r   r   r
   r
   
   sX       7     ]6. .c .DI .tTWy ._bei_i .z~  BF  {F .  PT  UX  Z]  U]  P^ . . . .. .c .DI<L .[_`c[dgk[k .wz  ~B  xB .  LP  QT  VY  QY  LZ . . . ." ]6. . .s .5SW< .aefiknfnao . . . . .S .3 .4S> . . . ..3 .4S> . . . .< <c <S <PTUYZ]_bZbUcPd < < < << < <PU <^bcghkmphpcq^r < < < <
F F Ft FUYZ^_bdg_gZhUi F F F FTe T T T T
G G GJ4S> J J J JcT#s(^ c c c c c cr   r
   r   r   c                      t          |           S r   )r
   r   s    r   get_expert_profile_managerr{   q   s    ###r   N)r   typingr   
sqlalchemyr   sqlalchemy.ormr   common_loggingr   r   rr   r&   r
   r{   rL   r   r   <module>r      s                      " " " " " " 4 4 4 4 4 4 4 4	H		ec ec ec ec ec ec ec ecN$7 $/C $ $ $ $ $ $r   