o
    õ¿gG  ã                   @   s   d dl mZ d dlmZmZ d dl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	ed
efdd„Zd	efdd„Zd	efdd„ZdS )é    )ÚSession)ÚdatetimeÚ	timedelta)Ú
StepRecord)ÚPointTransaction)Ú
UserPoints)Úget_setting_floatÚget_setting_int)ÚUserServiceNÚdbÚrecordc                 C   sZ   t | d|ƒ}t| d|ƒ}t | d|ƒ}|j|krt|j| ƒS t|| |j| | |  ƒS )u9   ê±¸ìŒ ìˆ˜ì— ë”°ë¥¸ ì˜ˆìƒ í¬ì¸íŠ¸ë¥¼ ê³„ì‚°í•©ë‹ˆë‹¤.ÚSTEP_BASE_RATEÚSTEP_THRESHOLDÚSTEP_MULTIPLIER)r   r	   Ústeps_countÚint)r   r   Úcountry_codeÚ	base_rateÚ	thresholdÚ
multiplier© r   ú(/app/app/services/batch_point_service.pyÚcalculate_pending_points
   s   
ÿr   c                 C   st   |   t¡ tjdk¡ ¡ }|D ]$}ddlm} |   |¡ |j|jk¡ 	¡ }|r*|j
nd}t| ||ƒ|_q|  ¡  dS )uJ   ëª¨ë“  ë¯¸ì²˜ë¦¬ëœ StepRecordì˜ pending_pointsë¥¼ ì—…ë°ì´íŠ¸í•©ë‹ˆë‹¤.Fr   ©ÚUserN)Úqueryr   ÚfilterÚis_processedÚallÚapp.models.userr   ÚidÚuser_idÚfirstr   r   Úpending_pointsÚcommit)r   Úrecordsr   r   Úuserr   r   r   r   Úupdate_pending_points   s   r'   c              
   C   s€  t  ¡  ¡ tdd }|  t¡ tj|ktjdk¡ 	¡ }|D ]›}|j
}ddlm} |  |¡ |j|k¡ ¡ }|r;|jnd}t| ||ƒ}t|d|d|› d	|j› d
d}	|  |	¡ |  t¡ tj
|k¡ ¡ }
|
ro|
 j|7  _nt||d}
|  |
¡ tj| ||d t| d|ƒ}t| d|ƒ}|j|kr³|js³t|d|d|› d|› d}|  |¡ |
 j|7  _d|_d|_||_q|  ¡  dS )u³   
    ë°°ì¹˜ ìž‘ì—…ìœ¼ë¡œ ë¯¸ì²˜ë¦¬ëœ ê±¸ìŒ ê¸°ë¡ì„ í¬ì¸íŠ¸ë¡œ ë³€í™˜í•˜ê³  íŠ¸ëžœìž­ì…˜ì„ ìƒì„±í•©ë‹ˆë‹¤.
    í•˜ë£¨ì— í•œ ë²ˆ ì‹¤í–‰ë˜ë„ë¡ ìŠ¤ì¼€ì¤„ë§ë©ë‹ˆë‹¤.
    é   )ÚdaysFr   r   NÚstepzDaily step points for z (z steps))r!   Útransaction_typeÚamountÚdescription)r!   Útotal_points)Úreferred_user_idÚearned_pointsÚACHIEVEMENT_STEP_GOALÚACHIEVEMENT_BONUSÚachievementzAchievement bonus for reaching z steps goal on T)r   ÚnowÚdater   r   r   r   Úrecord_dater   r   r!   r   r   r    r"   r   r   r   r   Úaddr   r.   r
   Úaward_referral_chain_bonusr	   Úgoal_achievedÚpoints_earnedr$   )r   Z	yesterdayr%   r   r!   r   r&   r   ÚpointsZstep_txÚuser_pointsÚachievement_goalÚachievement_bonusÚachievement_txr   r   r   Úprocess_batch_points"   sR   
þýü

ü
r@   )N)Úsqlalchemy.ormr   r   r   Úapp.models.step_recordr   Úapp.models.point_transactionr   Úapp.models.user_pointsr   Úapp.services.admin_servicer   r	   Úapp.services.user_servicer
   r   r'   r@   r   r   r   r   Ú<module>   s   