a
    ¿&Ïh6  ã                   @   s@   d dl Z d dlZd dlmZ d dlZe e¡ZG dd„ dƒZdS )é    N)Údatetimec                   @   sŒ   e Zd Zd#dd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
d$dd„Zd%dd„Zdd„ Zd&dd„Zdd„ Zdd„ Zd d!„ Zd"S )'ÚDatabaseúdata/scambot.dbc                 C   s2   || _ d|v r&tjtj | j ¡dd |  ¡  d S )Nú/T©Úexist_ok)Údb_pathÚosÚmakedirsÚpathÚdirnameÚinit_database)Úselfr   © r   ú4/var/www/html/swiplay.fr/scambot/modules/database.pyÚ__init__	   s    zDatabase.__init__c              
   C   sà   z¦t jt j | j¡dd t | j¡}| ¡ }| d¡ | d¡ z| d¡ W n tj	yd   Y n0 z| d¡ W n tj	yˆ   Y n0 | 
¡  | ¡  t d¡ W n4 tyÚ } zt d|› ¡ W Y d	}~n
d	}~0 0 d	S )
u;   Initialise la base de donnÃ©es avec les tables nÃ©cessairesTr   a—  
                CREATE TABLE IF NOT EXISTS creators (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    pseudo TEXT UNIQUE NOT NULL,
                    platform TEXT NOT NULL,
                    profile_url TEXT NOT NULL,
                    discord_channel_id INTEGER NOT NULL,
                    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                )
            aw  
                CREATE TABLE IF NOT EXISTS processed_videos (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    creator_id INTEGER NOT NULL,
                    video_url TEXT UNIQUE NOT NULL,
                    video_title TEXT,
                    video_duration TEXT,
                    video_published_date TEXT,
                    game_name TEXT,
                    form_data TEXT,
                    full_form_data TEXT,
                    processed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                    FOREIGN KEY (creator_id) REFERENCES creators (id)
                )
            zAALTER TABLE processed_videos ADD COLUMN video_published_date TEXTz;ALTER TABLE processed_videos ADD COLUMN full_form_data TEXTu.   âœ… Base de donnÃ©es initialisÃ©e avec succÃ¨su,   âŒ Erreur initialisation base de donnÃ©es: N)r	   r
   r   r   r   Úsqlite3ÚconnectÚcursorÚexecuteZOperationalErrorÚcommitÚcloseÚloggerÚinfoÚ	ExceptionÚerror)r   Úconnr   Úer   r   r   r      s&    

zDatabase.init_databasec              
   C   s’   zVt  | j¡}| ¡ }| d||||f¡ | ¡  | ¡  t d|› d|› d¡ W dS  t	yŒ } zt 
d|› ¡ W Y d}~dS d}~0 0 dS )	u*   Ajoute un crÃ©ateur Ã  la base de donnÃ©esz•
                INSERT OR REPLACE INTO creators (pseudo, platform, profile_url, discord_channel_id)
                VALUES (?, ?, ?, ?)
            u   âœ… CrÃ©ateur ajoutÃ©: z (ú)Tu   âŒ Erreur ajout crÃ©ateur: NF©r   r   r   r   r   r   r   r   r   r   r   )r   ÚpseudoÚplatformÚprofile_urlÚdiscord_channel_idr   r   r   r   r   r   Úadd_creatorH   s    
ýzDatabase.add_creatorc              
   C   s’   zVt  | j¡}| ¡ }| d|f¡ | d|f¡ | ¡  | ¡  t d|› ¡ W dS  t	yŒ } zt 
d|› ¡ W Y d}~dS d}~0 0 dS )u,   Supprime un crÃ©ateur de la base de donnÃ©eszŠ
                DELETE FROM processed_videos 
                WHERE creator_id IN (SELECT id FROM creators WHERE pseudo = ?)
            z%DELETE FROM creators WHERE pseudo = ?u   âœ… CrÃ©ateur supprimÃ©: Tu"   âŒ Erreur suppression crÃ©ateur: NFr   )r   r    r   r   r   r   r   r   Úremove_creator]   s    ýzDatabase.remove_creatorc              
   C   sr   z4t  | j¡}| ¡ }| d¡ | ¡ }| ¡  |W S  tyl } z t 	d|› ¡ g W  Y d}~S d}~0 0 dS )u   Liste tous les crÃ©ateursz¤
                SELECT id, pseudo, platform, profile_url, discord_channel_id, created_at
                FROM creators
                ORDER BY pseudo
            u   âŒ Erreur liste crÃ©ateurs: N©
