
    ip                        d dl mZmZmZmZ d dlZd dlZd dlZd dlm	Z	 d dl
mZ  e       Zej                  edgddgdg       dZd	Z ej                   d
d      Z ed      fdefdZ G d de	      Zej+                  d       ed      fdedefd       Zej+                  d       ed      fdedefd       Zej+                  d       ed      fdedefd       Zej+                  d       ed      fdefd       Zej5                  d       ed      fdedefd       Zej5                  d       ed      fdefd       Zej5                  d       ed      fdefd       Zy)     )FastAPIHeaderHTTPExceptionRequestN)	BaseModel)CORSMiddleware*T)allow_originsallow_credentialsallow_methodsallow_headerszconfig.yamldataSHARED_AUTH_TOKENdefault_secret_tokenauthorizationc                 6    | dt          k7  rt        dd      y )NzBearer i  zInvalid token)status_codedetail)SHARED_TOKENr   )r   s    &/var/www/app/trading-bot/api/server.pyverify_tokenr      s#    ',00ODD 1    c                   ,    e Zd ZU eed<   eed<   eed<   y)ConfigUpdatebot_settingsstrategy_paramsrisk_managementN)__name__
__module____qualname__dict__annotations__ r   r   r   r      s    r   r   z/api/statusrequestc                    K   t        |       t        | j                  j                  dd       }|r+|j                  rdnd}|j
                  d   d   rdnd}||dS d	d	dS w)
NbotRUNNINGSTOPPEDr   testnetTESTNETLIVE)statusmodeUNKNOWN)r   getattrappstate
is_runningconfig)r$   r   r&   
status_strr-   s        r   
get_statusr5   #   sc     
'++##UD
1C
"%..Yi
JJ~6yAyv$d3333s   AA!z/api/balancec                   K   t        |       t        | j                  j                  dd       }|sddi dS |j                  j                         }d}d|v r|d   d   }|}i }|j                         D ]r  \  }}|dk(  r|d   |d   d||<   | d}	d}
|	|j                  j                  v r|j                  j                  |	   d   }
|d   |
z  }||z  }|d	kD  sh|d   |d||<   t |||dS w)
Nr&   g        )
total_usdt	free_usdtassetsUSDTfreetotal)amountvaluepriceg      ?)	r   r/   r0   r1   order_executorget_portfolio_balancesitemssignal_generatorlatest_states)r$   r   r&   balancesr8   r7   assets_dataassetbalsymbolr?   r>   s               r   get_balancerJ   -   s3    
'++##UD
1C!rBB !!88:HIV$V,	 JKnn& J
sF?,/L3w<!PK 7$S))777((66v>wGEGu$e
3;,/L5!IKJ  %9TTs   CC.C.z
/api/statec                    K   t        |       t        | j                  j                  dd       }|si S |j                  j
                  S w)Nr&   )r   r/   r0   r1   rC   rD   )r$   r   r&   s      r   	get_staterL   Q   s@     
'++##UD
1C	---s   AA	z/api/tradesc                   K   t        |        t        j                  j                  t        d      }t        j                  j                  |      r+t        |d      5 }t        j                  |      cd d d        S g S # 1 sw Y   g S xY ww)Nztrades_log.jsonr)	r   ospathjoin	DATA_PATHexistsopenjsonload)r   rP   fs      r   
get_tradesrX   Z   sg     77<<	#45D	ww~~d$_ 	 99Q<	  	 I	 Is   ABA>2B>BBz/api/configr3   c                   K   t        |       t        t        d      5 }t        j                  |      }d d d        | j
                  rd   j                  | j
                         | j                  rd   j                  | j                         | j                  rd   j                  | j                         t        t        d      5 }t        j                  |       d d d        t        t        j                  dd       }|r+|_        |d   j                  d|j                        |_        dd	iS # 1 sw Y   xY w# 1 sw Y   bxY ww)
NrN   r   r   r   wr&   trading_enabledmessagezConfig updated)r   rT   CONFIG_PATHyaml	safe_loadr   updater   r   dumpr/   r0   r1   r3   getr2   )r3   r   rW   current_configr&   s        r   update_configrd   c   s!     
k3	 +1*+ ~&--f.A.AB()001G1GH()001G1GH	k3	 %1		.!$% #))UD
)C
#
 (7;;<Ms~~^'((-+ +% %s5   ED5BE
E!AE5D?:EEEz
/api/startc                    K   t        |        t        t        j                  dd       }|r:|j                  s.dd l}d|_        |j                  |j                                ddiS ddiS w)Nr&   r   Tr\   zBot startedz Bot already running or not found)r   r/   r0   r1   r2   asynciocreate_tasktrading_loop)r   r&   rf   s      r   	start_botri      sa     
#))UD
)C
3>>C,,./=))9::s   A'A)z	/api/stopc                 x   K   t        |        t        t        j                  dd       }|rd|_        ddiS ddiS w)Nr&   Fr\   zBot stop signal sentzBot not found)r   r/   r0   r1   r2   )r   r&   s     r   stop_botrk      sA     
#))UD
)C
122''s   8:)fastapir   r   r   r   r^   rO   rU   pydanticr   fastapi.middleware.corsr   r0   add_middlewarer]   rR   getenvr   strr   r   rb   r5   rJ   rL   rX   postrd   ri   rk   r#   r   r   <module>rs      s   ; ;  	   2i   %%%   	 ryy,.DE&,Tl E E9 
 <B4L 4g 4c 4 4 =CD\ !Uw !Us !U !UF ;A$< .W .S . . *0, C   -CI$< ) )S ) )8 ,)/ ;3 ; ; +(.t (# ( (r   