+
    j                       ^ RI Ht ^ RIt^ RIHt ^ RIHtHtHtH	t	 ^ RI
HtHtHtHtHt ]R 4       tR!R R lltR!R	 R
 lltR!R R lltR"R R lltR R ltR R ltR R ltR#R R lltR R ltR R ltR R ltR$R R lltR R  ltR# )%    )annotationsN)contextmanager)AnyDictListOptional)DB_HOSTDB_NAMEDB_PASSDB_PORTDB_USERc               #  X  "   \         P                  ! \        \        \        \
        \        R \         P                  P                  RR7      p  V x  V P                  4         T P                  4        R#   \         d    T P                  4        h i ; i  T P                  4        i ; i5i)utf8mb4F)hostuserpassworddatabaseportcharsetcursorclass
autocommitN)pymysqlconnectr	   r   r   r
   r   cursors
DictCursorcommit	Exceptionrollbackclose)conns    8C:\xampp\htdocs\divulga_creditos_bot_mvp\bot\database.pydbr"   	   s{     ??OO..	D

 	

	   	

s*   AB*A5 #B*5BB B''B*c               $    V ^8  d   QhRRRRRR/# )   sqlstrparamstuplereturnzOptional[Dict[str, Any]] )formats   "r!   __annotate__r,      s"     " "# "u ".F "    c           	     (   \        4       ;_uu_ 4       pVP                  4       ;_uu_ 4       pVP                  W4       VP                  4       uuR R R 4       uuR R R 4       #   + '       g   i     M; i R R R 4       R #   + '       g   i     R # ; iN)r"   cursorexecutefetchoner%   r'   r    curs   &&  r!   r2   r2      sO    	[[]]cKK$<<> ] 
]] 
s"   B !A"	
B "A2-B  B	c               $    V ^8  d   QhRRRRRR/# )r$   r%   r&   r'   r(   r)   List[Dict[str, Any]]r*   )r+   s   "r!   r,   r,   &   s"     ( (# (u (.B (r-   c           	     :   \        4       ;_uu_ 4       pVP                  4       ;_uu_ 4       pVP                  W4       \        VP	                  4       4      uuR R R 4       uuR R R 4       #   + '       g   i     M; i R R R 4       R #   + '       g   i     R # ; ir/   )r"   r0   r1   listfetchallr3   s   &&  r!   r9   r9   &   sT    	[[]]cKK$' ] 
]] 
s"   B	*A+	
B	+A;6B		B	c               $    V ^8  d   QhRRRRRR/# )r$   r%   r&   r'   r(   r)   intr*   )r+   s   "r!   r,   r,   -   s!     ! ! !e !S !r-   c           	         \        4       ;_uu_ 4       pVP                  4       ;_uu_ 4       pVP                  W4       VP                  uuR R R 4       uuR R R 4       #   + '       g   i     M; i R R R 4       R #   + '       g   i     R # ; ir/   )r"   r0   r1   	lastrowidr3   s   &&  r!   r1   r1   -   sM    	[[]]cKK$== ] 
]] 
s"   A<A		
A<A.)A<<B	c               $    V ^8  d   QhRRRRRR/# )r$   keyr&   defaultr)   r*   )r+   s   "r!   r,   r,   4   s&     R RS R3 R Rr-   c                z    \        R V 34      pV'       d&   VP                  R4      e   \        VR,          4      # T# )z)SELECT value FROM settings WHERE `key`=%svalue)r2   getr&   )r?   r@   rows   && r!   get_settingrE   4   s5    
>
GC #(8(D3s7|Q'Qr-   c               $    V ^8  d   QhRRRRRR/# )r$   r?   r&   rB   
str | Noner)   Noner*   )r+   s   "r!   r,   r,   9   s!      S   r-   c                     \        R W34       R# )zaINSERT INTO settings (`key`, `value`) VALUES (%s, %s) ON DUPLICATE KEY UPDATE value=VALUES(value)Nr1   )r?   rB   s   &&r!   set_settingrK   9   s    k	r-   c               (    V ^8  d   QhRRRRRRRR/# )r$   telegram_idr;   usernamerG   display_namer)   Dict[str, Any]r*   )r+   s   "r!   r,   r,   @   s/     E Ec EZ Ez EVd Er-   c                    \        R V 34      pT;'       g    RP                  R4      ;'       g    RpV'       d*   \        RWBVR,          34       \        RVR,          34      # \        RWV34      p\        RV34      # )z)SELECT * FROM models WHERE telegram_id=%s @Nz:UPDATE models SET username=%s, display_name=%s WHERE id=%sidz SELECT * FROM models WHERE id=%sz_INSERT INTO models (telegram_id, username, display_name, status) VALUES (%s, %s, %s, 'pending'))r2   lstripr1   )rM   rN   rO   modelclean_usernamemodel_ids   &&&   r!   ensure_modelrY   @   s    @;.QEnn",,S199TNH5;7	
 :U4[NKKi	l3H 6DDr-   c                   V ^8  d   QhRR/# )r$   r)   r6   r*   )r+   s   "r!   r,   r,   R   s      1 r-   c                     \        R 4      # )zLSELECT * FROM credit_packages WHERE active=1 ORDER BY sort_order ASC, id ASC)r9   r*   r-   r!   get_active_packagesr\   R   s    V r-   c               D    V ^8  d   QhRRRRRRRRRRR	RR
RRRRRRRRR/# )r$   rX   r;   
package_idamountfloatcreditsproviderr&   external_referencepayment_urlqr_codeprovider_payment_idraw_responser)   r*   )r+   s   "r!   r,   r,   X   sv        	
       	r-   c
                .    \        R V VVVVVVVVV	3
