
    [j                    P   S SK Jr  S SKrS SKJr  S SKJrJrJrJ	r	  S SK
JrJrJrJrJr  \S 5       rSSS jjrSSS jjrSSS	 jjrSSS
 jjrSS jrSS jrSS jr    S                     SS jjrSS jrS S jr              S!S jrS"S#S jjrS$S jrg)%    )annotationsN)contextmanager)AnyDictListOptional)DB_HOSTDB_NAMEDB_PASSDB_PORTDB_USERc               #  N  #    [         R                  " [        [        [        [
        [        S[         R                  R                  SS9n  U v   U R                  5          U R                  5         g ! [         a    U R                  5         e f = f! U R                  5         f = f7f)Nutf8mb4F)hostuserpassworddatabaseportcharsetcursorclass
autocommit)pymysqlconnectr	   r   r   r
   r   cursors
DictCursorcommit	Exceptionrollbackclose)conns    ./mnt/data/patch_asaas_cpf_cnpj/bot/database.pydbr"   	   s{     ??OO..	D

 	

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

s*   AB%A1  B%1BB B""B%c                    [        5        nUR                  5        nUR                  X5        UR                  5       sS S S 5        sS S S 5        $ ! , (       d  f       O= f S S S 5        g ! , (       d  f       g = fN)r"   cursorexecutefetchonesqlparamsr    curs       r!   r'   r'      sI    	[[]cKK$<<> ] 
]] 
s!   A+!A	A+
A	A++
A9c                
   [        5        nUR                  5        nUR                  X5        [        UR	                  5       5      sS S S 5        sS S S 5        $ ! , (       d  f       O= f S S S 5        g ! , (       d  f       g = fr$   )r"   r%   r&   listfetchallr(   s       r!   r.   r.   &   sN    	[[]cKK$' ] 
]] 
s"   A4*A	A4
A'	#A44
Bc                    [        5        nUR                  5        nUR                  X5        UR                  sS S S 5        sS S S 5        $ ! , (       d  f       O= f S S S 5        g ! , (       d  f       g = fr$   )r"   r%   r&   	lastrowidr(   s       r!   r&   r&   -   sG    	[[]cKK$== ] 
]] 
s!   A'A	A'
A	A''
A5c                n    [        SU 45      nU(       a   UR                  S5      b  [        US   5      $ U$ )Nz)SELECT value FROM settings WHERE `key`=%svalue)r'   getstr)keydefaultrows      r!   get_settingr8   4   s5    
>
GC #(8(D3s7|Q'Q    c                    [        SX45        g )NzaINSERT INTO settings (`key`, `value`) VALUES (%s, %s) ON DUPLICATE KEY UPDATE value=VALUES(value)r&   )r5   r2   s     r!   set_settingr<   9   s    k	r9   c                    [        SU 45      nU=(       d    SR                  S5      =(       d    S nU(       a!  [        SXBUS   45        [        SUS   45      $ [        SXU45      n[        SU45      $ )Nz)SELECT * FROM models WHERE telegram_id=%s @z: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'))r'   lstripr&   )telegram_idusernamedisplay_namemodelclean_usernamemodel_ids         r!   ensure_modelrH   @   s    @;.QEn",,S19TNH5;7	
 :U4[NKKi	l3H 6DDr9   c                     [        S5      $ )NzLSELECT * FROM credit_packages WHERE active=1 ORDER BY sort_order ASC, id ASC)r.    r9   r!   get_active_packagesrK   R   s    V r9   c
                .    [        SU UUUUUUUUU	4
5      $ )Nz
        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)
        r;   )
rG   
package_idamountcreditsproviderexternal_referencepayment_urlqr_codeprovider_payment_idraw_responses
             r!   create_paymentrV   X   s;     	 	
 r9   c                   [        5        nUR                  5        nUR                  SU 45        UR                  5       nU(       a  [	        US   5      S::  a   S S S 5        S S S 5        gUR                  SU 45        UR                  SX45         S S S 5        S S S 5        g! , (       d  f       O= f S S S 5        g ! , (       d  f       g = f)Nz8SELECT credit_balance FROM models WHERE id=%s FOR UPDATEcredit_balancer   FzAUPDATE 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"   r%   r&   r'   int)rG   reasonr    r+   r7   s        r!   spend_one_creditr[   y   s    	[[]cKKRU]T_`,,.C#c"2349  
 KK[^f]hiKKk"
   
]] 
s.   B>>B#B>+'B#B>#
B1	-B>>
Cc                J    [        SU 45      nU(       a  [        US   5      $ S$ )Nz}SELECT COUNT(*) AS total FROM ads WHERE model_id=%s AND DATE(created_at)=CURDATE() AND status NOT IN ('rejected','cancelled')totalr   )r'   rY   )rG   r7   s     r!   ads_today_countr^      s/    
 	H	C !$3s7|**r9   c                   [        5        nUR                  5        nUR                  SU S   U S   U R                  S5      UUUU45        UR                  nSSSSS	.n	UR                  5        H)  u  pUR                  S
XU	R                  X5      U45        M+     [        U5      sS S S 5        sS S S 5        $ ! , (       d  f       O= f S S S 5        g ! , (       d  f       g = f)Nz
                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)
                r@   rB   rC   u   Faz vídeo chamada?zFaz sexting?u   Vende packs/prévias?u   Está disponível agora?)
video_callsextingpacks	availablezYINSERT INTO ad_answers (ad_id, question_key, question_label, answer) VALUES (%s,%s,%s,%s))r"   r%   r&   r3   r0   itemsrY   )rE   answersmedia_file_id
media_type
final_textstatusr    r+   ad_idlabelsr5   answers               r!   save_adrm      s     
[[]cKK
 $K-(IIj)!  MME 4)07	F  '}}oC!5v>  / u:A ] 
]] 
s#   CB	B8%	C8
C	C
C!c                     [        SXX#45        g )Nz
        INSERT INTO target_groups (chat_id, title, type, status)
        VALUES (%s,%s,%s,%s)
        ON DUPLICATE KEY UPDATE title=VALUES(title), type=VALUES(type)
        r;   )chat_idtitle	chat_typeri   s       r!   upsert_grouprr      s    	
 
+r9   c                    [        SX45        g )Nz)UPDATE models SET cpf_cnpj=%s WHERE id=%sr;   )rG   cpf_cnpjs     r!   update_model_cpf_cnpjru      s    3	r9   )rJ   )r)   r4   r*   tuplereturnzOptional[Dict[str, Any]])r)   r4   r*   rv   rw   List[Dict[str, Any]])r)   r4   r*   rv   rw   rY   )r>   )r5   r4   r6   r4   rw   r4   )r5   r4   r2   
str | Nonerw   None)rB   rY   rC   ry   rD   ry   rw   Dict[str, Any])rw   rx   )r>   r>   r>   r>   )rG   rY   rM   rY   rN   floatrO   rY   rP   r4   rQ   r4   rR   r4   rS   r4   rT   r4   rU   r4   rw   rY   )rG   rY   rZ   r4   rw   bool)rG   rY   rw   rY   )rE   r{   re   zDict[str, str]rf   r4   rg   r4   rh   r4   ri   r4   rw   rY   )pending)
ro   rY   rp   r4   rq   r4   ri   r4   rw   rz   )rG   rY   rt   r4   rw   rz   )
__future__r   r   
contextlibr   typingr   r   r   r   configr	   r
   r   r   r   r"   r'   r.   r&   r8   r<   rH   rK   rV   r[   r^   rm   rr   ru   rJ   r9   r!   <module>r      s-   "  % , , > >  *"(!R
E$ !  	
       	B$+))) ) 	)
 ) ) 	)Xr9   