U
    ¯j¾  ã                   @   sH   d dl mZmZ d dlmZmZ d dlmZ d dlm	Z	m
Z
 dd„ ZdS )é    )ÚrequestÚjsonify)Úget_dbÚdb_transaction)Úget_user_id_from_token)Úerror_responseÚbuild_search_conditionsc                 C   sL   | j ddgddd„ ƒ}| j ddgddd„ ƒ}| j d	d
gddd„ ƒ}d S )Nz/api/admin/ratingsÚGET)Úmethodsc                  S   s&  t j d¡} tt j dd¡ƒ}tt j dd¡ƒ}|d | }tƒ }| ¡ }zÌd}d}g }g }	| r dd	d
dddg}
t|
| ƒ\}}|r ||7 }|d| 7 }|	 |¡ | 	||	¡ | 
¡ d }|d }| ||g¡ | 	||¡ | ¡ }g }|D ]}t|ƒ}| |¡ qêt||||dœƒW ¢S | ¡  X d S )NÚsearchÚpageé   Úlimité
   a—  
                SELECT r.*, t.title as task_title, u.nickname as acceptor_name, u.phone as acceptor_phone,
                       p.nickname as publisher_name, p.phone as publisher_phone
                FROM task_ratings r
                LEFT JOIN tasks t ON r.task_id = t.id
                LEFT JOIN users u ON r.acceptor_id = u.id
                LEFT JOIN users p ON r.publisher_id = p.id
            z#SELECT COUNT(*) FROM task_ratings rzt.titlez
u.nicknamezu.phonez
p.nicknamezp.phonez	r.commentz{ LEFT JOIN tasks t ON r.task_id = t.id LEFT JOIN users u ON r.acceptor_id = u.id LEFT JOIN users p ON r.publisher_id = p.idr   z, ORDER BY r.created_at DESC LIMIT ? OFFSET ?)ÚitemsÚtotalr   r   )r   ÚargsÚgetÚintr   ÚcursorÚcloser   ÚextendÚexecuteÚfetchoneÚfetchallÚdictÚappendr   )r   r   r   ÚoffsetÚconnr   Z
query_baseÚcount_queryÚparamsÚcount_paramsÚsearch_fieldsÚsearch_condÚsearch_paramsr   ÚqueryÚrowsr   ÚrowÚrating© r)   ú<D:\Project\Python Project\BangBang\backend\routes\ratings.pyÚget_admin_ratings   s<    	
z1register_rating_routes.<locals>.get_admin_ratingsz"/api/admin/ratings/<int:rating_id>c                 S   sT   t ƒ }| ¡ }z6| d| f¡ | ¡ }|s6tdƒW ¢S tt|ƒƒW ¢S | ¡  X d S )Na¶  
                SELECT r.*, t.title as task_title, u.nickname as acceptor_name, u.phone as acceptor_phone,
                       p.nickname as publisher_name, p.phone as publisher_phone
                FROM task_ratings r
                LEFT JOIN tasks t ON r.task_id = t.id
                LEFT JOIN users u ON r.acceptor_id = u.id
                LEFT JOIN users p ON r.publisher_id = p.id
                WHERE r.id = ?
            u   è¯„ä»·ä¸å­˜åœ¨)r   r   r   r   r   r   r   r   )Z	rating_idr   r   r'   r)   r)   r*   Úget_admin_rating8   s    ø	z0register_rating_routes.<locals>.get_admin_ratingz/api/tasks/<int:task_id>/ratingÚPOSTc              
   S   sÀ  t j d¡}|r| d¡s$tddƒS | d¡d }t|ƒ}|sHtddƒS t j}tƒ }| 	¡ }zRz| d| f¡ | ¡ }|sŽtd	ƒW W ¢&S |d
 dkrªtdƒW W ¢
S d}d}	|d |krÌd}|d }	n*|d |kræd}|d }	ntddƒW W ¢¾S |	s
tdƒW W ¢ªS | d| |f¡ | ¡ }
|
r6tdƒW W ¢~S | d| |d |d | d¡| d¡|f¡ | ¡  tdddœƒW W ¢6S  tk
r¬ } z| ¡  |‚W 5 d }~X Y nX W 5 | 
¡  X d S )NÚAuthorizationzBearer u	   æœªç™»å½•i‘  ú r   u   ç™»å½•å·²è¿‡æœŸz SELECT * FROM tasks WHERE id = ?u   ä»»åŠ¡ä¸å­˜åœ¨ÚstatusÚ	completedu   ä»»åŠ¡æœªå®Œæˆï¼Œæ— æ³•è¯„ä»·Ú r   Úpublisher_idÚpublisher_to_acceptorÚacceptor_idZacceptor_to_publisheru!   åªèƒ½è¯„ä»·è‡ªå·±å‚ä¸Žçš„ä»»åŠ¡i“  u   å¯¹æ–¹ç”¨æˆ·ä¸å­˜åœ¨z@SELECT * FROM task_ratings WHERE task_id = ? AND rating_type = ?u   å·²è¯„ä»·è¿‡è¯¥ä»»åŠ¡z£
                INSERT INTO task_ratings (task_id, publisher_id, acceptor_id, rating, comment, rating_type)
                VALUES (?, ?, ?, ?, ?, ?)
            r(   ÚcommentTu   è¯„ä»·æˆåŠŸ)ÚsuccessÚmessage)r   Úheadersr   Ú
startswithr   Úsplitr   Újsonr   r   r   r   r   Úcommitr   Ú	ExceptionÚrollback)Útask_idÚauth_headerÚtokenÚuser_idÚdatar   r   ÚtaskZrating_typeZrated_user_idÚexisting_ratingÚer)   r)   r*   Úcreate_ratingO   sR    



"ýz-register_rating_routes.<locals>.create_rating)Úroute)Úappr+   r,   rH   r)   r)   r*   Úregister_rating_routes   s    
0
rK   N)Úflaskr   r   Zutils.databaser   r   Z
utils.authr   Zutils.helpersr   r   rK   r)   r)   r)   r*   Ú<module>   s   