r   r   r   r   r   Úfetchallr   r   r   r   )r   r   r   Úcreatorsr   r   r   r   Úlist_creatorsv   s    
zDatabase.list_creatorsc              
   C   st   z8t  | j¡}| ¡ }| d|f¡ | ¡ }| ¡  |W S  tyn } zt 	d|› ¡ W Y d}~dS d}~0 0 dS )u"   RÃ©cupÃ¨re un crÃ©ateur par son IDz•
                SELECT id, pseudo, platform, profile_url, discord_channel_id
                FROM creators
                WHERE id = ?
            õ%   âŒ Erreur rÃ©cupÃ©ration crÃ©ateur: N©
r   r   r   r   r   Úfetchoner   r   r   r   )r   Ú
creator_idr   r   Úcreatorr   r   r   r   Úget_creator_by_id‹   s    üzDatabase.get_creator_by_idc              
   C   st   z8t  | j¡}| ¡ }| d|f¡ | ¡ }| ¡  |W S  tyn } zt 	d|› ¡ W Y d}~dS d}~0 0 dS )u&   RÃ©cupÃ¨re un crÃ©ateur par son pseudoz™
                SELECT id, pseudo, platform, profile_url, discord_channel_id
                FROM creators
                WHERE pseudo = ?
            r*   Nr+   )r   r    r   r   r.   r   r   r   r   Úget_creator_by_pseudo    s    üzDatabase.get_creator_by_pseudoc              
   C   sx   z<t  | j¡}| ¡ }| d|f¡ | ¡ }| ¡  |duW S  tyr } zt 	d|› ¡ W Y d}~dS d}~0 0 dS )u.   VÃ©rifie si une vidÃ©o a dÃ©jÃ  Ã©tÃ© traitÃ©ezQ
                SELECT id FROM processed_videos WHERE video_url = ?
            Nu!   âŒ Erreur vÃ©rification vidÃ©o: Fr+   ©r   Ú	video_urlr   r   Úresultr   r   r   r   Úis_video_processedµ   s    þ
zDatabase.is_video_processedÚ c	                 C   s’   zVt  | j¡}	|	 ¡ }
|
 d||||||||f¡ |	 ¡  |	 ¡  t d|› ¡ W dS  t	yŒ } zt 
d|› ¡ W Y d}~dS d}~0 0 dS )u1   Ajoute une vidÃ©o traitÃ©e Ã  la base de donnÃ©eszÛ
                INSERT INTO processed_videos (creator_id, video_url, video_title, video_duration, video_published_date, game_name, form_data, full_form_data)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?)
            u   âœ… VidÃ©o traitÃ©e ajoutÃ©e: Tu"   âŒ Erreur ajout vidÃ©o traitÃ©e: NFr   )r   r-   r2   Úvideo_titleÚvideo_durationÚvideo_published_dateÚ	game_nameÚ	form_dataÚfull_form_datar   r   r   r   r   r   Úadd_processed_videoÈ   s    ýzDatabase.add_processed_videoé
   c              
   C   sx   z:t  | j¡}| ¡ }| d||f¡ | ¡ }| ¡  |W S  tyr } z t 	d|› ¡ g W  Y d}~S d}~0 0 dS )u/   RÃ©cupÃ¨re les vidÃ©os rÃ©centes d'un crÃ©ateurz×
                SELECT video_url, video_title, processed_at
                FROM processed_videos
                WHERE creator_id = ?
                ORDER BY processed_at DESC
                LIMIT ?
            u-   âŒ Erreur rÃ©cupÃ©ration vidÃ©os rÃ©centes: Nr&   )r   r-   Úlimitr   r   Zvideosr   r   r   r   Úget_recent_videosÝ   s    úzDatabase.get_recent_videosc              
   C   s°   ztt  | j¡}| ¡ }| d|f¡ | ¡ }| ¡  |rp|d |d |d |d |d pZd|d ph|d d	œW S W d
