
    kUOi                     x   d dl m Z  d dlmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZ d dlmZ d dlmZ  G d de      Z G d de      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d d e      Z G d! d"e      Z  G d# d$e      Z! G d% d&e      Z" G d' d(e      Z# G d) d*e      Z$ G d+ d,e      Z% G d- d.e      Z& G d/ d0e      Z' G d1 d2e      Z( G d3 d4e      Z) G d5 d6e      Z* G d7 d8e      Z+ G d9 d:e      Z, G d; d<e      Z- G d= d>e      Z. G d? d@e      Z/ G dA dBe      Z0 G dC dDe      Z1 G dE dFe      Z2 G dG dHe      Z3 G dI dJe      Z4 G dK dLe      Z5yM)N    )datetime)ColumnIntegerStringTextDateTime
ForeignKeyIndexBooleanJSONFloatNumericEnum)relationship)Basec                       e Zd ZdZ eedd      Z e ed      d      Z e ed      d      Z	 e ed      d	
      Z
 eeej                  
      Z edd      Z edd      Z edd      Z edd      Zy)TenanttenantsTprimary_keyindex   Fnullabled   2   activedefaultUsertenantback_populatesCustomerTemplateNotificationN)__name__
__module____qualname____tablename__r   r   idr   nameindustrystatusr   r   utcnow
created_atr   users	customers	templatesnotifications     '/var/www/notifications/app/db/models.pyr   r      s    M	T	6B&+.DfSkD1HF2J1F(//:J9EZAIZAI IMr6   r   c                       e Zd ZdZ eedd      Z ee ed      d      Z e e	d      ddd      Z
 e e	d            Z e e	d	      d
      Z eeej                        Z edd      Z edd
      Zy)r    r1   Tr   
tenants.idFr   r   )uniquer   r   r   userr   r   r"   ApiKeyN)r'   r(   r)   r*   r   r   r+   r	   	tenant_idr   emailpassword_hashroler   r   r/   r0   r   r!   api_keysr5   r6   r7   r    r       s    M	T	6Bw
< 85II6#;t4%HE6#;'M&*f-D(//:J(7;FHV<Hr6   r    c                      e Zd ZdZ eedd      Z ee ed      d      Z ee ed      d      Z	 e e
d      d      Z e e
d      dd	      Z eee
      Z eeej$                  
      Z eed      Z edd      Zy)r<   rA   Tr   r9   Fr   zusers.idr   r   r   r   r    r"   N)r'   r(   r)   r*   r   r   r+   r	   r=   user_idr   r,   key_hashr   listscopesr   r   r/   r0   
expires_atr   r;   r5   r6   r7   r<   r<   $   s    M	T	6Bw
< 85IIWj4uEG&+.DfSkE>HD$'F(//:J40Jz:Dr6   r<   c                      e Zd ZdZ eedd      Z ee ed      d      Z e e	d      d      Z
 e e	d      d      Z e e	d	      d      Z e e	d	      d      Z e e	d	      d      Z eed
      Z eee
      Z eee
      Z eeej0                  
      Z edd      Z eddd       eddd      fZy)r$   r2   Tr   r9   Fr   r   r   r   r   r   r"   idx_customer_tenant_emailr=   r>   idx_customer_tenant_phonephoneN)r'   r(   r)   r*   r   r   r+   r	   r=   r   rL   r>   
tg_chat_id
vk_user_idmax_user_idr   opt_outr   rF   tagsdictmetar   r   r/   r0   r   r!   r
   __table_args__r5   r6   r7   r$   r$   3   s    M	T	6Bw
< 85II6":-E6#;.Esd3Jsd3Jt4KWe,G$%D$%D(//:J(;?F 	);@);@Nr6   r$   c                   T   e Zd ZdZ eedd      Z ee ed      d      Z e e	d      d      Z
 e e	d      dd      Z eee	      Z eed      Z eee	      Z eeej*                  	      Z eeej*                  ej*                  
      Z edd      Z edd      Zy)r%   r3   Tr   r9   Fr   r   rC   r   r   onupdater   r"   r&   templateN)r'   r(   r)   r*   r   r   r+   r	   r=   r   r,   slugr   rR   channel_strategyr   contentrF   	variablesr   r   r/   r0   
