
    Eoh"                     z   d dl mZm Z  d dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ  G d de	      Z G d	 d
e	      Z G d de	      Z G d de	      Z G d de	      Z G d de	      Z G d de      Z G d de	      Z G d de	      Z G d de	      Z G d de	      Z G d de	      Z G d d e	      Zy!)"    )datedatetime)AnyListOptional)Field)
BaseSchema)FileMinimalSchemaFileResponseSchema)Usersc                      e Zd ZU dZ edd      Zeed<    edd      Ze	ed<    edd	
      Z
e	ed<    edd
      Ze	ed<    edd      Zeed<    edd      Zeed<    edd      Zee	   ed<    edd      Zee	   ed<    edd      Zee	   ed<    edd      Zee	   ed<    edd      Zee   ed<    edd      Zee   ed<   y) 
UserSchemaa1  
    Schema for user details.

    Attributes:
        user_id (str): Unique identifier for the user.
        username (str): The username of the user.
        email (str): The email of the user.
        is_active (bool): Whether the user is active.
        is_verified (bool): Whether the user's account is verified.
        is_foreign_visitor (bool): Whether the user is a foreign visitor.
        is_reported (bool): Whether the user is reported.
        is_online (int): Online status of the user (0=offline, 1=online).
        is_deleted (bool): Whether the user is marked as deleted.
        phone (Optional[str]): User's phone number.
        first_name (Optional[str]): User's first name.
        last_name (Optional[str]): User's last name.
        middle_name (Optional[str]): User's middle name.
        gender (Optional[str]): User's gender.
        last_login (datetime): Last login timestamp.
        created_at (datetime): Account creation timestamp.
        updated_at (datetime): Last update timestamp.
        dob (Optional[datetime]): Date of birth.
    NId of Line Item resourcedefaultdescriptionidUnique identifier for the useruser_id.Username for loginr   usernameUser's email addressemailTAccount status	is_activeFEmail verification statusis_verifiedUser's phone numberphoneUser's first name
first_nameUser's last name	last_nameUser's gendergenderAccount creation timestamp
created_atzLast update timestamp
updated_at)__name__
__module____qualname____doc__r   r   int__annotations__r   strr   r   r   boolr   r    r   r"   r$   r&   r(   r   r)        \/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/user/schemas/user_schemas.pyr   r      s    0 D.HIBI3STGST#+?@Hc@s(>?E3?D6FGItGe9TUKU ;PQE8C=Q %d@S TJT$T?QRIx}R!$OLFHSML%*4Ea%bJ"b%*4E\%]J"]r3   r   c                   ,    e Zd ZU eed<   dZee   ed<   y)CurrentUserContextis_guestNuser)r*   r+   r,   r1   r/   r8   r   r   r2   r3   r4   r6   r6   2   s    N!%D(:
%r3   r6   c                   J    e Zd ZU  edd      Zeed<    edd      Zeed<   y)UserRolesSchema.zName of the roler   labelz#Unique slug identifier for the roleslugN)r*   r+   r,   r   r;   r0   r/   r<   r2   r3   r4   r:   r:   7   s&    s(:;E3;c'LMD#Mr3   r:   c                       e Zd ZU  edd      Zeed<    edd      Zeed<    edd      Zeed<    edd	      Z	eed
<    edd      Z
eed<    edd      Zee   ed<   y)UserPermissionSchema.zModule name for the permissionr   modulez!Submodule name for the permission	submodulez!Operation name for the permission	operationzLabel for the operationoperation_labelTz Whether the permission is activer   r   Nz*Display order for the permission in the UIdisplay_order)r*   r+   r,   r   r?   r0   r/   r@   rA   rB   r   r1   rC   r   r.   r2   r3   r4   r>   r>   <   sr    )IJFCJ3,OPIsP3,OPIsP 2KLOSLD6XYItY#(;g#hM8C=hr3   r>   c                   V    e Zd ZU  edd      Zeed<    edd      Zee	e
      ed<   y)UserPermissionsSchemaN"List of roles assigned to the userr   rolez(List of permissions assigned to the userpermissions)r*   r+   r,   r   rG   r:   r/   rH   r   r   r>   r2   r3   r4   rE   rE   E   s6    !$4XYD/Y8=D9K$345 r3   rE   c                       e Zd ZU  edd      Zeed<    edd      Zeed<    edd      Zeed<    edd	      Z	eed
