Ë
    ’DiD  ã                  ó~   — d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
 ddlmZ  G d„ de	«      Z G d	„ d
ee
«      Zy)z6Custom user model for Telegram-authenticated accounts.é    )ÚannotationsN)ÚDecimal)ÚAbstractBaseUserÚBaseUserManagerÚPermissionsMixin)Úmodelsc                  ó4   — e Zd ZdZ	 d	 	 	 dd„Z	 d	 	 	 dd„Zy)ÚUserManagerz<Manager for the custom User model keyed by Telegram user ID.Nc                óâ   — |st        d«      ‚ | j                  dd|i|¤Ž}|j                  s|j                  «       |_        |j	                  «        |j                  | j                  ¬«       |S )Nz!telegram_user_id must be providedÚtelegram_user_id)Úusing© )Ú
ValueErrorÚmodelÚreferral_codeÚgenerate_referral_codeÚset_unusable_passwordÚsaveÚ_db)Úselfr   ÚpasswordÚextra_fieldsÚusers        úB/home/cursorai/projects/telegram-earn/backend/apps/users/models.pyÚcreate_userzUserManager.create_user   sr   € ñ  ÜÐ@ÓAÐAàˆt�z‰zñ 
Ø-ð
àñ
ˆð
 ×!Ò!Ø!%×!<Ñ!<Ó!>ˆDÔà×"Ñ"Ô$Ø�	‰	˜Ÿ™ˆ	Ô!Øˆó    c                ó  — |j                  dd«       |j                  dd«       |j                  dd«       |j                  d«      durt        d«      ‚|j                  d«      durt        d«      ‚ | j                  d||dœ|¤ŽS )	NÚis_staffTÚis_superuserÚ	is_activez"Superuser must have is_staff=True.z&Superuser must have is_superuser=True.)r   r   r   )Ú
setdefaultÚgetr   r   )r   r   r   r   s       r   Úcreate_superuserzUserManager.create_superuser&   sœ   € ð 	×Ñ 
¨DÔ1Ø×Ñ °Ô5Ø×Ñ ¨TÔ2à×Ñ˜JÓ'¨tÑ3ÜÐAÓBÐBØ×Ñ˜NÓ+°4Ñ7ÜÐEÓFÐFàˆt×Ñð 
Ø-Øñ
ð ñ
ð 	
r   ©N)r   Úintr   z
str | None)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r#   r   r   r   r
   r
      s;   „ ÙFð =AðØ #ðØ/9óð& =Að
Ø #ð
Ø/9ô
r   r
   c                  óÈ  ‡ — e Zd ZU  ej                  dd¬«      Z ej                  ddd¬«      Z ej                  d¬«      Z ej                  ddd¬«      Z	 ej                  ddd¬«      Z
 ej                  dd¬«      Z ej                  dd	 ed
«      ¬«      Z ej                  dd	 ed
«      ¬«      Z ej                  ddd¬«      Z ej$                  dej&                  dddd¬«      Z ej*                  d¬«      Z ej*                  d¬«      Z ej0                  d¬«      Z ej0                  d¬«      ZdZg Zded<    e«       Z G d„ d«      Z d„ Z!dd„Z"ˆ fd„Z#ˆ xZ$S )ÚUserT)ÚuniqueÚdb_indexéÿ   )Ú
max_lengthÚnullÚblank)r/   é
   )r0   r1   é   é   z
0.00000000)Ú
max_digitsÚdecimal_placesÚdefault)r/   r,   r-   r   Ú	referralsF)Ú	on_deleter0   r1   Úrelated_nameÚdb_constraint)r7   )Úauto_now_add)Úauto_nowr   z	list[str]ÚREQUIRED_FIELDSc                  ó`   — e Zd ZdZ ej
                  dg¬«       ej
                  dg¬«      gZy)ú	User.MetaÚusersr   )Úfieldsr   N)r&   r'   r(   Údb_tabler   ÚIndexÚindexesr   r   r   ÚMetar@   `   s1   „ ØˆàˆF�L‰LÐ!3Ð 4Ô5ØˆF�L‰L Ð 1Ô2ð
‰r   rF   c                ó:   — | j                   › d| j                  › d�S )Nz (Ú))Ú
first_namer   )r   s    r   Ú__str__zUser.__str__g   s!   € Ø—/‘/Ð" " T×%:Ñ%:Ð$;¸1Ð=Ð=r   c                ó.  — d}t         j                  t         j                  z   }t        |«      D ]Z  }dj	                  t        j                  |d¬«      «      }t        j                  j                  |¬«      j                  «       rŒX|c S  t        d«      ‚)z-Generate a unique 10-character referral code.r2   Ú )Úk)r   z8Failed to generate unique referral code after 10 retries)ÚstringÚascii_lowercaseÚdigitsÚrangeÚjoinÚrandomÚchoicesr+   ÚobjectsÚfilterÚexistsr   )r   Úmax_retriesÚalphabetÚ_Úcodes        r   r   zUser.generate_referral_codej   st   € àˆÜ×)Ñ)¬F¯M©MÑ9ˆä�{Ö#ˆAØ—7‘7œ6Ÿ>™>¨(°bÔ9Ó:ˆDÜ—<‘<×&Ñ&°TÐ&Ó:×AÑAÕCØ’ð $ô
 ÐSÓTÐTr   c                óf   •— | j                   s| j                  «       | _         t        ‰| �  |i |¤Ž y r$   )r   r   Úsuperr   )r   ÚargsÚkwargsÚ	__class__s      €r   r   z	User.savev   s.   ø€ Ø×!Ò!Ø!%×!<Ñ!<Ó!>ˆDÔÜ‰‰�dÐ%˜fÓ%r   )ÚreturnÚstr)%r&   r'   r(   r   ÚBigIntegerFieldr   Ú	CharFieldÚusernamerI   Ú	last_nameÚlanguage_codeÚURLFieldÚ	photo_urlÚDecimalFieldr   Úcredit_balanceÚbonus_balancer   Ú
ForeignKeyÚSET_NULLÚreferred_byÚBooleanFieldr    r   ÚDateTimeFieldÚ
created_atÚ
updated_atÚUSERNAME_FIELDr>   Ú__annotations__r
   rU   rF   rJ   r   r   Ú__classcell__)r`   s   @r   r+   r+   9   s  ø… Ø-�v×-Ñ-°TÀDÔIÐØˆv×Ñ¨3°TÀÔF€HØ!�×!Ñ!¨SÔ1€JØ �× Ñ ¨C°dÀ$ÔG€IØ$�F×$Ñ$°¸ÀTÔJ€MØ�—‘ T°Ô6€Ià(�V×(Ñ(ØØÙ˜Ó%ô€Nð
 (�F×'Ñ'ØØÙ˜Ó%ô€Mð %�F×$Ñ$°¸4È$ÔO€MØ#�&×#Ñ#ØØ—/‘/ØØØ Øô€Kð $�×#Ñ#¨DÔ1€IØ"ˆv×"Ñ"¨5Ô1€HØ%�×%Ñ%°4Ô8€JØ%�×%Ñ%¨tÔ4€Jà'€NØ!#€O�YÓ#á‹m€G÷
ñ 
ò>ó
U÷&ð &r   r+   )r)   Ú
__future__r   rS   rN   Údecimalr   Údjango.contrib.auth.modelsr   r   r   Ú	django.dbr   r
   r+   r   r   r   Ú<module>r{      sB   ðÙ <å "ã Û Ý ÷ñ õ
 ô%
�/ô %
ôP@&ÐÐ-õ @&r   