updated_atr   r!   r4   r5   r6   r7   r%   r%   J   s    M	T	6Bw
< 85II&+.D&+T:DdD1 TE*GtT*I(//:J(//HOOTJ(;?F 
KMr6   r%   c                       e Zd ZdZ eedd      Z ee ed      d      Z e e	d      d      Z
 eee      Z eeej                         Zy	)
SegmentsegmentsTr   r9   Fr   r   r   N)r'   r(   r)   r*   r   r   r+   r	   r=   r   r,   r   rR   filterr   r   r/   r0   r5   r6   r7   r_   r_   ]   sT    M	T	6Bw
< 85II&+.DD$'F(//:Jr6   r_   c                   p   e Zd ZdZ eedd      Z ee ed      d      Z ee ed      d      Z	 eed      Z
 ee ed      d      Z eee	      Z eed      Z e ed
      d	      Z e ed      ddd      Z eeej*                  	      Z edd      Z edd      Z edd      Zy)r&   r4   Tr   r9   Fr   templates.idcustomers.idr   r   pendingr   )r:   r   r   r   r"   r%   DeliverynotificationN)r'   r(   r)   r*   r   r   r+   r	   r=   template_id
segment_idcustomer_idr   rR   payloadr   scheduled_atr   r.   idempotency_keyr   r/   r0   r   r!   rX   
deliveriesr5   r6   r7   r&   r&   g   s    #M	T	6Bw
< 85II*^"<uMK$/J*^"<tLKT4(G(T2LF2J	2FVC[DQO(//:J(?CFJGHjHJr6   r&   c                   x   e Zd ZdZ eedd      Z ee ed      d      Z e e	d      d      Z
 e e	d      d      Z e e	d      d	
      Z eed
      Z eed      Z eed      Z eed      Z eed      Z eee
      Z edd      Z edd       edd       edd       edd      fZy)rf   rn   Tr   notifications.idFr   r   r   re   r   r   r&   r"   idx_delivery_notificationnotification_ididx_delivery_statusr.   idx_delivery_opened_at	opened_atidx_delivery_clicked_at
clicked_atN)r'   r(   r)   r*   r   r   r+   r	   rr   r   channeltargetr.   attemptsr   
last_errorr   sent_atru   rw   r   rR   response_metar   rg   r
   rT   r5   r6   r7   rf   rf   z   s     M	T	6BWj1C&DuUOVBZ%0GF3K%0FF2J	2Fgq)Ht,JX-Gx$/I40J4.M|LL 	)+<=#X.&4'6	Nr6   rf   c                      e Zd ZdZ eedd      Z ee ed      d      Z e e	d      d      Z
 e e	d      d      Z eee	      Z eed	      Z eed      Z eed
	      Z eed
	      Z eeej,                  	      Zy)WebhookwebhooksTr   r9   Fr     r   r   r   N)r'   r(   r)   r*   r   r   r+   r	   r=   r   urlsecretr   rF   eventsr   	is_activer   last_triggeredsuccess_countfailure_countr   r/   r0   r5   r6   r7   r   r      s    M	T	6Bw
< 85II
u
-CF3K%0FD$'Fw-IHt4N7A.M7A.M(//:Jr6   r   c                       e Zd ZdZ eedd      Z ee ed      d      Z ee ed      d      Z	 e e
d      d      Z eee	      Z eed      Z eed
	      Zy)WebhookEventwebhook_eventsTr   r9   Fr   zwebhooks.idr   r   r   N)r'   r(   r)   r*   r   r   r+   r	   r=   
