Ë
    ôŽ)iË  ã                  ó†   — d Z ddlmZ ddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZ ddlmZ ddlmZmZ ddlmZ  G d	„ d
e«      Zy)z
User database model.
é    )Úannotations)Údatetime)ÚOptional)ÚStringÚBooleanÚDateTimeÚTextÚfunc)Úhybrid_property)ÚMappedÚmapped_column)ÚBasec                  óÜ  — e Zd ZU dZdZ eddd¬«      Zded<    e ed«      ddd¬	«      Z	d
ed<    e ed«      ddd¬	«      Z
d
ed<    e ed«      d¬«      Zd
ed<    e ed«      d¬«      Zded<    e ed«      d¬«      Zded<    e ed«      d¬«      Zded<    eedd¬«      Zded<    eedd¬«      Zded<    eedd¬«      Zded<    e ed«      d¬«      Zded<    e ed«      d¬«      Zded<    e ed«      d¬«      Zded<    e ed«      ddd¬	«      Zded<    eed¬«      Zded <    e ed!«      d¬«      Zded"<    e ed¬#«      d¬«      Zd$ed%<    e ed¬#«       ej:                  «       d¬&«      Zd'ed(<    e ed¬#«       ej:                  «        ej:                  «       d¬)«      Zd'ed*<    e ed¬#«      d¬«      Z d$ed+<   e!d1d,„«       Z"d2d-„Z#e$d3d.„«       Z%e$d3d/„«       Z&y0)4ÚUserz¤
    User model for storing user account information.
    
    This model represents users in the system with basic authentication
    and profile information.
    ÚusersT)Úprimary_keyÚindexÚautoincrementzMapped[int]Úidéÿ   F)Úuniquer   ÚnullablezMapped[str]Úemailéd   Úusername)r   Úhashed_passwordzMapped[Optional[str]]Ú
first_nameÚ	last_nameéÈ   Ú	full_name)Údefaultr   zMapped[bool]Ú	is_activeÚis_verifiedÚis_superuseré   Úphone_numberÚphoneÚmiddle_nameé2   Úuser_idÚbioiô  Ú
avatar_url)ÚtimezonezMapped[Optional[datetime]]Ú
deleted_at)Úserver_defaultr   zMapped[datetime]Ú
created_at)r/   Úonupdater   Ú
updated_atÚ
last_loginc                ó6   — | j                   xs | j                  S )z5Get display name, preferring full_name over username.)r    r   ©Úselfs    úX/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/src/apps/users/models/user.pyÚdisplay_namezUser.display_name?   s   € ð ~‰~Ò. §¡Ð.ó    c                óü   — | j                   r-| j                  r!| j                   › d| j                  › | _        y| j                   r| j                   | _        y| j                  r| j                  | _        yd| _        y)z=Update the full_name field based on first_name and last_name.ú N)r   r   r    r5   s    r7   Úupdate_full_namezUser.update_full_nameD   sV   € à?Š?˜tŸ~š~Ø $§¡Ð0°°$·.±.Ð1AÐBˆDNØ_Š_Ø!Ÿ_™_ˆDNØ^Š^Ø!Ÿ^™^ˆDNà!ˆDNr9   c                ó6   — t        | d«      r| j                  S dS )zx
        Check if user is active.
        
        Returns:
            True if user is active, False otherwise
        r"   T)Úhasattrr"   r5   s    r7   Úis_user_activezUser.is_user_activeO   s   € ô ")¨¨{Ô!;ˆt~‰~ÐEÀÐEr9   c                ó6   — t        | d«      r| j                  S dS )z|
        Check if user is verified.
        
        Returns:
            True if user is verified, False otherwise
        r#   F)r>   r#   r5   s    r7   Úis_user_verifiedzUser.is_user_verifiedY   s   € ô $+¨4°Ô#?ˆt×ÑÐJÀUÐJr9   N)ÚreturnÚstr)rB   ÚNone)rB   Úbool)'Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__tablename__r   r   Ú__annotations__r   r   r   r   r   r   r    r   r"   r#   r$   r&   r'   r(   r*   r	   r+   r,   r   r.   r
   Únowr0   r2   r3   Úpropertyr8   r<   r   r?   rA   © r9   r7   r   r      sU  … ñð €Mñ $°¸DÐPTÔU€BˆÓUñ '¡v¨c£{¸4ÀtÐV[Ô\€Eˆ;Ó\Ù)©&°«+¸dÈ$ÐY^Ô_€HˆkÓ_Ù#0±¸³ÀuÔ#M€O[ÓMñ )6±f¸S³kÈDÔ(Q€JÐ%ÓQÙ'4±V¸C³[È4Ô'P€IÐ$ÓPÙ'4±V¸C³[È4Ô'P€IÐ$ÓPñ ,¨G¸TÈEÔR€Iˆ|ÓRÙ -¨g¸uÈuÔ U€KÓUÙ!.¨wÀÐPUÔ!V€L,ÓVñ +8¹¸r»
ÈTÔ*R€LÐ'ÓRÙ#0±¸³ÀdÔ#K€EÐ ÓKÙ)6±v¸c³{ÈTÔ)R€KÐ&ÓRÙ%2±6¸"³:ÀdÐRVÐaeÔ%f€GÐ"ÓfÙ!.¨t¸dÔ!C€CÐ	ÓCÙ(5±f¸S³kÈDÔ(Q€JÐ%ÓQÙ-:¹8ÈTÔ;RÐ]aÔ-b€JÐ*Óbñ $1±À4Ô1HÐYaÐY]×YaÑYaÓYcÐnsÔ#t€JÐ ÓtÙ#0±À4Ô1HÐYaÐY]×YaÑYaÓYcÐnvÐnr×nvÑnvÓnxð  DIô  $J€JÐ ó  JÙ-:¹8ÈTÔ;RÐ]aÔ-b€JÐ*Óbð ò/ó ð/ó	"ð òFó ðFð òKó ñKr9   r   N)rI   Ú
__future__r   r   Útypingr   Ú
sqlalchemyr   r   r   r	   r
   Úsqlalchemy.ext.hybridr   Úsqlalchemy.ormr   r   Úsrc.apps.base.models.baser   r   rN   r9   r7   ú<module>rU      s4   ðñõ #Ý Ý ç <Õ <Ý 1ß 0å *ôQKˆ4õ QKr9   