4      # )z
        INSERT INTO payments
        (model_id, package_id, amount, credits, provider, external_reference, payment_url, qr_code, provider_payment_id, raw_response)
        VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
        rJ   )
rX   r^   r_   ra   rb   rc   rd   re   rf   rg   s
   &&&&&&&&&&r!   create_paymentri   X   s;     	 	
 r-   c               $    V ^8  d   QhRRRRRR/# )r$   rX   r;   reasonr&   r)   boolr*   )r+   s   "r!   r,   r,   y   s!      s C D r-   c           	        \        4       ;_uu_ 4       pVP                  4       ;_uu_ 4       pVP                  R V 34       VP                  4       pV'       d   \	        VR,          4      ^ 8:  d    RRR4       RRR4       R# VP                  RV 34       VP                  RW34        RRR4       RRR4       R#   + '       g   i     M; i RRR4       R#   + '       g   i     R# ; i)z8SELECT credit_balance FROM models WHERE id=%s FOR UPDATEcredit_balanceNFzAUPDATE models SET credit_balance = credit_balance - 1 WHERE id=%szYINSERT INTO credit_transactions (model_id, type, amount, reason) VALUES (%s,'spend',1,%s)T)r"   r0   r1   r2   r;   )rX   rk   r    r4   rD   s   &&   r!   spend_one_creditro   y   s    	[[]]cKKRU]T_`,,.C#c"2349  
 KK[^f]hiKKk"
   
]] 
s/   CAB;	0C'B;	)C;CCC*	c                    V ^8  d   QhRRRR/# )r$   rX   r;   r)   r*   )r+   s   "r!   r,   r,      s     + +c +c +r-   c                T    \        R V 34      pV'       d   \        VR,          4      # ^ # )z}SELECT COUNT(*) AS total FROM ads WHERE model_id=%s AND DATE(created_at)=CURDATE() AND status NOT IN ('rejected','cancelled')total)r2   r;   )rX   rD   s   & r!   ads_today_countrs      s/    
 	H	C !$3s7|**r-   c               4    V ^8  d   QhRRRRRRRRRRR	RR
R/# )r$   rV   rP   answerszDict[str, str]media_file_idr&   
media_type
final_textstatusr)   r;   r*   )r+   s   "r!   r,   r,      sN     ) ))) ) 	)
 ) ) 	)r-   c                   \        4       ;_uu_ 4       pVP                  4       ;_uu_ 4       pVP                  R V R,          V R,          V P                  R4      VVVV34       VP                  pRRRRRR	R
R/p	VP                  4        F)  w  rVP                  RWV	P                  W4      V34       K+  	  \        V4      uuRRR4       uuRRR4       #   + '       g   i     M; i RRR4       R#   + '       g   i     R# ; i)z
                INSERT INTO ads (model_id, telegram_user_id, username, final_text, media_file_id, media_type, status, credit_spent)
                VALUES (%s,%s,%s,%s,%s,%s,%s,1)
                rT   rM   rN   
video_callu   Faz vídeo chamada?sextingzFaz sexting?packsu   Vende packs/prévias?	availableu   Está disponível agora?zYINSERT INTO ad_answers (ad_id, question_key, question_label, answer) VALUES (%s,%s,%s,%s)N)r"   r0   r1   rC   r=   itemsr;   )rV   ru   rv   rw   rx   ry   r    r4   ad_idlabelsr?   answers   &&&&&&      r!   save_adr      s     
[[]]cKK
 $K-(IIj)!  MME 3>07	F  '}}oC!5v>  / u:A ] 
]] 
s#   C3BC	 
C3C% C33D	c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r$   chat_idr;   titler&   	chat_typery   r)   rH   r*   )r+   s   "r!   r,   r,      s0      # c c 3 W[ r-   c                "    \        R WW#34       R# )z
        INSERT INTO target_groups (chat_id, title, type, status)
        VALUES (%s,%s,%s,%s)
        ON DUPLICATE KEY UPDATE title=VALUES(title), type=VALUES(type)
        NrJ   )r   r   r   ry   s   &&&&r!   upsert_groupr      s    	
 
+r-   c               $    V ^8  d   QhRRRRRR/# )r$   rX   r;   cpf_cnpjr&   r)   rH   r*   )r+   s   "r!   r,   r,      s!      C 3 4 r-   c                     \        R W34       R# )z)UPDATE models SET cpf_cnpj=%s WHERE id=%sNrJ   )rX   r   s   &&r!   update_model_cpf_cnpjr      s    3	r-   )r*   )rR   )rR   rR   rR   rR   )pending)
__future__r   r   
contextlibr   typingr   r   r   r   configr	   r
   r   r   r   r"   r2   r9   r1   rE   rK   rY   r\   ri   ro   rs   r   r   r   r*   r-   r!   <module>r      ss    "  % , , > >  *"(!R
E$B$+)Xr-   