webhook_idr   typer   rR   rk   r   delivered_atrz   r5   r6   r7   r   r      so    $M	T	6Bw
< 85IIM!:UKJ&+.DT4(G(T2Lgq)Hr6   r   c                      e Zd ZdZ eedd      Z ee ed      d      Z e e	d      d      Z
 e e	d      d      Z eed      Z e e	d      d      Z e e	d      d      Z e e	d      d      Z e e	d      d      Z eed      Z eed      Z eeej,                        Z eeej,                  ej,                  	      Zy
)EmailConfigemail_configsTr   r9   Fr   r   r   rV   N)r'   r(   r)   r*   r   r   r+   r	   r=   r   r,   	smtp_host	smtp_port	smtp_usersmtp_password
from_email	from_namer   use_tls
is_defaultr   r   r/   r0   r]   r5   r6   r7   r   r      s    #M	T	6Bw
< 85II&+.Dvc{U3Iw/Ivc{T2I6#;6Mse4Jvc{T2IWd+G/J(//:J(//HOOTJr6   r   c                   L   e Zd ZdZ eedd      Z ee ed      d      Z e e	d      d      Z
 e e	d      d      Z e e	d      d      Z eee	      Z eed	      Z eeej(                  	      Z eeej(                  ej(                  
      Z eddd      fZy)CustomFieldcustom_fieldsTr   r9   Fr   r   r   r   rV   idx_custom_field_tenant_namer=   r,   N)r'   r(   r)   r*   r   r   r+   r	   r=   r   r,   labelr   r   rF   optionsr   requiredr   r   r/   r0   r]   r
   rT   r5   r6   r7   r   r      s    #M	T	6Bw
< 85II&+.D6#;/E&*u-DT4(Ggu-H(//:J(//HOOTJ 	,k6BNr6   r   c                       e Zd ZdZ eedd      Z ee ed      d      Z ee ed      d      Z	 e e
d      d      Z eed      Z eee	      Z eeej&                  	      Zy
)DLQdlqTr   r9   Fr   rp   r   r   N)r'   r(   r)   r*   r   r   r+   r	   r=   rr   r   rx   r   reasonr   rR   rk   r   r   r/   r0   r5   r6   r7   r   r      st    M	T	6Bw
< 85IIWj1C&DuUOVBZ%0GD5)FT4(G(//:Jr6   r   c                       e Zd ZdZdZ eedd      Z e ed      dd      Z	 ee
      Z e edd	      d
      Z eed
      Z eee      Z eed      Z eeej,                        Z edd      Zy)Planu   Тарифные планыplansTr   r   Fr   r:   
      r   r   Subscriptionplanr"   N)r'   r(   r)   __doc__r*   r   r   r+   r   r,   r   descriptionr   monthly_pricenotifications_limitr   rR   featuresr   r   r   r   r/   r0   r   subscriptionsr5   r6   r7   r   r      s    %M	T	6B&+d;D,K72q>E:M 59dD)Hw-I(//:J GMr6   r   c                   B   e Zd ZdZdZ eedd      Z ee ed      d      Z	 ee ed      d      Z
 e ed	      d
      Z eeej                        Z eed      Z eed      Z eeej                        Z edd      Z edd      Z edd      Zy)r   uB   Подписки тенантов на тарифные планыr   Tr   r9   Fr   zplans.idr   pending_paymentr   r   r"   UsageRecordsubscriptionPaymentN)r'   r(   r)   r   r*   r   r   r+   r	   r=   plan_idr   r.   r   r   r/   
