
    |oia                         d dl Z d dlmZ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 d dlmZ d dlmZ d dlmZ d d	lmZm
Z
  G d
 d      Zy)    N)datetimetimezone)AnyDictListOptionalTuple)Session)AppError)hash_password)t)ActivityLogger)UserAccountr
   c                       e Zd ZdeddfdZddededeee   ef   fdZ		 dde
d	e
d
e
de
de
dee
   defdZde
defdZ	 dde
dee
ef   de
dee
   def
dZ	 dde
de
dee
   defdZy)UserServicedbreturnNc                 2    || _         t        |      | _        y N)_dbr   _logger)selfr   s     O/Users/manta/Documents/Projects/TheRoad-I1/backend/app/services/user_service.py__init__zUserService.__init__   s    %b)    pageper_pagec                 @   | j                   j                  t              j                         }| j                   j                  t              j	                  t        j
                        j                  |dz
  |z        j                  |      j                         }||fS )N   )	r   queryr   countorder_by
created_atoffsetlimitall)r   r   r   totalitemss        r   
list_userszUserService.list_users   sq    {+113HHNN;'Xk,,-VTAX)*U8_SU 	 e|r   usernamedisplay_namepasswordroleactor_idipc           
      h   | j                   j                  t              j                  t        j                  |k(        j                         }|rt        dt        d      d      t        j                  t        j                        j                         }t        t        t        j                               ||t!        |      |d||      }	| j                   j#                  |	       | j                   j%                          | j&                  j)                  |dd|	j*                  ||d|	       |	S )
Nzuser.duplicate_username  codemessagestatus_coder   )idr*   r+   password_hashr-   	is_activer#   
updated_atzuser.createuser)r*   r-   r.   actionresource_typeresource_iddetail
ip_address)r   r    r   filterr*   firstr   r   r   nowr   utc	isoformatstruuiduuid4r   addcommitr   logr6   )
r   r*   r+   r,   r-   r.   r/   existingrC   r:   s
             r   create_userzUserService.create_user   s     88>>+.55k6J6Jh6VW]]_.34  ll8<<(2244::< %'1	
 	T   ($7 	 	
 r   user_idc                     | j                   j                  t              j                  t        j                  |k(        j                         }|st        dt        d      d      |S )Nzuser.not_foundi  r2   )r   r    r   rA   r6   rB   r   r   )r   rN   r:   s      r   get_userzUserService.get_userH   sW    xx~~k*11+..G2KLRRT%*+ 
 r   updatesc           	         | j                  |      }i }i }dD ]4  }||v s||   t        ||      ||<   t        ||||          ||   ||<   6 d|v r"|d   d|d<   t        |d         |_        d|d<   t        j                  t        j                        j                         |_
        | j                  j                          | j                  j                  |dd|||d|       |S )N)r+   r-   r8   r,   z***zuser.updater:   )beforeafterr;   )rP   getattrsetattrr   r7   r   rC   r   rD   rE   r9   r   rJ   r   rK   )	r   rN   rQ   r.   r/   r:   rS   rT   fields	            r   update_userzUserService.update_userR   s     }}W%!# ":EGEN$> 'e 4ueWU^4&u~e	 ;  WZ%8%D!&F:!.wz/B!CD %E*",,x||4>>@  $u5 	 	
 r   c                    | j                  |      }|j                  dk(  r{| j                  j                  t              j                  t        j                  dk(  t        j                  dk(        j                         }|dk  rt        dt        d      d      d|_        t        j                  t        j                        j                         |_        | j                  j                  t               j                  t         j"                  |k(        j%                          | j                  j'                          | j(                  j+                  |dd||	       |S )
Nadminr   z!user.cannot_deactivate_last_adminr1   r2   r   zuser.deactivater:   )r.   r<   r=   r>   r@   )rP   r-   r   r    r   rA   r8   r!   r   r   r   rC   r   rD   rE   r9   r
   rN   deleterJ   r   rK   )r   rN   r.   r/   r:   admin_counts         r   deactivate_userzUserService.deactivate_userv   s    }}W% 99{+((G3[5J5Ja5OP 
 a<AB #  ",,x||4>>@ 	w&&w''ABIIK$  	 	
 r   )r      r   )__name__
__module____qualname__
OrmSessionr   intr	   r   r   r)   rF   r   rM   rP   r   r   rX   r]    r   r   r   r      s    *: *$ *	s 	# 	uT+EVX[E[?\ 	$ !(( ( 	(
 ( ( SM( 
(T   !"" c3h" 	"
 SM" 
"P !	%% % SM	%
 
%r   r   )rG   r   r   typingr   r   r   r   r	   sqlalchemy.ormr
   rb   app.core.errorsr   app.core.securityr   app.i18n.loaderr   app.logging.activity_loggerr   app.models.catalogr   r   rd   r   r   <module>rl      s/     ' 3 3 0 $ +  6 3M Mr   