§
    Lëi¡  ã                   ó<  — d Z ddlZ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 dd	ed
e	dedededdfd„Z	 dd	edededededdfd„Zdd	ededededdf
d„Zdd	edededededz  ddfd„Zdd	ededededdf
d„Zddedededededz  ddfd„Zdededededdf
d„ZdS )uD   Unified notification helper â€” in-app + Telegram groups + FCM push.é    N)ÚAsyncSession)Úselect)ÚNotification)ÚUser)Ú
AppSettingÚ ÚdbÚuserÚtitleÚbodyÚlinkÚreturnc              ƒ   óÄ   K  — |                       t          |j        |||¬¦  «        ¦  «         |j        r+t	          j        t          |j        |||¦  «        ¦  «         dS dS )zÒ
    Create an in-app notification for `user` + fire FCM push in the background.
    Telegram is sent via group channels (notify_user_group / notify_admin_group).
    Caller is responsible for db.commit().
    )Úuser_idr   r   r   N)Úaddr   ÚidÚ
push_tokenÚasyncioÚcreate_taskÚ	_send_fcm)r	   r
   r   r   r   s        ú=/var/www/html/jarvis.com/web/backend/app/services/notifier.pyÚnotifyr   
   sk   è è € ð ‡F‚F�< ¤¨u¸4ÀdÐKÑKÔKÑLÔLÐLà„ð KÝÔ�I d¤o°u¸dÀDÑIÔIÑJÔJÐJÐJÐJðKð Kó    r   c              ƒ   ó˜   K  — |                       t          |¦  «        ƒ d{V —†}|r"|j        rt          | ||||¦  «        ƒ d{V —† dS dS dS )z=Fetch user by ID and create in-app notification (+ FCM push).N)Úgetr   Ú	is_activer   )r	   r   r   r   r   r
   s         r   Únotify_user_by_idr      s€   è è € ð —’�˜gÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&€DØð 2�”ð 2Ý�R˜˜u d¨DÑ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1ð2ð 2ð 2ð 2r   c              ƒ   óH  K  — |                       t          t          ¦  «                             t          j        dk    t          j        dk    ¦  «        ¦  «        ƒ d{V —†}|                     ¦   «                              ¦   «         D ]}t          | ||||¦  «        ƒ d{V —† ŒdS )zHCreate in-app notification for all active admins (+ FCM push per admin).ÚadminTN)	Úexecuter   r   ÚwhereÚroler   ÚscalarsÚallr   )r	   r   r   r   Úresultr   s         r   Únotify_adminsr&      sº   è è € à—:’:Ý�t‰Œ×Ò�4œ9¨Ò/µ´À4Ò1GÑHÔHñô ð ð ð ð ð ð €Fð —’Ñ!Ô!×%Ò%Ñ'Ô'ð 3ð 3ˆÝ�R˜  t¨TÑ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ð3ð 3r   Ú