started_atrH   r   
auto_renewr0   r   r   usage_recordspaymentsr5   r6   r7   r   r      s    L#M	T	6Bw
< 85IIWj4uEGF2J(9:F(//:J40J.J(//:J?D ~NMInEHr6   r   c                   8   e Zd ZdZdZ eedd      Z ee ed      d      Z	 ee ed      d      Z
 eed      Z eed      Z eed	
      Z eed      Z eeej"                  
      Z eeej"                  ej"                        Z edd      Zy)r   ui   Записи об использовании (сколько уведомлений отправлено)r   Tr   r9   Fr   subscriptions.idr   r   rV   r   r"   N)r'   r(   r)   r   r*   r   r   r+   r	   r=   subscription_idr   period_start
period_endnotifications_sentr   r   r/   r0   r]   r   r   r5   r6   r7   r   r      s    s#M	T	6Bw
< 85IIWj1C&DuUO(U3L51J3 59(//:J(//HOOTJOLr6   r   c                   r   e Zd ZdZdZ eedd      Z ee ed      d      Z	 ee ed      d      Z
 e ed	d
      d      Z e ed      d      Z e ed      d      Z e ed            Z e ed      dd      Z eee      Z eeej.                        Z eed      Z edd      Zy)r   u   История платежейr   Tr   r9   Fr   r   r   r      USDr   r   re   r   )r:   r   r   r"   N)r'   r(   r)   r   r*   r   r   r+   r	   r=   r   r   amountr   currencyr.   payment_methodtransaction_idr   rR   payment_metadatar   r   r/   r0   completed_atr   r   r5   r6   r7   r   r     s    )M	T	6Bw
< 85IIWj1C&DuUOGBNU3FfQi/HF2J	2FF2J'NF3KDANdD1(//:J(T2LzJLr6   r   c                      e Zd ZdZdZ eedd      Z ee ed      d      Z	 e e
d      d      Z eed      Z eed      Z eed      Z ee      Z eed	      Z eeej*                  	      Z eed      Zy
)
LimitAlertu=   Уведомления о превышении лимитовlimit_alertsTr   r9   Fr   r   r   N)r'   r(   r)   r   r*   r   r   r+   r	   r=   r   
alert_type	thresholdcurrent_usagelimit_valuer   messager   is_sentr   r   r/   r0   r|   r5   r6   r7   r   r   $  s    G"M	T	6Bw
< 85IIr
U3Jw/I7U3M51KTlGWe,G(//:JX-Gr6   r   c                   4   e Zd ZdZdZ eedd      Z ee ed      dd      Z	 e e
dd	      d
d      Z e e
dd	      d
d      Z e e
dd	      d
d      Z eeej                         Z eeej                   ej                         Z edd      Zy)UserBalanceu%   Баланс пользователяuser_balancesTr   r9   Fr   r   r   r   )r   r   r   rV   r   balancebackrefN)r'   r(   r)   r   r*   r   r   r+   r	   r=   r   r   total_depositedtotal_spentr   r   r/   r0   r]   r   r!   r5   r6   r7   r   r   4  s    /#M	T	6Bw
< 85QUVIWR^Q?GWR^QGOQUCK(//:J(//HOOTJ (I6Fr6   r   c                   B   e Zd ZdZdZ eedd      Z ee ed      d      Z	 e e
d      d      Z e ed	d
      d      Z e ed	d
      d      Z e ed	d
      d      Z e e
d            Z e e
d            Z eeej(                        Z ed      Zy)BalanceTransactionu(   Транзакции по балансуbalance_transactionsTr   r9   Fr      r   r   r   r   r   N)r'   r(   r)   r   r*   r   r   r+   r	   r=   r   transaction_typer   r   balance_beforebalance_afterr   reference_idr   r   r/   r0   r   r!   r5   r6   r7   r   r   D  s    2*M	T	6Bw
< 85IIfRj59GBNU3FGBNU;N72q>E:M%K&+&L(//:J (#Fr6   r   c                      e Zd ZdZdZ eedd      Z ee ed      d      Z	 e e
d      d      Z e e
d	      d      Z eee
      Z e e
d      d
      Z eed      Z eed      Z e e
d      d      Z eed      Z eee
      Z eed
      Z eeej6                  
      Z eeej6                  ej6                        Z edd      Z e dd       e dd       e dd      fZ!y)IntegrationuF   Интеграции с внешними системами (CRM, etc)integrationsTr   r9   Fr   r   r   r   re   rV   IntegrationSyncLogintegrationr"   idx_integration_tenantr=   idx_integration_typer   idx_integration_statusr.   N)"r'   r(   r)   r   r*   r   r   r+   r	   r=   r   r   r,   r   rR   configr.   r   last_sync_atr   r{   
error_typeerror_timestamp
sync_statsr   r   r   r/   r0   r]   r   	sync_logsr
   rT   r5   r6   r7   r   r   V  s   P"M	T	6Bw
