
    i                     x    d Z ddlmZ ddlmZ ddlZ ej        e          Z G d d          Z	 e	            Z
dS )z(
Database module for MongoDB operations
    )AsyncIOMotorClient)ConfigNc                   \    e Zd ZdZd Zd Zd ZddZd Zd Z	d	 Z
d
 Zd Zd Zd Zd ZdS )DatabasezMongoDB database handlerc                 "    d | _         d | _        d S )N)clientdbselfs    /app/database.py__init__zDatabase.__init__   s        c                 h  K   	 t          t          j                  | _        | j        t          j                 | _        | j        j                            d           d{V  t          	                    d           dS # t          $ r(}t                              d|            Y d}~dS d}~ww xY w)zConnect to MongoDBpingNz!Connected to MongoDB successfullyzFailed to connect to MongoDB: )r   r   MONGODB_URIr   DATABASE_NAMEr	   admincommandloggerinfo	Exceptionerror)r   es     r   connectzDatabase.connect   s      	?,V-?@@DKk&"67DG+#++F333333333KK;<<<<< 	? 	? 	?LL=!==>>>>>>>>>	?s   A9A? ?
B1	B,,B1c                    K   | j         r5| j                                          t                              d           dS dS )zClose MongoDB connectionzMongoDB connection closedN)r   closer   r   r
   s    r   r   zDatabase.close   sG      ; 	5KKK344444	5 	5r   Nc                 n   K   |||d}| j         j                            d|id|id           d{V  dS )zAdd or update user in database)user_idusername
first_namer   $setTupsertNr	   users
update_one)r   r   r   r    	user_datas        r   add_userzDatabase.add_user#   s{        $
 
	
 gm&& Y ' 
 
 	
 	
 	
 	
 	
 	
 	
 	
 	
r   c                 T   K   | j         j                            d|i           d{V S )zGet user from databaser   N)r	   r%   find_oner   r   s     r   get_userzDatabase.get_user0   s5      W]++Y,@AAAAAAAAAr   c                 |   K   | j         j                            i           }|                    d           d{V S )zGet all users from databaseN)length)r	   r%   findto_list)r   cursors     r   get_all_userszDatabase.get_all_users4   sC      ##B''^^4^000000000r   c                 P   K   | j         j                            i            d{V S )zGet total users countN)r	   r%   count_documentsr
   s    r   get_users_countzDatabase.get_users_count9   s0      W]222666666666r   c                 f   K   | j         j                            d|idd|iid           d{V  dS )zSave user's permanent thumbnailr   r!   	thumbnailTr"   Nr$   )r   r   file_ids      r   save_thumbnailzDatabase.save_thumbnail>   sg      gm&& k7+, ' 
 
 	
 	
 	
 	
 	
 	
 	
 	
 	
r   c                 n   K   |                      |           d{V }|r|                    d          ndS )zGet user's permanent thumbnailNr7   r,   getr   r   users      r   get_thumbnailzDatabase.get_thumbnailF   sE      ]]7++++++++(,6txx$$$$6r   c                 b   K   | j         j                            d|idddii           d{V  dS )z!Delete user's permanent thumbnailr   z$unsetr7    Nr$   r+   s     r   delete_thumbnailzDatabase.delete_thumbnailK   s_      gm&& R()
 
 	
 	
 	
 	
 	
 	
 	
 	
 	
r   c                 f   K   | j         j                            d|idd|iid           d{V  dS )zUpdate user's storage usager   z$incstorage_usedTr"   Nr$   )r   r   	file_sizes      r   update_storagezDatabase.update_storageS   sg      gm&& ni01 ' 
 
 	
 	
 	
 	
 	
 	
 	
 	
 	
r   c                 p   K   |                      |           d{V }|r|                    dd          ndS )zGet user's storage usageNrD   r   r;   r=   s      r   get_storagezDatabase.get_storage[   sG      ]]7++++++++.29txx***9r   )NN)__name__
__module____qualname____doc__r   r   r   r(   r,   r2   r5   r9   r?   rB   rF   rH    r   r   r   r   
   s        ""  	? 	? 	?5 5 5
 
 
 
B B B1 1 1
7 7 7

 
 
7 7 7

 
 

 
 
: : : : :r   r   )rL   motor.motor_asyncior   configr   logging	getLoggerrI   r   r   r	   rM   r   r   <module>rR      s     3 2 2 2 2 2       		8	$	$T: T: T: T: T: T: T: T:n XZZr   