o
    "Æiv  ã                   @   sÖ   d Z ddlmZmZmZmZ ddlmZ ddlmZ ddl	m
Z
 G dd„ dee
ƒZG dd	„ d	eƒZG d
d„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZdS )z
User schemas
é    )Ú	BaseModelÚEmailStrÚfield_serializerÚfield_validator)ÚOptional)Údatetime)ÚEnumc                   @   s    e Zd ZdZdZdZdZdZdS )ÚUserRolezUser role enumerationÚplatform_adminÚplatform_userÚcustomer_adminÚcustomer_userN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚPLATFORM_ADMINÚPLATFORM_USERÚCUSTOMER_ADMINÚCUSTOMER_USER© r   r   ú8/lsinfo/ai/hellotax_ai/base_platform/app/schemas/user.pyr	   
   s    r	   c                   @   sH   e Zd ZU dZeed< eed< eed< edƒededefdd„ƒƒZ	d	S )
ÚUserRegisterzSchema for user registrationÚemailÚpasswordÚnameÚvÚreturnc                 C   ó(   ddl m} ||ƒ\}}|st|ƒ‚|S ©Nr   )Úvalidate_password_strength©Úapp.core.securityr    Ú
ValueError©Úclsr   r    Úis_validÚ	error_msgr   r   r   Úvalidate_password   ó
   zUserRegister.validate_passwordN)
r   r   r   r   r   Ú__annotations__Ústrr   Úclassmethodr(   r   r   r   r   r      s   
 r   c                   @   s"   e Zd ZU dZeed< eed< dS )Ú	UserLoginzSchema for user loginr   r   N)r   r   r   r   r   r*   r+   r   r   r   r   r-   "   s   
 r-   c                   @   ó   e Zd ZU dZeed< dS )ÚEmailVerificationzSchema for email verificationÚtokenN)r   r   r   r   r+   r*   r   r   r   r   r/   (   ó   
 r/   c                   @   r.   )ÚResendVerificationz'Schema for resending verification emailr   N)r   r   r   r   r   r*   r   r   r   r   r2   -   r1   r2   c                   @   sd   e Zd ZU dZeed< eed< eed< dZeed< dZe	e
 ed< edƒed	ed
efdd„ƒƒZdS )Ú
UserCreatezSchema for creating a userr   r   r   r   ÚroleNÚ	tenant_idr   r   c                 C   r   r   r!   r$   r   r   r   r(   :   r)   zUserCreate.validate_password)r   r   r   r   r   r*   r+   r4   r5   r   Úintr   r,   r(   r   r   r   r   r3   2   s   
 r3   c                   @   sŠ   e Zd ZU dZdZee ed< dZee	 ed< dZ
ee ed< dZee ed< dZee ed< dZeee  ed< dZeee  ed< dS )	Ú
UserUpdatezSchema for updating a userNr   r   r4   r5   Úis_verifiedÚrole_ids)r   r   r   r   r   r   r+   r*   r   r   r4   r5   r6   r8   Úboolr9   Úlistr   r   r   r   r7   D   s   
 r7   c                   @   s¼   e Zd ZU dZeed< eed< eed< eed< g Zee ed< dZ	e
e ed< dZe
e ed	< dZe
e ed
< eed< dZe
e ed< eed< eddƒde
e fdd„ƒZG dd„ dƒZdS )ÚUserResponsezSchema for user responseÚidr   r   r4   ÚrolesNr5   Úcompany_nameÚrole_displayr8   Ú
last_loginÚ
created_atÚdtc                 C   s   |d u rd S |  ¡ S )N)Ú	isoformat)ÚselfrC   Ú_infor   r   r   Úserialize_datetime]   s   zUserResponse.serialize_datetimec                   @   s   e Zd ZdZdS )zUserResponse.ConfigTN)r   r   r   Úfrom_attributesr   r   r   r   ÚConfigc   s    rI   )r   r   r   r   r6   r*   r+   r>   r;   r5   r   r?   r@   r:   rA   r   r   rG   rI   r   r   r   r   r<   O   s    
 r<   c                   @   sb   e Zd ZU dZeed< eed< eed< eed< g Zee ed< g Z	ee ed< g Z
ee ed< d	S )
ÚDashboardStatszSchema for dashboard statisticsÚtotal_usersÚonline_usersÚverified_usersÚadmin_usersÚpopular_modelsÚpopular_agentsÚrecent_activitiesN)r   r   r   r   r6   r*   rO   r;   ÚdictrP   rQ   r   r   r   r   rJ   g   s   
 rJ   N)r   Úpydanticr   r   r   r   Útypingr   r   Úenumr   r+   r	   r   r-   r/   r2   r3   r7   r<   rJ   r   r   r   r   Ú<module>   s    