< 85II&*u-D&+.DD$'FF2J	2F(T2Lt,Jr
T2JX5Od+Jw-I(//:J(//HOOTJ 1-PI 	&4$f-&1Nr6   r   c                   x   e Zd ZdZdZ eedd      Z ee ed      d      Z	 e e
d      d      Z e e
d      d      Z eed	
      Z eed	
      Z eed	
      Z eed	
      Z eed      Z eeej*                  
      Z eed      Z eee
      Z edd      Z edd       edd      fZy)r   u.   Журнал синхронизации с CRMintegration_sync_logsTr   integrations.idFr   r   r   r   r   r   r"   idx_sync_log_integrationintegration_ididx_sync_log_statusr.   N)r'   r(   r)   r   r*   r   r   r+   r	   r   r   	sync_typer.   records_processedrecords_createdrecords_updatedrecords_failedr   error_messager   r   r/   r   r   r   rR   sync_metadatar   r   r
   rT   r5   r6   r7   r   r   s  s    8+M	T	6BGZ0A%BUSNvbzE2IF2J/Fw2Wa0OWa0OGQ/N4$/M(//:J(T2L4.M }[IK 	(*:;#X.Nr6   r   c                      e Zd ZdZdZ eedd      Z ee ed      d      Z	 ee
e      Z ee
e      Z ee
e      Z eeej$                        Z eeej$                  ej$                  	      Z ed
d      fZy)CRMFieldMappinguH   Сопоставление полей CRM с полями системыcrm_field_mappingsTr   r   Fr   r   rV   idx_crm_mapping_integrationr   N)r'   r(   r)   r   r*   r   r   r+   r	   r   r   rR   field_mappingsrF   r   automation_rulesr   r   r/   r0   r]   r
   rT   r5   r6   r7   r  r    s    R(M	T	6BGZ0A%BUSN D$/N D$/NdD1(//:J(//HOOTJ 	+-=>Nr6   r  c                      e Zd ZdZdZ eedd      Z e ed      d      Z	 e ed      dd	      Z
 e ed
      d      Z eed      Z e ed      d      Z eed      Z eee      Z eee      Z eee      Z eed      Z eed      Z eeej6                        Z edd       edd      fZy)IndustryTemplateuD   Готовые шаблоны для разных индустрийindustry_templatesTr   r   Fr   r   r   r   r   r   idx_industry_template_industryr-   idx_industry_template_triggertrigger_typeN)r'   r(   r)   r   r*   r   r   r+   r   r-   keyr,   r   r   r  delay_hoursr   rR   r[   rF   r\   channelsr   is_active_by_defaultis_editabler   r   r/   r0   r
   rT   r5   r6   r7   r  r    s    N(M	T	6BfRj51H
uT
:C&+.D-K&+6L!,KT4(GtT*IdD)H!'48$/K(//:J 	.
;-~>Nr6   r  c                      e Zd ZdZdZ eedd      Z ee ed      d      Z	 ee ed      d      Z
 ee ed	      d      Z e ed
      d      Z eed      Z eed      Z eed      Z eee      Z eed      Z eeej0                        Z eeej0                  ej0                        Z edd       edd       edd      fZy)UserIndustryTemplateug   Копия отраслевого шаблона для конкретного пользователяuser_industry_templatesTr   r9   Fr   zindustry_templates.idrc   r   r   rV   idx_user_template_tenantr=   idx_user_template_industryindustry_template_ididx_user_template_activer   N)r'   r(   r)   r   r*   r   r   r+   r	   r=   r  rh   r   custom_namer   custom_contentcustom_delay_hoursr   r   rF   r  	is_customr   r   r/   r0   r]   r
   rT   r5   r6   r7   r  r    s    q-M	T	6Bw