<    edd      Z
ee   ed<    edd      Zee   ed<   y)UserBaseSchema.r   r   r   r   r    r!   r"   r#   r$   Nr%   r&   Avatar file ID	avatar_id)r*   r+   r,   r   r   r0   r/   r    r"   r$   r&   r   rL   r.   r2   r3   r4   rJ   rJ   L   su    s(>?E3?s(=>E3>C-@AJA3,>?Is?!$ODFHSMD$T7GHIx}Hr3   rJ   c                   n    e Zd ZU  edd      Zeed<    edd      Zeed<    edd      Ze	e   ed<   y	)
UserCreateSchema.zUser's passwordr   passwordz#Confirmation of the user's passwordconfirm_password!User's access level in the systemaccess_levelN)
r*   r+   r,   r   rO   r0   r/   rP   rR   r   r2   r3   r4   rN   rN   W   s=    #+<=Hc=!#3XYcY#C5XYL$s)Yr3   rN   c                      e Zd ZU  edd      Zee   ed<    edd      Zee   ed<    edd      Z	ee   ed<    edd	      Z
ee   ed
<    edd      Zee   ed<    edd      Zeee      ed<    edd      Zee   ed<   y)UserUpdateSchemaNr   r   r   r   r    r!   r"   r#   r$   r%   r&   rQ   rR   rK   rL   )r*   r+   r,   r   r   r   r0   r/   r    r"   r$   r&   rR   r   rL   r.   r2   r3   r4   rT   rT   ]   s     3IJE8C=J 3HIE8C=I %d8K LJL$T7IJIx}J!$ODFHSMD(-d@c(dL(49%d$T7GHIx}Hr3   rT   c                      e Zd ZU dZ edd      Zeed<    edd      Ze	ed<    edd	
      Z
e	ed<    edd
      Ze	ed<    edd      Zee	   ed<    edd      Zee	   ed<    edd      Zee	   ed<    edd      Zee	   ed<    edd      Zeed<    edd      Zeed<    edd
      Zee   ed<    edd
      Zee   ed<    edd 
      Zee   ed!<    edd"
      Zeee	      ed#<    edd$      Zeee      ed%<   y)&UserReturnSchemaz
    Schema for returning user details after operations like registration or update.

    Attributes:
        user (UserSchema): The user details.
    Nr   r   r   r   r   .r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   Tr   r   Fr   r   zID of the user's avatar filerL   r'   r(   zAvatar file detailsavatarz&List of all roles assigned to the user	all_rolesrF   roles)r*   r+   r,   r-   r   r   r.   r/   r   r0   r   r   r    r   r"   r$   r&   r   r1   r   rL   r(   r   rW   r   rX   r   rY   rE   r2   r3   r4   rV   rV   i   sI    D.HIBI3STGST#+?@Hc@s(>?E3? ;PQE8C=Q %d@S TJT$T?QRIx}R!$OLFHSMLD6FGItGe9TUKU$T7UVIx}V%*4=Y%ZJ"Z+0CX+YFH'(Y%*4=e%fIxS	"f38Sw3xE8D./0xr3   rV   c                   2   e Zd ZU dZ edd      Zee   ed<    edd      Z	ee   ed<    edd	      Z
ee   ed
<    edd      Zee   ed<    edd      Zee   ed<    edd      Zee   ed<    edd      Zee   ed<    edd      Zee   ed<   y)UserFilterSchemaa5  
    Schema for filtering users in queries.

    Attributes:
        username (Optional[str]): Filter by username.
        email (Optional[str]): Filter by email.
        is_active (Optional[bool]): Filter by active status.
        is_verified (Optional[bool]): Filter by verification status.
        is_foreign_visitor (Optional[bool]): Filter by foreign visitor status.
        is_reported (Optional[bool]): Filter by reported status.
        is_online (Optional[int]): Filter by online status.
        is_deleted (Optional[bool]): Filter by deletion status.
    Nr   r   r   r   r   r    r!   r"   r#   r$   zFilter by active statusr   zFilter by verification statusr   zFilter by access levelrR   z	full name	full_name)r*   r+   r,   r-   r   r   r   r0   r/   r    r"   r$   r   r1   r   rR   r\   r2   r3   r4   r[   r[      s     !3IJE8C=J ;PQE8C=Q %d@S TJT$T?QRIx}R %d@Y ZIx~Z"'Ba"bK$b"'BZ"[L(3-[$T{CIx}Cr3   r[   c                   h    e Zd ZU  edd      Zeed<    edd      Zeed<    edd      Zeed<   y	)
ChangePasswordSchema.zCurrent password of the userr   current_passwordzNew password for the usernew_passwordz Confirmation of the new passwordrP   N)	r*   r+   r,   r   r_   r0   r/   r`   rP   r2   r3   r4   r^   r^      s:    !#3QRcRc/JKL#K!#3UVcVr3   r^   c                       e Zd ZU ee   ed<   ee   ed<   ee   ed<   ee   ed<   ee   ed<   ee   ed<   dZee   ed<   ed	        Z	y)
UserSessionSchema
session_idip_addrdeviceosr(   
user_agentNlocationc           
      4   |j                   |j                  |j                  g}dj                  |D cg c]  }|s|	 c}      } | |j                  |j
                  |j                  |j                  |j                  |j                  |xs d       S c c}w )Nz, )rc   rd   re   rf   r(   rg   rh   )
cityregioncountryjoinrc   rd   re   rf   r(   rg   )clssessionsummary_partspartsummarys        r4   from_orm_with_locationz(UserSessionSchema.from_orm_with_location   s     !w~~wG))mDdtTDE))OO>>zz))))_
 	
 Es
   BB)
r*   r+   r,   r   r0   r/   r   rh   classmethodrs   r2   r3   r4   rb   rb      sc    c]SM"" #Hhsm" 
 
r3   rb   c                   2    e Zd ZU eed<   eed<   ee   ed<   y)UserSessionsResponsemax_allowed_sessionsactive_countactive_sessionsN)r*   r+   r,   r.   r/   r   rb   r2   r3   r4   rv   rv      s    +,,r3   rv   N)r   r   typingr   r   r   pydanticr   src.apps.base.schemas.commonr	   src.apps.files.schemas.filer
   r   src.apps.user.models.user_modelr   r   r6   r:   r>   rE   rJ   rN   rT   rV   r[   r^   rb   rv   r2   r3   r4   <module>r      s    # & &  3 M 1$^ $^N& &
Nj N
i: iJ IZ IZ~ Z	Iz 	Iyz y<Dz D2W: W

 
:-: -r3   