
    @i                        S r SSKJrJrJr  SSKJrJrJrJ	r	  SSK
Jr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  \" SS/S9r\R3                  S5      \" SSS9\" \5      \" \5      4S\S\S\4S jj5       r\R9                  S5      \" SSS9\" \5      \" \5      4S\S\S\4S jj5       r\R3                  S5      \" S5      \" SSS9\" SSSS9\" \5      \" \5      4S\S \\   S!\S\S\4
S" jj5       r\R?                  S#5      \" SS$S9\" \5      \" \5      4S%\S\S\S\4S& jj5       r \R9                  S'5      \" SS(S9\" \5      \" \5      4S\\   S\S\4S) jj5       r!g)*u\   API tabla `alerts`: listar, contar no leídas, marcar revisada, backfill desde asignaciones.    )OptionalSetTuple)	APIRouterDependsQuerystatus)JSONResponse)Session)get_current_active_user)AppAlertClass)get_db)#ProfessionalDocumentAssignmentModel)	UserLoginz/alertsAlerts)prefixtagsz/unread-count.zID del profesional)descriptionprofessional_idsession_userdbc                 .   [        U5      nUR                  U 5      nUR                  S5      S:X  a.  [        [        R
                  SUR                  SS5      SS0S.S	9$ [        [        R                  S
SS[        UR                  SS5      5      0S.S	9$ )Nr	   error  messageErrorcountr   r	   r   datastatus_codecontent   OK)r   count_unreadgetr
   r	   HTTP_500_INTERNAL_SERVER_ERRORHTTP_200_OKint)r   r   r   svcresults        Oc:\Users\jesus\Desktop\proyecto_pie360\backend\app\backend\routes\app_alerts.pyalerts_unread_countr-      s     
Co.Fzz(w&=="vzz)W/MX_abWcd
 	
 &&c&**Wa"89:
     z/mark-all-reviewedu!   Profesional dueño de las alertasc                    [        U5      nUR                  U 5      nUR                  S5      S:X  a+  [        [        R
                  SUR                  SS5      S.S9$  UR                  5         [        [        R                  S	S
S[        UR                  SS5      5      0S.S9$ ! [         a>  nUR                  5         [        [        R
                  S[        U5      S.S9s SnA$ SnAff = f)zTMarca todas las alertas pendientes como revisadas (al abrir el panel de la campana).r	   r   r   r   r   r	   r   r    Nr#   r$   updatedr   r   )r   "mark_all_reviewed_for_professionalr&   r
   r	   r'   commit	Exceptionrollbackstrr(   r)   )r   r   r   r*   r+   es         r,   mark_all_alerts_reviewedr8   )   s     
C33ODFzz(w&=="vzz)W/MN
 	


		 &&FJJy!$< =>
   

=="s1v6
 	

s   B% %
C-/3C("C-(C- Nz Filtrar: 0 pendiente, 1 revisadad      r   )gele	status_idlimitc           	         [        U5      nUR                  XUS9nUR                  S5      S:X  a,  [        [        R
                  SUR                  SS5      / S.S9$ [        [        R                  S	S
UR                  S/ 5      S.S9$ )N)r   r>   r?   r	   r   r   r   r   r   r    r#   r$   r   )r   list_alertsr&   r
   r	   r'   r(   )r   r>   r?   r   r   r*   r+   s          r,   rA   rA   I   s     
C___Y^__Fzz(w&=="vzz)W/MWYZ
 	
 &&4FB9OP r.   z/{alert_id}/reviewedu)   Debe coincidir con el dueño de la alertaalert_idc                    [        U5      nUR                  X5      nUR                  S5      S:X  a+  [        [        R
                  SUR                  SS5      S.S9$  UR                  5         [        [        R                  S	UR                  SS
5      S.S9$ ! [         a>  nUR                  5         [        [        R                  S[        U5      S.S9s S nA$ S nAff = f)Nr	   r   i  r   zNo encontrador0   r    r   r#   r$   )r   mark_reviewedr&   r
   r	   HTTP_404_NOT_FOUNDr3   r4   r5   r'   r6   r(   )rB   r   r   r   r*   r+   r7   s          r,   mark_alert_reviewedrF   ^   s     
Cx9Fzz(w&11"vzz)_/UV
 	


		 &&6::i+FG   

=="s1v6
 	

s   B 
C!#3CC!C!z/backfill-from-assignmentszISi se omite, procesa todas las asignaciones pendientes (puede ser pesado)c           	          UR                  [        5      R                  [        R                  S:H  5      nU b+  UR                  [        R                  [        U 5      :H  5      nUR                  5       n[        U5      n[        5       nU Hs  n[        UR                  5      [        UR                  5      [        UR                  5      4nX;   a  MH  UR                  U5        UR                  US   US   US   S9  Mu     UR                  5         [        [        R                   SS[#        U5      [#        U5      S.S	.S
9$ ! [$         a>  n	UR'                  5         [        [        R(                  S[+        U	5      S.S
9s Sn	A	$ Sn	A	ff = f)u`   Sincroniza una alerta resumen por (período, curso, profesional) según asignaciones pendientes.r   Nr;      )period_year	course_idr   r#   r$   )scopes_syncedpending_assignment_rowsr   r    r   r0   )queryr   filterr>   r   r)   allr   setrI   rJ   add#sync_scope_summary_from_assignmentsr3   r
   r	   r(   lenr4   r5   r'   r6   )
r   r   r   qrowsr*   seenrowkeyr7   s
             r,    backfill_alerts_from_assignmentsrY   z   s^   $
HH89@@/99Q>
 &<LLPSTcPddeAuuwB*-%Cs'S]]);SATAT=UVC{HHSM33Fa& #A 4   			**%(Y/24y

 
	
  

=="s1v6
 	

s   EE 
F3FFF)"__doc__typingr   r   r   fastapir   r   r   r	   fastapi.responsesr
   sqlalchemy.ormr   app.backend.auth.auth_userr   #app.backend.classes.app_alert_classr   app.backend.db.databaser   app.backend.db.modelsr   app.backend.schemasr   alertsr&   r)   r-   postr8   rA   patchrF   rY    r.   r,   <module>rh      s   b ' ' 5 5 * " > = * E )	)8*	5 O 2FG%&=>&/ 	 , !" 2UV%&=>&/ 	 #> B :$T7YZsqS)%&=>&/}  	
 	 ( $% !2]^%&=>&/	  		 &6 )*%*_& &&=>&/-
c]-

 -
 	-
 +-
r.   