< 85II!':6M+NY^_*^"<tLK t4KD40N$7 w-IdD)Hw.I(//:J(//HOOTJ 	(+6*,BC(+6Nr6   r  c                   n   e Zd ZdZdZ eedd      Z ee ed      d      Z	 e e
d      d      Z e e
d      d      Z eed      Z e e
d	      d      Z eed
      Z eeej(                  
      Z eeej(                  ej(                        Z edd       edd       edd      fZy)CustomTriggeruE   Кастомные триггеры для пользователейcustom_triggersTr   r9   Fr   r   r   r   rV   idx_custom_trigger_tenantr=   idx_custom_trigger_namer,   idx_custom_trigger_categorycategoryN)r'   r(   r)   r   r*   r   r   r+   r	   r=   r   r,   display_namer   r   r"  r   r   r   r   r/   r0   r]   r
   rT   r5   r6   r7   r  r    s    O%M	T	6Bw
< 85II&+.D&+6L-KfSkD1Hw-I(//:J(//HOOTJ 	);7'0+Z8Nr6   r  c                      e Zd ZdZdZ eedd      Z ee ed      d      Z	 ee ed      d      Z
 ee ed	      d      Z ee ed
      d      Z eed      Z eee      Z eee      Z e ed      d      Z ee ed      d      Z e ed      d      Z e ed      d      Z eeej4                        Z eed      Z edd       edd       edd      fZy)ScheduledNotificationu_   Запланированные уведомления для отправки в будущемscheduled_notificationsTr   r9   Fr   rd   rc   user_industry_templates.idr   r   re   rp   r   r   idx_scheduled_tenantr=   idx_scheduled_timerl   idx_scheduled_statusr.   N)r'   r(   r)   r   r*   r   r   r+   r	   r=   rj   rh   user_template_idr   rl   r   rR   rk   rF   r  r   r.   rr   r  external_idr   r/   r0   r|   r
   rT   r5   r6   r7   r%  r%    s   i-M	T	6Bw
< 85II*^"<uMK*^"<tLKgz2N'OZ^_ (U3L T4(GdD)H F2J	2FWj1C&DtTO &+5Lt4K(//:JX-G 	$k2"N3$h/Nr6   r%  c                      e Zd ZdZdZ eedd      Z ee ed      d      Z	 e e
d      d      Z ee ed	      d      Z ee ed
      d      Z eed      Z e e
d      d      Z e e
d      d      Z eed      Z eed      Z eed      Z eed      Z eed      Z eeej4                        Z eeej4                  ej4                        Z edd       edd       edd      fZy)RecurringScheduleud   Повторяющиеся расписания для автоматических рассылокrecurring_schedulesTr   r9   Fr   r   rc   r'  r   r   r   r   rV   idx_recurring_schedule_tenantr=   idx_recurring_schedule_activer   idx_recurring_schedule_next_runnext_run_atN)r'   r(   r)   r   r*   r   r   r+   r	   r=   r   r,   rh   r+  ri   cron_expressionschedule_typer   schedule_configr   r   r   r3  last_run_at
sent_countr   r/   r0   r]   r
   rT   r5   r6   r7   r.  r.    s$   n)M	T	6Bw
