
    ]ih              
          d Z ddlmZmZmZm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mZmZmZ ddlmZ d	eez  d
efdZ e       Zded
efdZej5                  de       ee	      fded
efd       Zej9                  de       ee	       ee      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d
efd       Zy)uH   System router — endpoints for system-wide settings (maintenance mode).    )	APIRouterDependsHTTPExceptionstatus)AsyncSession)get_db)get_current_user)User)SystemSettingsUpdateSystemStatusResponseTruncateRequestTruncateResponse)system_serviceereturnc                     t        | t              r$t        t        j                  t        |             S t        t        j                  t        |             S )uE   Convert service-layer ValueError → 404 and PermissionError → 403.status_codedetail)
isinstancePermissionErrorr   r   HTTP_403_FORBIDDENstrHTTP_404_NOT_FOUND)r   s    4/var/www/html/spbu.com/backend/app/routers/system.py_service_errorr      s:    !_%)B)B3q6RRV%>%>s1vNN    dbc                    K   t        j                  |        d {   }t        j                  |        d {   }t        j                  |        d {   }t	        |||      S 7 L7 17 w)N)maintenance_modeenvironment_modenumber_format)r   get_maintenance_modeget_env_modeget_number_formatr   )r   maintenanceenv_moder"   s       r   _build_statusr(      sc     &;;B??K#0044H(::2>>M$!#  @4>s1   A.A(A.A*A.A,A.*A.,A.z/status)response_modelc                 4   K   t        |        d{   S 7 w)uD   Public endpoint — no auth required. Returns current system status.N)r(   )r   s    r   
get_statusr+   "   s      r""""s   z	/settingsdatacurrent_userc                   K   |j                   st        t        j                  d      | j                  3t        j                  || j                  |j                         d{    | j                  4	 t        j                  || j                  |j                         d{    | j                  4	 t        j                  || j                  |j                         d{    t        |       d{   S 7 7 Y# t        $ r)}t        t        j                  t        |            d}~ww xY w7 P# t        $ r)}t        t        j                  t        |            d}~ww xY w7 tw)uT   Superadmin only — toggle maintenance mode, environment mode, and/or number format.z+Only Super Admin can change system settingsr   N)is_superadminr   r   r   r    r   set_maintenance_modeidr!   set_env_mode
ValueErrorHTTP_422_UNPROCESSABLE_ENTITYr   r"   set_number_formatr(   )r,   r   r-   r   s       r   update_settingsr6   (   sB     %%11@
 	
 (11"d6K6K\__]]](	a --b$2G2GYYY %	a 222t7I7I<??[[[ r""" 	^ Z 	aF,P,PY\]^Y_``	a \ 	aF,P,PY\]^Y_``	a"s   A"E.$C<%E.6.D  $C>%D  )E.6.D7 $D5%D7 )E.7E,8E.>D   	D2	$D--D22E.5D7 7	E) $E$$E))E.z	/truncatec                 `  K   |j                   st        t        j                  d      t	        j
                  |       d{   }|dk7  rt        t        j                  d      t	        j                  || j                         d{   }t        d| j                   d|      S 7 g7 !w)	uL   Superadmin only, development mode only — truncate operational table group.z$Only Super Admin can truncate tablesr   Ndevelopmentz,Truncate is only allowed in development modezTruncated 'z' successfully)messagerows_deleted)	r/   r   r   r   r   r$   truncate_groupgroupr   )r,   r   r-   r'   r:   s        r   truncate_tablesr=   C   s      %%119
 	
 $0044H= 11A
 	
 (66r4::FFLdjj\8!  5 Gs%   A B.B*AB.
B, B.,B.N) __doc__fastapir   r   r   r   sqlalchemy.ext.asyncior   app.core.databaser   app.dependenciesr	   app.models.userr
   app.schemas.systemr   r   r   r   app.servicesr   r3   r   r   routerr(   getr+   patchr6   postr=    r   r   <module>rK      sD   N = = / $ -   l l 'Oj?2 O} O 
L -A  I&:;(/ # #<P # <#
 k*>? v !12#
## # 	# @#4 [)9: v !12
  	 ;r   