o
    h                     @   s|   d Z ddl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mZmZ ddlmZ eeZG d	d
 d
ZdS )zW
User service for business logic.
Handles user profile management and user operations.
    N)List)HTTPExceptionstatus)Session)User)
UserUpdateUserResponseUserListResponse)get_password_hashc                
   @   s   e Zd ZdZedededefddZede	dedefdd	Z
ed
edededefddZeddede	de	defddZededefddZede	dedefddZede	dededefddZdS )UserServicezService for user operations.emaildbreturnc                 C   s   | ttj| k S )zGet user by email.)queryr   filterr   first)r   r    r   services/user_service.pyget_user_by_email   s   zUserService.get_user_by_emailuser_idc                 C   s0   | ttj| k }|sttjdd|S )zGet user by ID.User not foundstatus_codedetail)r   r   r   idr   r   r   HTTP_404_NOT_FOUND)r   r   userr   r   r   get_user_by_id   s   zUserService.get_user_by_id	user_datacurrent_userc                 C   s|   | j r| j |j kr|ttj | j k rttjdd| jdur'| j|_| j dur0| j |_ |	  |
| t|S )z Update user profile information.#User with this email already existsr   N)r   r   r   r   r   r   r   HTTP_400_BAD_REQUESTnamecommitrefreshr   from_orm)r   r   r   r   r   r   update_user_profile&   s   



zUserService.update_user_profiler   d   skiplimitc                 C   s>   |  t|| }|  t }tdd |D |dS )zGet all users with pagination.c                 S   s   g | ]}t |qS r   )r   r%   ).0r   r   r   r   
<listcomp>G   s    z-UserService.get_all_users.<locals>.<listcomp>)userstotal)r   r   offsetr)   allcountr	   )r   r(   r)   r,   r-   r   r   r   get_all_users@   s   zUserService.get_all_usersc              	   C   sx   | ttj| jk rttjddt| j| jt	| j
| j| j| j| jd}|| |  || t|S )zCreate new user by admin.r    r   )r   r"   password	user_typeratepaidnext_payment_date)r   r   r   r   r   r   r   r!   r"   r
   r2   r3   r4   r5   r6   addr#   r$   r   r%   )r   r   new_userr   r   r   create_user_by_adminK   s$   



z UserService.create_user_by_adminc                 C   s   | ttj| k }|sttjdd|jr4|j|jkr4| ttj|jk r4ttj	ddd|j
fd|jfd|jfd|jfd|jfd	|jfg}|D ]\}}|d
ur^t||| qP|  || t|S )zUpdate user by admin.r   r   r    r"   r   r4   r3   r5   r6   N)r   r   r   r   r   r   r   r   r   r!   r"   r4   r3   r5   r6   setattrr#   r$   r   r%   )r   r   r   r   update_fieldsfieldvaluer   r   r   update_user_by_adminf   s4   	

z UserService.update_user_by_admincurrent_adminc                 C   sb   | ttj| k }|sttjdd|j|jkr#ttjdd|	| |
  dddS )zDelete user by admin.r   r   zCannot delete yourselfzUser deleted successfullyT)messagesuccess)r   r   r   r   r   r   r   r   r!   deleter#   )r   r?   r   r   r   r   r   delete_user_by_admin   s   

z UserService.delete_user_by_adminN)r   r'   )__name__
__module____qualname____doc__staticmethodstrr   r   r   intr   r   r   r&   r	   r1   r9   r>   dictrC   r   r   r   r   r      s<    

( r   )rG   loggingtypingr   fastapir   r   sqlalchemy.ormr   modelsr   schemasr   r   r	   
auth_utilsr
   	getLoggerrD   loggerr   r   r   r   r   <module>   s    