< 85II&+.D *^"<tLKgz2N'OZ^_$/J VC[48O6":6MTD1O w-ID1KD1K +J(//:J(//HOOTJ 	-{;-{;/?Nr6   r.  c                   8   e Zd ZdZ eedd      Z ee ed      dd      Z ee	d      Z
 e ed      d      Z e ed      d      Z e ed	      d
      Z eeej"                        Z eeej"                  ej"                        Z edd      Zy)TelegramBottelegram_botsTr   r9   Fr   r   r   r   r   r   rV   r   telegram_botr   N)r'   r(   r)   r*   r   r   r+   r	   r=   r   bot_token_encr   usernamewebhook_secretr.   r   r   r/   r0   r]   r   r!   r5   r6   r7   r:  r:  4  s    #M	T	6Bw
< 85QUVI4%0MfSkD1HF3K$7NF2J1F(//:J(//HOOTJ(N;Fr6   r:  c                      e Zd ZdZdZ eedd      Z ee ed      d      Z	 e e
d      d      Z e e
d	      d      Z eed      Z eed      Z e e
d      d      Z e e
d	      d
      Z e e
d      d      Z eed      Z eeej.                        Z eeej.                  ej.                        Z edd      Z eddd       eddd      fZy)TelegramMtprotoAccountud   MTProto аккаунты для отправки сообщений от разных номеровtelegram_mtproto_accountsTr   r9   Fr   r   r   r   r   r   rV   r   r   idx_mtproto_tenant_statusr=   r.   idx_mtproto_tenant_defaultr   N)r'   r(   r)   r   r*   r   r   r+   r	   r=   r   r,   rL   api_idr   api_hash_encr>  r.   session_pathr   r   r   r   r/   r0   r]   r   r!   r
   rT   r5   r6   r7   rA  rA  C  s    n/M	T	6Bw
< 85II&+.D6":.EGe,F$/LfSkD1HF2J1F&+5L/J(//:J(//HOOTJ(,GHF 	);A*KFNr6   rA  c                   ^   e Zd ZdZdZ eedd      Z ee ed      d      Z	 e e
d      d      Z e e
d	      d      Z eed      Z e e
d
      d      Z eeej$                        Z eeej$                  ej$                        Z edd      Z edd       edd      fZy)VkGroupu>   VK группы для отправки уведомлений	vk_groupsTr   r9   Fr   r   r   r   r   r   rV   r   r   idx_vk_group_tenantr=   idx_vk_group_group_idgroup_idN)r'   r(   r)   r   r*   r   r   r+   r	   r=   r   r,   rM  r   access_token_encr.   r   r   r/   r0   r]   r   r!   r
   rT   r5   r6   r7   rI  rI  \  s    HM	T	6Bw
< 85II&+.DfSkE2HdU3F2J1F(//:J(//HOOTJ(K8F 	#[1%z2Nr6   rI  c                      e Zd ZdZ eedd      Z ee ed      dd      Z e e	d      d	      Z
 ee ed
      d      Z eeej                  	      Z eeej                  ej                        Z edd      Z edeg      Zy)TenantSettingstenant_settingsTr   r9   Fr   r   systemr   ztelegram_mtproto_accounts.idr   rV   r   settingsr   rA  )foreign_keysN)r'   r(   r)   r*   r   r   r+   r	   r=   r   	tg_sendermtproto_account_idr   r   r/   r0   r]   r   r!   mtproto_accountr5   r6   r7   rP  rP  q  s    %M	T	6Bw
< 85QUVIvbz84I4R)S^bc(//:J(//HOOTJ(J7F"#;K]J^_Or6   rP  c                       e Zd ZdZdZ eedd      Z ee ed      d      Z	 e e
d      d      Z e e
d      d      Z e e
d      d      Z eed      Z eed      Z eed      Z e e
d      d      Z e e
d      d      Z e ed	d
dd      dd	      Z eeej0                        Z eeej0                  ej0                        Z edd      Z edd       edd       edd      fZy)CRMConnectionu3   CRM подключения в режиме BYO-Keyscrm_connectionsTr   r9   Fr   r   re   	connectederrorcrm_connection_status)r,   )r   r   r   rV   r   r   idx_crm_connections_tenant_idr=   idx_crm_connections_statusr.   idx_crm_connections_domaindomainN)r'   r(   r)   r   r*   r   r   r+   r	   r=   r   
portal_url	client_idclient_secretr   access_tokenrefresh_tokenr   rH   ra  	member_idr   r.   r   r/   r0   r]   r   r!   r
   rT   r5   r6   r7   rY  rY    s   =%M	T	6Bw
