a
    nh                     @   s   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZ e ZeeZe ZeddZeed	d
dZedeefedddZdS )    )	APIRouterRequestDepends)RedirectResponse)Jinja2Templates)HTTP_302_FOUND)get_current_user)
open_mysqlget_mysql_credsget_pingconf_vars	templates)	directory)qreturnc                 C   s    |    }ddd |D S )z
    Converts a search string into BOOLEAN MODE format
    where each word must appear.
    Example: "Tucker Impunity" => "+Tucker +Impunity"
     c                 s   s   | ]}|rd | V  qdS )+N ).0wordr   r   1/wd/v2025.freedom4um.com/routes/latestarticles.py	<genexpr>       z&build_boolean_query.<locals>.<genexpr>)stripsplitjoin)r   wordsr   r   r   build_boolean_query   s    r   z/latestarticles)requestc                    s  |st dtdS | jdd }| jdd}| jdd}d	}g }|rt|}|d
krn|d7 }|| q|d7 }|| n|d7 }|d7 }|r|d
kr|d7 }||d| dg n(|d7 }||d| dd| dg |dkr|r|d7 }n|d7 }|d7 }g }d }	ztt	^}
|
j
dd}	|	|| |	 }|D ](}t|d trD|d d|d< qDW d    n1 s0    Y  W |	r|	  n|	r|	  0 td| |||||| jdddS )Nz/signin)urlstatus_coder    scopeallorderdatez
        SELECT a.ArtNum,
               a.Title,
               a.PostDate,
               u.Name AS Username,
               a.ViewCnt,
               a.CommentCnt
    ZtitleszS,
                   (MATCH(a.Title) AGAINST (%s IN BOOLEAN MODE)) * 2 AS relevancez^,
                   (MATCH(a.Title, a.Article) AGAINST (%s IN BOOLEAN MODE) * 2) AS relevancez, 0 AS relevancezc
        FROM Articles a
        JOIN ID u ON a.HandleID = u.IDNum
        WHERE a.Deleted = 0
    zE AND (MATCH(a.Title) AGAINST (%s IN BOOLEAN MODE) OR a.Title LIKE %s)%ze AND (MATCH(a.Title, a.Article) AGAINST (%s IN BOOLEAN MODE) OR a.Title LIKE %s OR a.Article LIKE %s)Z	relevancez) ORDER BY relevance DESC, a.PostDate DESCz ORDER BY a.PostDate DESCz	 LIMIT 50T)
dictionaryZTitlezutf-8zlatestarticles.htmlthemelight)r   userarticlesqueryr!   r#   r'   )r   r   query_paramsgetr   r   appendextendr	   mysql_credscursorexecutefetchall
isinstancebytesdecodecloser   TemplateResponsecookies)r   r)   r   r!   r#   sqlparamsZ	boolean_qr*   r1   connarticler   r   r   latest_articles   sn     

8

r>   N)fastapir   r   r   fastapi.responsesr   fastapi.templatingr   Zstarlette.statusr   
utils.authr   utils.pingdatar	   r
   r   PingConfr0   routerr   strr   r-   r>   r   r   r   r   <module>   s   

