
    i                     ~   d dl m Z mZmZ d dlmZmZmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZ dedefdZdded	edefd
Zdded	edefdZdedefdZdedeeef   fdZ	 dded	edeeeef      fdZddededefdZ	 ddeded	ee   deeeef      fdZdded	edeeef   fdZdedefdZ dedefdZ!y)    )datetime	timedeltatimezone)ListOptionalTuple)funcselectand_)AsyncSession)UserMovie	MovieViewMandatoryChannelLanguagesessionreturnc                    K   | j                  t        t        j                  t        j
                                     d {   }|j                         S 7 wN)executer
   r	   countr   id
scalar_oner   results     I/home/empty/Documents/pet_projects/kinoBot/bot/database/crud/analytics.pyget_total_usersr      s>     ??6$**TWW*=#>??F @   ?AAAdaysc                 T  K   t        j                  t        j                        t	        |      z
  }| j                  t        t        j                  t        j                              j                  t        j                  |k\               d{   }|j                         S 7 w)z!Oxirgi N kunda yangi userlar sonir   N)r   nowr   utcr   r   r
   r	   r   r   r   whereregistered_atr   r   r   sincer   s       r   get_new_users_countr(      sv     LL&)==E??tzz$''"#))$*<*<*EF F    BB(B&B(c                 T  K   t        j                  t        j                        t	        |      z
  }| j                  t        t        j                  t        j                              j                  t        j                  |k\               d{   }|j                         S 7 w)z Oxirgi N kunda faol userlar sonir!   N)r   r"   r   r#   r   r   r
   r	   r   r   r   r$   last_active_atr   r&   s       r   get_active_users_countr,      sv     LL&)==E??tzz$''"#))$*=*=*FG F r)   c                    K   | j                  t        t        j                  t        j
                              j                  t        j                  dk(               d {   }|j                         S 7 wNT)	r   r
   r	   r   r   r   r$   	is_bannedr   r   s     r   get_banned_users_countr0   #   sX     ??tzz$''"#))$..D*@A F s   AA8!A6"A8c                 T  K   | j                  t        t        j                  t	        j
                  t        j                              j                  t        j                               d{   }|j                         D ci c]  }|d   j                  |d    c}S 7 3c c}w w)zTillar bo'yicha user taqsimotiNr      )
r   r
   r   languager	   r   r   group_byallvalue)r   r   rows      r   get_users_by_languager8   *   sv     ??t}}djj12	$--	  F -3JJL9SCFLL#a& 99	 :s$   A+B(-B!.B(B#B(#B(c                   K   t        j                  t        j                        t	        |      z
  }| j                  t        t        j                  t        j                        j                  d      t        j                  t        j                        j                  d            j                  t        j                  |k\        j                  t        j                  t        j                              j!                  t        j                  t        j                                     d{   }|j#                         D cg c]#  }t%        |j                        |j                  f% c}S 7 Ac c}w w)z.Oxirgi N kun uchun kunlik ro'yxatdan o'tishlarr!   dater   N)r   r"   r   r#   r   r   r
   r	   r:   r   r%   labelr   r   r$   r4   order_byr5   strr   r   r'   r   r7   s        r   get_daily_registrationsr?   3   s      LL&)==E??IId(()//7JJtww%%g.	
 
