
    %i                     X   d dl m Z m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mZmZ deded	ee   fd
Z	 	 ddedededed	eee   ef   f
dZdededed	eeef   fdZdeded	efdZdededed	dfdZ	 	 	 ddedededed	eee   ef   f
dZ	 ddeded	ee   fdZy)    )datetimetimezone)OptionalList)selectupdatefuncor_desc)AsyncSession)selectinload)Movie	MovieViewGenresessioncodereturnc                 F  K   | j                  t        t              j                  t        j                  |j                         k(  t        j                  dk(        j                  t        t        j                                     d{   }|j                         S 7 w)zKino kodiga qarab topishTN)executer   r   wherer   upper	is_activeoptionsr   genresscalar_one_or_none)r   r   results      HC:\Users\koklo\Documents\pet_projects\kinoBot\bot\database\crud\movie.pyget_movie_by_coder      sm     ??u	uzzTZZ\)5??d+B	C	ell+	, F
 $$&&s   BB!
BB!querylimitoffsetc                   K   d| d}t        t              j                  t        j                  dk(  t	        t        j
                  j                  |      t        j                  j                  |      t        j                  j                  |      t        j                  j                  |                  j                  t        t        j                              }| j                  t        t        j                               j!                  |j#                                      d{   }|j%                         }| j                  |j'                  t)        t        j*                              j-                  |      j/                  |             d{   }|j1                         j3                         }	t5        |	      |fS 7 7 1w)z_
    Nom yoki kod bo'yicha qidirish (case-insensitive).
    Returns: (movies, total_count)
    %TN)r   r   r   r   r
   r   iliketitle_uztitle_rutitle_enr   r   r   r   r	   countselect_fromsubquery
scalar_oneorder_byr   
view_countr    r!   scalarsalllist)
r   r   r    r!   search
base_querycount_resulttotalr   moviess
             r   search_moviesr6      sX     q\Fu	OOt#

  ($$V,$$V,$$V,	

 
ell+	,  !tzz|(()<)<)>? L ##%E ??D!1!12399%@GGO F ^^!!#F<s%   D)G+G,A,GG
0G
Gchannel_message_idc                   K   | j                  t        t              j                  t        j                  |k(               d{   }|j                         }|r||_        t        j                  t        j                        |_        |j                         D ]"  \  }}t        ||      s|t        |||       $ | j                          d{    |dfS t        d|j!                         |t        j                  t        j                        d|}| j#                  |       | j                          d{    | j%                  |       d{    |dfS 7 7 7 &7 w)zT
    Kinoni qo'shish yoki yangilash (sync uchun).
    Returns: (movie, created)
    NF)r   r7   	synced_atT )r   r   r   r   r   r   r7   r   nowr   utcr9   itemshasattrsetattrcommitr   addrefresh)r   r   r7   kwargsexistingmoviekeyvalues           r   upsert_movierH   <   s6     __uEJJ$./ H '')E#5 ",,x||4 ,,.JCuc"u'8sE* ) nne|  
1ll8<<0
 	
 	Ennooe$$$d{3 	 	$sV   AE(EA'E(-E(0"E(E"A*E(=E$>E(E&	E("E($E(&E(c                   K   | j                  t        t              j                  t        j                  |k(               d{   }|j                         }|syd|_        | j                          d{    y7 77 w)z9Kinoni o'chirish (soft delete). Returns True agar topilsaNFT)r   r   r   r   r   r   r   r@   )r   r   r   rE   s       r   delete_movierJ   b   si     ??6%=#6#6uzzT7I#JKKF%%'EEO
..
 L
 s$   AB A<1B 6A>7B >B movie_iduser_idNc                 $  K   | j                  t        t              j                  t        j                  |k(  t        j
                  |k(               d{   }|j                         ryt        ||      }| j                  |       | j                  t        t              j                  t        j                  |k(        j                  t        j                  dz                d{    | j                          d{    y7 7 7 	w)z=Ko'rish statistikasini saqlash (takrorlanishdan himoyalangan)N)rK   rL      )r-   )r   r   r   r   rK   rL   r   rA   r   r   idvaluesr-   r@   )r   rK   rL   rD   views        r   record_viewrR   m   s     
 __y(*(	
 H ""$ h8DKK //u	uxx8#	$	5++a/	0  
 ..
'
 s7   ADD
BD,D-DDDDDonly_activec                 F  K   t        t              }|r"|j                  t        j                  dk(        }| j	                  t        t        j                               j                  |j                                      d{   }|j                         }| j	                  |j                  t        t        j                              j                  |      j                  |             d{   }t        |j!                         j#                               |fS 7 7 /w)z$Admin uchun: barcha kinolar ro'yxatiTN)r   r   r   r   r   r	   r(   r)   r*   r+   r,   r   
created_atr    r!   r0   r.   r/   )r   r    r!   rS   base_qr3   r4   r   s           r   get_movies_paginatedrW      s      E]Feoo56 tzz|(():; L ##%E??U--./55e<CCFK F  $$&'..
s%   B D!DA,D!/D0.D!D!c                   K   | j                  t        t              j                  t        j                  dk(        j                  t        t        j                              j                  |      j                  t        t        j                                     d{   }t        |j                         j                               S 7 +w)zEng ko'p ko'rilgan kinolarTN)r   r   r   r   r   r,   r   r-   r    r   r   r   r0   r.   r/   )r   r    r   s      r   get_top_moviesrY      s      ??u	u$&	'	$u''(	)	u	ell+	, F  $$&''s   BCC ,C)
   r   )rZ   r   T)rZ   )r   r   typingr   r   
sqlalchemyr   r   r	   r
   r   sqlalchemy.ext.asyncior   sqlalchemy.ormr   bot.database.modelsr   r   r   strr   inttupler6   boolrH   rJ   rR   rW   rY   r:       r   <module>re      si   ' ! 6 6 / ' 7 7'\ ' '% ' 	$$$ $ 	$
 4;$N##
# #
 5$;#L C D %(36	: 	/// / 	/
 4;/. )+(("%(	%[(rd   