thread_keyc           	   ƒ   ó^  K  — |                       t          d¦  «        ƒ d{V —†}|r|j        sdS d}|rP|                       t          |¦  «        ƒ d{V —†}|r-|j        r&	 t          |j        ¦  «        }n# t          $ r Y nw xY wt          j        t          |j        ||||¦  «        ¦  «         dS )zWSend Telegram message to the user group channel, optionally to a specific topic thread.Útelegram_user_group_idN)r   r   ÚvalueÚintÚ
ValueErrorr   r   Ú_send_telegram)r	   r   r   r   r'   ÚsettingÚ	thread_idÚthread_settings           r   Únotify_user_groupr1   '   sæ   è è € à—F’F�:Ð'?Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@€GØð ˜'œ-ð ØˆØ €IØð Ø!Ÿvšv¥j°*Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=ˆØð 	˜nÔ2ð 	ðÝ Ô 4Ñ5Ô5�	�	øÝð ð ð Ø�ðøøøåÔ� w¤}°e¸TÀ4ÈÑSÔSÑTÔTÐTÐTÐTs   ÁA3 Á3
B Á?B c              ƒ   ó¸   K  — |                       t          d¦  «        ƒ d{V —†}|r2|j        r-t          j        t          |j        |||¦  «        ¦  «         dS dS dS )z1Send Telegram message to the admin group channel.Útelegram_admin_group_idN)r   r   r*   r   r   r-   )r	   r   r   r   r.   s        r   Únotify_admin_groupr4   7   s~   è è € à—F’F�:Ð'@ÑAÔAÐAÐAÐAÐAÐAÐA€GØð N�7”=ð NÝÔ�N¨7¬=¸%ÀÀtÑLÔLÑMÔMÐMÐMÐMðNð Nð Nð Nr   Úchat_idÚmessage_thread_idc              ƒ   ó¶   K  — 	 ddl m} d|› d|› �}|r|d|› �z  } || ||¦  «        ƒ d {V —† d S # t          $ r}t          d|› �¦  «         Y d }~d S d }~ww xY w)Nr   )Úsend_telegramz
*[Jarvis] z*
z
https://jarvis.goteku.comz[notifier] Telegram error: )Úapp.services.telegramr8   Ú	ExceptionÚprint)r5   r   r   r   r6   r8   ÚmsgÚes           r   r-   r-   @   sÂ   è è € ð1Ø7Ð7Ð7Ð7Ð7Ð7Ø+˜5Ð+Ð+ TÐ+Ð+ˆØð 	8ØÐ7°Ð7Ð7Ñ7ˆCØˆm˜G SÐ*;Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<øÝð 1ð 1ð 1ÝÐ/¨AÐ/Ð/Ñ0Ô0Ð0Ð0Ð0Ð0Ð0Ð0Ð0øøøøð1øøøs   „+1 ±
A»AÁAÚtokenc              ƒ   ó˜   K  — 	 ddl m}  || ||d|i¦  «        ƒ d {V —† d S # t          $ r}t          d|› �¦  «         Y d }~d S d }~ww xY w)Nr   )Ú	send_pushr   z[notifier] FCM error: )Úapp.services.push_notificationr@   r:   r;   )r>   r   r   r   r@   r=   s         r   r   r   K   s—   è è € ð,Ø<Ð<Ð<Ð<Ð<Ð<Øˆi˜˜u d¨V°T¨NÑ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;øÝð ,ð ,ð ,ÝÐ* qÐ*Ð*Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+øøøøð,øøøs   „" ¢
A	¬AÁA	)r   )r   N)N)Ú__doc__r   Úsqlalchemy.ext.asyncior   Ú
sqlalchemyr   Úapp.models.notificationr   Úapp.models.userr   Úapp.models.app_settingr   Ústrr   r+   r   r&   r1   r4   r-   r   © r   r   ú<module>rJ      sn  ðØ JÐ JØ €€€Ø /Ð /Ð /Ð /Ð /Ð /Ø Ð Ð Ð Ð Ð Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø  Ð  Ð  Ð  Ð  Ð  Ø -Ð -Ð -Ð -Ð -Ð -ð	Kð 	K�\ð 	K¨ð 	K°cð 	KÀð 	KÈCð 	KÐY]ð 	Kð 	Kð 	Kð 	Kð 57ð2ð 2 ð 2°sð 2À3ð 2Ø#&ð2Ø.1ð2Ø;?ð2ð 2ð 2ð 2ð3ð 3˜Lð 3°ð 3¸Cð 3Àsð 3ÐTXð 3ð 3ð 3ð 3ðUð U ð U°Sð UÀð UÈ3ð UÐadÐgkÑakð UÐw{ð Uð Uð Uð Uð Nð N ð N°cð NÀð NÈCð NÐY]ð Nð Nð Nð Nð1ð 1 #ð 1¨cð 1¸ð 1ÀCð 1Ð\_ÐbfÑ\fð 1Ðrvð 1ð 1ð 1ð 1ð,˜3ð , sð ,°#ð ,¸Sð ,ÀTð ,ð ,ð ,ð ,ð ,ð ,r   