
    ?i              
          d dl mZmZmZ d dl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 d dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ  eddg      Zej9                  ded       ee       ee      fdede	defd       Zej=                  dee          ee       ee      d dfde	d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"y)    )	APIRouterDependsHTTPException)Session)get_db)UserNotificationTemplateSegmentCustomer)get_current_user)NotificationSendNotificationOut)IdempotencyService)RateLimiter)enqueue_notification)get_settingsz/notificationsnotifications)prefixtagsz/send   )response_modelstatus_codedatacurrent_userdbc           
      &   t               }t               }d|j                   }|j                  |d|j                  |j
                        }|st        dd      | j                  r/t        j                  ||j                  | j                        }|r|S |j                  t              j                  t        j                  | j                  k(  t        j                  |j                  k(        j                         }|st        dd      d}	| j                   r8|j                  t"              j                  t"        j                  | j                   k(  t"        j                  |j                  k(        j                         }
|
st        dd	      |
j                  xs i }|j                  t$              j                  t$        j                  |j                  k(        }d
|v r1|j                  t$        j&                  j)                  |d
               }|j+                         }	|	|j,                  kD  rt        dd|	 d|j,                         | j.                  rx|j                  t$              j                  t$        j                  | j.                  k(  t$        j                  |j                  k(        j                         }|st        dd      t        dd      t1        |j                  | j                  | j.                  | j                   | j2                  | j4                  | j                  d      }|j7                  |       |j9                          |j;                  |       t=        j>                  |j                         |S )Nznotification_creation:tenant:   )tokensbucket_sizerefill_ratei  u   Слишком много запросов на создание уведомлений. Пожалуйста, попробуйте позже.r   detail  u   Шаблон не найденu    Сегмент не найденr   i  uR   Сегмент содержит слишком много получателей (u.   ). Максимально разрешено: u   Клиент не найденuM   Необходимо указать либо customer_id, либо segment_idpending)	tenant_idtemplate_idcustomer_id
segment_idpayloadscheduled_atidempotency_keystatus) r   r   r&   check_and_consume,NOTIFICATION_CREATION_RATE_LIMIT_BUCKET_SIZE4NOTIFICATION_CREATION_RATE_LIMIT_REFILL_RATE_PER_SECr   r,   r   check_idempotencyqueryr
   filteridr'   firstr)   r   r   r   overlapcountMAX_RECIPIENTS_PER_NOTIFICATIONr(   r	   r*   r+   addcommitrefreshr   delay)r   r   r   settingslimiterrate_keyallowedexistingtemplaterecipients_countsegmentfilter_configr2   customernotifications                  //var/www/notifications/app/api/notifications.pysend_notificationrI      s    ~H mG.|/E/E.FGH ''IIQQ	 ( G  e
 	
 %77&&(<(<
 O 		t///1C1C|G]G]1]	^	 
 4TUU HHWVGJJ$//173D3DH^H^3^_UW 	
 C8Z[[  ,""))(*<*<@V@V*VW]"LL!6!6}V7L!MNE ;;= hFFFkl|k} ~EEMEmEmDnp 
 
		 HHXVHKK4#3#33X5G5G<KaKa5abUW 	
 C8XYYb
 	
  (($$$$??&&,,	L FF<IIKJJ| |/     )r   d   skiplimitc                 2   |j                  t              j                  t        j                  | j                  k(        j	                  t        j
                  j                               j                  |      j                  |      j                         }|S )N)
r2   r	   r3   r&   order_by
created_atdescoffsetrN   all)r   r   rM   rN   r   s        rH   list_notificationsrU   y   sj     		&&,*@*@@	A	,))..0	1		u	  rJ   z/{notification_id}notification_idc                     |j                  t              j                  t        j                  | k(  t        j                  |j                  k(        j                         }|st        dd      |S )Nr$   u*   Уведомление не найденоr"   )r2   r	   r3   r4   r&   r5   r   )rV   r   r   rG   s       rH   get_notificationrX      s[     		?2L4J4JlNdNd4d	e	 
 4`aarJ   N)#fastapir   r   r   sqlalchemy.ormr   app.db.sessionr   app.db.modelsr   r	   r
   r   r   app.api.depsr   app.api.schemasr   r   app.services.idempotencyr   app.services.rate_limiterr   app.workers.notificationsr   app.core.configr   routerpostrI   getlistintrU   rX    rJ   rH   <module>ri      s>   5 5 " ! I I ) = 7 1 : (	*/1B	C W_#F !!12&/f
ff 	f GfR BtO45 !12&/	  	 6"  A !!12&/ 	 BrJ   