
    1ir                         d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	m
Z
 ddlmZmZ ddlmZ  ej                   e      Z G d	 d
      Zy)z4
Service for managing site settings in the database
    N)AsyncSession)select)HTTPExceptionstatus)SiteSettings)SiteSettingsUpdateSiteSettingsResponse)SchedulerServicec                       e Zd ZdZededefd       Zededefd       Z	edede
defd       Zededefd       Zededefd	       Zy
)SiteSettingsServicez,Service for CRUD operations on site settingsdbreturnc                   K   | j                  t        t              j                  t        j                  dk(               d{   }|j                         j                         }|sct        j                  d       t        d      }| j                  |       | j                          d{    | j                  |       d{    |S 7 7 !7 
w)za
        Get site settings (id=1).
        If it doesn't exist, create it with defaults.
           Nz-[SiteSettings] Creating default site settings)id)executer   r   wherer   scalarsfirstloggerinfoaddcommitrefresh)r   resultsettingss      H/var/www/html/marco-python-backend/app/services/site_settings_service.pyget_or_create_settingsz*SiteSettingsService.get_or_create_settings   s      zz&"6"<"<\__PQ=Q"RSS>>#))+KKGH#q)HFF8))+**X&&& T &s7   ACCA)C.C/CCCCCc                 r   K   t         j                  |        d{   }t        j                  |      S 7 w)zGet current site settingsN)r   r   r	   model_validater   r   s     r   get_settingsz SiteSettingsService.get_settings%   s2      -CCBGG#228<< Hs   757update_datac                   K   	 t         j                  |        d{   }|j                  d      j                         D ]  \  }}t	        ||      st        |||       ! | j                  |       | j                          d{    | j                  |       d{    t        j                  d       t        j                  d|j                          t        j                  d|j                   d|j                   d|j                          t        j                   | |       d{    t#        j$                  |      S 7 /7 7 7  # t&        $ rh}t        j)                  d	t+        |       d
       | j-                          d{  7   t/        t0        j2                  dt+        |             d}~ww xY ww)z
        Update site settings and apply scheduler changes.
        Automatically updates scraping schedule if settings changed.
        NT)exclude_unsetz,[SiteSettings] Settings updated successfullyz![SiteSettings] Scraping Enabled: z[SiteSettings] Frequency: z at  u,   ❌ [SiteSettings] Error updating settings: )exc_infozFailed to update settings: )status_codedetail)r   r   
model_dumpitemshasattrsetattrr   r   r   r   r   scraping_enabledscraping_frequencyscraping_timeclient_timezoner
   update_settingsr	   r    	Exceptionerrorstrrollbackr   r   HTTP_500_INTERNAL_SERVER_ERROR)r   r#   r   fieldvaluees         r   r2   z#SiteSettingsService.update_settings+   s    	0GGKKH !, 6 6T 6 J P P R 4u8U+HeU34 FF8))+**X&&&KKFGKK;H<U<U;VWXKK4X5P5P4QQUV^VlVlUmmnow  pH  pH  oI  J  K #222x@@@'66x@@% L & A  	LLGAxP[_L`++-"AA4SVH= 	s   GE E6E 3E EE  E!BE 1E2E 
GE E E E 	G6G F,G  GGc                   K   t         j                  |        d{   }|j                  r*t        j	                  d       t        j                  |      S d|_        | j                  |       | j                          d{    | j                  |       d{    t        j	                  d       t        j                  | |       d{    t        j                  |      S 7 7 g7 P7 w)z%Enable scraping with current settingsNz'[SiteSettings] Scraping already enabledTu#   [SiteSettings] ✅ Scraping enabled)r   r   r.   r   r   r	   r    r   r   r   r
   r2   r!   s     r   enable_scrapingz#SiteSettingsService.enable_scrapingR   s      -CCBGG$$KKAB'66x@@$(!
xiikjj"""9:..r8<<<#228<< H 	" 	=sF   C/C'A%C/C)C/C+2C/C-C/)C/+C/-C/c                   K   t         j                  |        d{   }|j                  s*t        j	                  d       t        j                  |      S d|_        | j                  |       | j                          d{    | j                  |       d{    t        j	                  d       t        j                          d{    t        j                  |      S 7 7 e7 N7 w)zDisable scheduled scrapingNz([SiteSettings] Scraping already disabledFu$   [SiteSettings] ✅ Scraping disabled)r   r   r.   r   r   r	   r    r   r   r   r
   stop_scraping_jobr!   s     r   disable_scrapingz$SiteSettingsService.disable_scrapinge   s      -CCBGG((KKBC'66x@@$)!
xiikjj""":;00222#228<< H 	" 	3sF   C-C%A%C-C'C-C)0C-C+C-'C-)C-+C-N)__name__
__module____qualname____doc__staticmethodr   r   r   r	   r"   r   r2   r<   r?        r   r   r      s    6 ,  " =| =0D = =
 $$'$ 
$ $L =, =3G = =$ =< =4H = =rF   r   )rC   loggingsqlalchemy.ext.asyncior   
sqlalchemyr   fastapir   r   app.models.site_settingsr   app.schemas.site_settingsr   r	   app.services.scheduler_servicer
   	getLoggerr@   r   r   rE   rF   r   <module>rO      s?     /  ) 1 N ;			8	$f= f=rF   