
    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tzz 
-


 !!!%!<!<!>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    FLL!3 45FLL 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    ))FMM9{#A776>>(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--TDIv3TFH!!!S1J   Cd$GI$F$$TJMT6I(V((%N
 (F''%M %F$$4$OM#&##// K $##D1I"v""51H%%%48J%%%t4J'N!#OY#mG
 
>
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   