< 85IIse4Jvc{U3I6#;7M$.L4$/M40JF3K$/Fvc{T2IDK?VWbgqz{F(//:J(//HOOTJ(,=>F 	-{;*H5*H5Nr6   rY  c                      e Zd ZdZdZ eedd      Z ee ed      d      Z	 e e
d      d      Z ee ed	      d      Z ee ed
      d      Z eed      Z eed      Z eeej(                        Z eeej(                  ej(                        Z edd      Z edd      Z edd      Z edd       edd      fZy)RuleuY   Правила с условиями для автоматических рассылокrulesTr   r9   Fr   r   rc   r'  r   rV   r   r   r%   r  idx_rule_tenantr=   idx_rule_activer   N)r'   r(   r)   r   r*   r   r   r+   r	   r=   r   r,   rh   r+  r   
conditionsr   r   r   r   r/   r0   r]   r   r!   rX   user_templater
   rT   r5   r6   r7   ri  ri    s    cM	T	6Bw
< 85II&+.D *^"<tLKgz2N'OZ^_ u-J w-I(//:J(//HOOTJ(G4FJ8H !7IM 	--Nr6   ri  c                      e Zd ZdZdZ eedd      Z ee ed      d      Z	 e e
d      d      Z e e
d      d      Z eed	      Z eed
	      Z eed
	      Z eeej&                  	      Z eeej&                  ej&                        Z edd      Z edddd      Z edd       edd       edd      fZy)Chainu6   Цепочки уведомлений (drip campaigns)chainsTr   r9   Fr   r   r   r   rV   r   r   	ChainStepchainzall, delete-orphanzChainStep.order)r#   cascadeorder_byidx_chain_tenantr=   idx_chain_activer   idx_chain_triggertrigger_eventN)r'   r(   r)   r   r*   r   r   r+   r	   r=   r   r,   ry  r   r   active_chains_countcompleted_chains_countr   r   r/   r0   r]   r   r!   stepsr
   rT   r5   r6   r7   rp  rp    s    @M	T	6Bw
< 85II&+.D 6#;7M w-I !!4#GQ7(//:J(//HOOTJ(H5FWFZevwE 	 +. +.!?3Nr6   rp  c                   B   e Zd ZdZdZ eedd      Z ee ed      d      Z	 eed      Z
 ee ed      d      Z ee ed	      d      Z eed
      Z eeej                         Z edd      Z edd      Z edd      Z edd       eddd      fZy)rr  u.   Шаги цепочки уведомленийchain_stepsTr   z	chains.idFr   rc   r'  r   r   rp  r|  r"   r%   r   r  idx_chain_step_chainchain_ididx_chain_step_orderorderN)r'   r(   r)   r   r*   r   r   r+   r	   r  r  rh   r+  delay_minutesr   r   r/   r0   r   rs  rX   rn  r
   rT   r5   r6   r7   rr  rr    s    8!M	T	6Bgz+6GH 7U+E *^"<tLKgz2N'OZ^_ 7A.M(//:J9EJ>H !7OM 	$j1$j':Nr6   rr  N)6r   
sqlalchemyr   r   r   r   r   r	   r
   r   r   r   r   r   sqlalchemy.ormr   app.db.baser   r   r    r<   r$   r%   r_   r&   rf   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r%  r.  r:  rA  rI  rP  rY  ri  rp  rr  r5   r6   r7   <module>r     s    v v v v ' JT J=4 =;T ;t .Lt L&;d ;I4 I&t 2;d ;	*4 	*U$ U$$ $	;$ 	;H4 H F4 F$P$ P"Kd K&. . 7$ 7 $ $$$ : 4d ,t 04 :D * D  F! !H<$ <T 2d *`T `D 64 >D > r6   