S  tyª } zt 	d|› ¡ W Y d
}~d
S d
}~0 0 d
S )u5   RÃ©cupÃ¨re le formulaire d'une vidÃ©o dÃ©jÃ  traitÃ©ezÆ
                SELECT form_data, game_name, video_title, video_duration, video_published_date, full_form_data
                FROM processed_videos
                WHERE video_url = ?
            r   é   é   é   é   u   Non trouvÃ©eé   )r:   r9   r6   r7   r8   r;   Nu&   âŒ Erreur rÃ©cupÃ©ration formulaire: r+   r1   r   r   r   Úget_processed_formô   s(    ü
úzDatabase.get_processed_formc              
   C   s¢   zft  | j¡}| ¡ }|r0| d||||f¡ n| d|||f¡ | ¡  | ¡  t d|› ¡ W dS  t	yœ } zt 
d|› ¡ W Y d}~dS d}~0 0 dS )u&   Met Ã  jour une vidÃ©o dÃ©jÃ  traitÃ©ezÐ
                    UPDATE processed_videos
                    SET form_data = ?, game_name = ?, full_form_data = ?, processed_at = CURRENT_TIMESTAMP
                    WHERE video_url = ?
                z¼
                    UPDATE processed_videos
                    SET form_data = ?, game_name = ?, processed_at = CURRENT_TIMESTAMP
                    WHERE video_url = ?
                u   âœ… VidÃ©o mise Ã  jour: Tu    âŒ Erreur mise Ã  jour vidÃ©o: NFr   )r   r2   r:   r9   r;   r   r   r   r   r   r   Úupdate_processed_video  s"    
üüzDatabase.update_processed_videoc              
   C   sˆ   zLt  | j¡}| ¡ }| d¡ | ¡  |j}| ¡  t 	d|› d¡ |W S  t
y‚ } zt d|› ¡ W Y d}~dS d}~0 0 dS )u8   Vide toutes les vidÃ©os traitÃ©es de la base de donnÃ©eszDELETE FROM processed_videosõ   âœ… u(    vidÃ©o(s) supprimÃ©e(s) de l'historiqueu#   âŒ Erreur suppression historique: Néÿÿÿÿ©r   r   r   r   r   r   Zrowcountr   r   r   r   r   )r   r   r   Úcountr   r   r   r   Úclear_all_processed_videos/  s    
z#Database.clear_all_processed_videosc              
   C   s   zTt  | j¡}| ¡ }| d|f¡ | ¡  |j}| ¡  t 	d|› d|› ¡ |W S  t
yŠ } zt d|› ¡ W Y d}~dS d}~0 0 dS )u5   Vide les vidÃ©os traitÃ©es d'un crÃ©ateur spÃ©cifiquez1DELETE FROM processed_videos WHERE creator_id = ?rG   u+    vidÃ©o(s) supprimÃ©e(s) pour le crÃ©ateur u-   âŒ Erreur suppression historique crÃ©ateur: NrH   rI   )r   r-   r   r   rJ   r   r   r   r   Ú!clear_processed_videos_by_creatorB  s    z*Database.clear_processed_videos_by_creatorc              
   C   s®   zht  | j¡}| ¡ }| d¡ | ¡ d }| d¡ | ¡ d }| d¡ | ¡ }| ¡  |||dœW S  ty¨ } z(t	 
d|› ¡ ddg dœW  Y d}~S d}~0 0 dS )u2   RÃ©cupÃ¨re les statistiques de la base de donnÃ©eszSELECT COUNT(*) FROM creatorsr   z%SELECT COUNT(*) FROM processed_videoszÐ
                SELECT c.platform, COUNT(pv.id) as count
                FROM creators c
                LEFT JOIN processed_videos pv ON c.id = pv.creator_id
                GROUP BY c.platform
            )Úcreators_countÚvideos_countÚplatform_statsu!   âŒ Erreur rÃ©cupÃ©ration stats: N)r   r   r   r   r   r,   r'   r   r   r   r   )r   r   r   rM   rN   rO   r   r   r   r   Ú	get_statsU  s(    


ýýzDatabase.get_statsN)r   )r5   r5   r5   r5   r5   r5   )r=   )r5   r5   )Ú__name__Ú
__module__Ú__qualname__r   r   r$   r%   r)   r/   r0   r4   r<   r?   rE   rF   rK   rL   rP   r   r   r   r   r      s   
8


r   )r   Úloggingr   r	   Ú	getLoggerrQ   r   r   r   r   r   r   Ú<module>   s
   
