o
    <6j                     @   s(  d dl m Z m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 deded	ee fd
dZ		d dedededee ded	eeef fddZdededed	dfddZdeded	dfddZdedededed	ef
ddZdeded	efddZ	d!dededed	efddZdS )"    )datetimetimezone)Optional)selectupdate)AsyncSession)selectinload)UserLanguagesessiontelegram_idreturnc                    s6   |  ttttjtj|kI dH }| S )z>Telegram ID bo'yicha userni topish (admin_profile bilan birga)N)	executer   r	   optionsr   admin_profilewherer   scalar_one_or_none)r   r   result r   C/var/www/www-root/data/www/ai-bot.pdev.uz/bot/database/crud/user.pyget_user   s   
r   Nuz	full_nameusernamelanguagec                    s   t | |I dH }|r#||_||_ttj|_|  I dH  |dfS h d}|p*d	 }||vr3d}t
|||t|d}| | |  I dH  | |dgI dH  |dfS )ue   
    Userni olish yoki yaratish.
    Returns: (user, created) — created=True yangi user bo'lsa
    NF>   enrur   r   )r   r   r   r   r   T)r   r   r   r   nowr   utclast_active_atcommitlowerr	   r
   addrefresh)r   r   r   r   r   user	supported	lang_coder   r   r   get_or_create_user   s,   
r'   c                    s@   |  tttj|kjt|dI dH  |  I dH  dS )zFoydalanuvchi tilini yangilash)r   N)r   r   r	   r   r   valuesr
   r    )r   r   r   r   r   r   update_user_language=   s   
r)   c                    sD   |  tttj|kjttj	dI dH  | 
 I dH  dS )z Oxirgi faollik vaqtini yangilash)r   N)r   r   r	   r   r   r(   r   r   r   r   r    )r   r   r   r   r   update_last_activeI   s   
r*   reason	banned_byc                    sL   t | |I dH }|sdS d|_||_ttj|_||_| 	 I dH  dS )z1Userni ban qilish. Returns True agar user topilsaNFT)
r   	is_banned
ban_reasonr   r   r   r   	banned_atr,   r    )r   r   r+   r,   r$   r   r   r   ban_userS   s   r0   c                    sD   t | |I dH }|sdS d|_d|_d|_d|_|  I dH  dS )z1Userdan ban olish. Returns True agar user topilsaNFT)r   r-   r.   r/   r,   r    )r   r   r$   r   r   r   
unban_usere   s   r1   defaultc                    s"   t | |I dH }|r|jjS |S )zFoydalanuvchi tilini olishN)r   r   value)r   r   r2   r$   r   r   r   get_user_languager   s
   r4   )Nr   )r   )r   r   typingr   
sqlalchemyr   r   sqlalchemy.ext.asyncior   sqlalchemy.ormr   bot.database.modelsr	   r
   intr   strtupleboolr'   r)   r*   r0   r1   r4   r   r   r   r   <module>   sl    

(