t!!U*	+	$))D../	0	$))D../	0 F 39**,?3S]CII&?? @s$   D/E:1E32E:(E50E:5E:only_activec                    K   t        t        j                  t        j                              }|r"|j                  t        j                  dk(        }| j                  |       d {   }|j                         S 7 wr.   )	r
   r	   r   r   r   r$   	is_activer   r   )r   r@   qr   s       r   get_total_moviesrD   F   s\     tzz%((#$AGGEOOt+,??1%%F &s   A%A>'A<(A>Nlimitc                   K   |rWt        j                  t        j                        t	        |      z
  }| j                  t        t        t        j                  t        j                        j                  d            j                  t        t        j                  t        j                  k(        j                  t        j                   dk(  t        j"                  |k\        j%                  t        j                        j'                  t        j                  t        j                        j)                               j+                  |             d{   }n| j                  t        t              j                  t        j                   dk(        j'                  t        j,                  j)                               j+                  |             d{   }|j/                         j1                         D cg c]  }||j,                  f c}S |j1                         D cg c]  }|j                  |j2                  f c}S 7 7 rc c}w c c}w w)uO   
    Eng ko'p so'ralgan kinolar.
    days berilsa — oxirgi N kun ichida.
    r!   viewsTN)r   r"   r   r#   r   r   r
   r   r	   r   r   r   r;   joinmovie_idr$   rB   	viewed_atr4   r<   descrE   
view_countscalarsr5   rG   )r   rE   r   r'   r   movier7   s          r   get_top_moviesrO   N   s     X\\*YD-AA5$**Y\\288ABT)UXX););;<U5??d*I,?,?5,HIXehhXdjj.3356U5\
 
 5MU5??d*+Xe&&++-.U5\	
 
 8>~~7G7K7K7MNe(()NN.4jjl;sSYY		";;#

 O;sC   EII	B II$I=II'III
Ic                   K   t        j                  t        j                        t	        |      z
  }| j                  t        t        j                  dt        j                        j                  d      t        j                  t        j                        j                  d            j                  t        j                  |k\        j                  t        j                  dt        j                              j!                  t        j                  dt        j                                     d{   }|j#                         D ci c]"  }t%        |j&                        |j                  $ c}S 7 @c c}w w)u3   Soat bo'yicha faollik (peak hours) — oxirgi N kunr!   hourr   N)r   r"   r   r#   r   r   r
   r	   extractr   rJ   r;   r   r   r$   r4   r<   r5   intrQ   r>   s        r   get_hourly_activityrT   k   s     LL&)==E??LL!4!45;;FCJJy||$**73	
 
y""e+	,	$,,vy':':;	<	$,,vy':':;	< F 17

=CM399$== >s$   D2E<4E55E<'E72E<7E<c                    K   | j                  t        t        j                  t        j
                                     d {   }|j                         S 7 wr   )r   r
   r	   r   r   r   r   r   s     r   get_total_viewsrV   z   s>     ??6$**Y\\*B#CDDF Er   c           
      r  K   t        |        d{   t        | d       d{   t        | d       d{   t        | d       d{   t        | d       d{   t        | d       d{   t        |        d{   t	        |        d{   dt        |        d{   t        |        d{   t        | dd       d{   t        | dd       d{   t        | d	
       d{   t        | d       d{   ddS 7 	7 7 7 7 7 7 7 7 }7 m7 Z7 G7 57 #w)zAdmin uchun to'liq statistikaNr2   r!         )totaltodayweekmonth	active_7d
active_30dbannedby_language   )rE   r   
   )rE   )rZ   total_views	top_todaytop_weektop_all_timehourly_activity)usersmovies)	r   r(   r,   r0   r8   rD   rV   rO   rT   )r   s    r   get_full_statsrk      s     +733.wQ??-gA>>.wR@@5gAFF 6wR HH27;;!6w!??	
 ,G44!0!99-gQQGG,WAAFF"0"CC%8q%II
 3?>@FH;? 59GFCIs   D7DD7DD7DD7D!
D7!D#"D75D%6D7D'D7D)D7-D+.D7?D- D7D/
D7)D1*D7=D3>D7D5	D7D7D7!D7#D7%D7'D7)D7+D7-D7/D71D73D75D7)r2   )rY   )rX   )T)rc   N)"r   r   r   typingr   r   r   
sqlalchemyr	   r
   r   sqlalchemy.ext.asyncior   bot.database.modelsr   r   r   r   r   rS   r   r(   r,   r0   dictr=   r8   r?   boolrD   rO   rT   rV   rk        r   <module>rt      si   2 2 ( ( ) ) / R R
< C 
| 3 s , c 3 , 3 : :$sCx. : ()@@!$@	%S/@&L t s  CG<<"%<2:3-<	%s

<:>| >3 >tCQTH~ >< C , 4 rs   