U
    Òä(j·  ã                   @   sP   d dl mZmZ d dlmZ d dlmZ d dlmZm	Z	 d dl
mZ dd„ ZdS )	é    )ÚrequestÚjsonify)Úget_db)Úadmin_required)Úerror_responseÚbuild_search_conditions)Úget_config_valuec                 C   sˆ   | j ddgdtdd„ ƒƒ}| j ddgdtdd„ ƒƒ}| j dd	gdtd
d„ ƒƒ}| j ddgddd„ ƒ}| j ddgddd„ ƒ}d S )Nz/api/admin/suggestionsÚ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
g}
t|
| ƒ\}}|r ||7 }||7 }| |¡ |	 |¡ | 	||	¡ | 
¡ d }|d7 }| ||g¡ | 	||¡ | ¡ }dd„ |D ƒ}t||||dœƒW ¢S | ¡  X d S )NÚsearchÚpageé   Úlimité
   z2SELECT * FROM suggestions WHERE deleted_at IS NULLz9SELECT COUNT(*) FROM suggestions WHERE deleted_at IS NULLÚphoneÚnicknameÚcontentr   z* ORDER BY created_at DESC LIMIT ? OFFSET ?c                 S   s   g | ]}t |ƒ‘qS © )Údict)Ú.0Úrowr   r   ú@D:\Project\Python Project\BangBang\backend\routes\suggestions.pyÚ
<listcomp>*   s     zMregister_suggestion_routes.<locals>.get_admin_suggestions.<locals>.<listcomp>)ÚitemsÚtotalr   r   )r   ÚargsÚgetÚintr   ÚcursorÚcloser   ÚextendÚexecuteÚfetchoneÚfetchallr   )r   r   r   ÚoffsetÚconnr   ÚqueryÚcount_queryÚparamsÚcount_paramsÚsearch_fieldsÚsearch_condÚsearch_paramsr   Úrowsr   r   r   r   Úget_admin_suggestions   s8    


z9register_suggestion_routes.<locals>.get_admin_suggestionsz*/api/admin/suggestions/<int:suggestion_id>c                 S   sT   t ƒ }| ¡ }z6| d| f¡ | ¡ }|s6tdƒW ¢S tt|ƒƒW ¢S | ¡  X d S )Nz=SELECT * FROM suggestions WHERE id = ? AND deleted_at IS NULLu   å»ºè®®ä¸å­˜åœ¨)r   r   r   r!   r"   r   r   r   )Úsuggestion_idr%   r   r   r   r   r   Úget_admin_suggestion0   s    z8register_suggestion_routes.<locals>.get_admin_suggestionÚDELETEc              
   S   sž   t ƒ }| ¡ }z€zL| d| f¡ | ¡  |jdkrFtdddœƒW W ¢LS tdddœƒW W ¢8S W n. tk
rŠ } z| ¡  |‚W 5 d }~X Y nX W 5 | ¡  X d S )NzWUPDATE suggestions SET deleted_at = datetime('now') WHERE id = ? AND deleted_at IS NULLr   Tu   åˆ é™¤æˆåŠŸ©ÚsuccessÚmessageFu   å»ºè®®ä¸å­˜åœ¨æˆ–å·²è¢«åˆ é™¤)	r   r   r   r!   ÚcommitÚrowcountr   Ú	ExceptionÚrollback)r/   r%   r   Úer   r   r   Údelete_admin_suggestion@   s    
z;register_suggestion_routes.<locals>.delete_admin_suggestionz/api/suggestions/can-submitc                  S   s  t j d¡} | r|  d¡s(tdddœƒS |  d¡d }tƒ }| ¡ }zÊ| 	d|f¡ | 
¡ }|srtdd	dœƒW ¢ S | 	d
|d f¡ | 
¡ }|s¢tdddœƒW ¢pS ttddƒƒ}| 	d|d f¡ | 
¡ d }||krútdd|› d|› d||dœƒW ¢S tdd||dœƒW ¢S | ¡  X d S )NÚAuthorizationzBearer Fu   è¯·å…ˆç™»å½•)Ú
can_submitr4   ú r   zMSELECT user_id FROM sessions WHERE token = ? AND expires_at > datetime("now")u!   ç™»å½•å·²è¿‡æœŸï¼Œè¯·é‡æ–°ç™»å½•zESELECT phone, nickname FROM users WHERE id = ? AND deleted_at IS NULLÚuser_idu   ç”¨æˆ·ä¸å­˜åœ¨Úmax_suggestions_per_dayÚ1úSSELECT COUNT(*) FROM suggestions WHERE phone = ? AND date(created_at) = date('now')r   r   õ   æ‚¨ä»Šå¤©å·²æäº¤õ!   æ¡å»ºè®®ï¼Œæ¯å¤©æœ€å¤šå¯æäº¤u   æ¡)r<   r4   Ztoday_countÚ	max_countTu   å¯ä»¥æäº¤å»ºè®®)r   Úheadersr   Ú
startswithr   Úsplitr   r   r   r!   r"   r   r   )Úauth_headerÚtokenr%   r   ÚsessionÚuserÚmax_suggestionsÚcountr   r   r   Úcan_submit_suggestionS   sF    þüüz9register_suggestion_routes.<locals>.can_submit_suggestionz/api/suggestionsÚPOSTc               
   S   s2  t j} |  d¡}|  d¡}|  d¡}|r,|s4tdƒS ttddƒƒ}tƒ }| ¡ }zÒzœ| 	d|f¡ | 
¡ d }||krštd	d
|› d|› dd	dœƒW W ¢ŒS | 	d|||f¡ | ¡  || d }d}	|dkrÜ|	d|› d7 }	td	|	dœƒW W ¢6S  tk
r }
 z| ¡  |
‚W 5 d }
~
X Y nX W 5 | ¡  X d S )Nr   r   r   u$   æ‰‹æœºå·å’Œå»ºè®®å†…å®¹ä¸èƒ½ä¸ºç©ºr?   r@   rA   r   TrB   rC   u   æ¡ï¼Œæ„Ÿè°¢æ‚¨çš„å…³æ³¨ï¼)r3   r4   Zalready_submittedzCINSERT INTO suggestions (phone, nickname, content) VALUES (?, ?, ?)r   u*   å»ºè®®æäº¤æˆåŠŸï¼Œæ„Ÿè°¢æ‚¨çš„åé¦ˆï¼u   ï¼ˆä»Šå¤©è¿˜å¯æäº¤u   æ¡ï¼‰r2   )r   Újsonr   r   r   r   r   r   r   r!   r"   r   r5   r7   r8   )Údatar   r   r   rL   r%   r   rM   Ú	remainingr4   r9   r   r   r   Úcreate_suggestionƒ   sF    


þýþz5register_suggestion_routes.<locals>.create_suggestion)Úrouter   )Úappr.   r0   r:   rN   rS   r   r   r   Úregister_suggestion_routes   s    &
/rV   N)Úflaskr   r   Zutils.databaser   Z
utils.authr   Zutils.helpersr   r   Úutils.configr   rV   r   r   r   r   Ú<module>   s
   