o
    gh                     @   s   d dl mZmZ d dlmZ d dlmZmZmZmZ d dl	m
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 )    )OptionalList)datetime)	BaseModelEmailStrField	validator)AddressResponsec                   @   sn   e Zd ZU dZeed< eddddZeed< eddddZ	eed< edd	d
Z
eed< eddd
Zeed< dS )UserBasez6Base user schema with required fields for registrationemail.   2   
min_length
max_length
first_name	last_namez^\+?[0-9]{1,4}$pattern
phone_code^[0-9]{10,15}$phoneN)__name__
__module____qualname____doc__r   __annotations__r   r   strr   r   r    r   r   /app/app/schemas/user.pyr
      s   
 r
   c                   @   s   e Zd ZU dZedddZeed< eddddZeed< edd	d
Z	eed< eddd
Z
eed< eddddZee ed< dZee ed< edddddd ZdS )
UserCreatez/Schema for user creation with additional fields.   )r   passwordr   r   country_codez^[MF]$r   genderz^\d{4}-\d{2}-\d{2}$
birth_dateNreference_code_usedprofile_imageT)prealwaysc                 C   s   t |tr| dkrd S |S )N )
isinstancer   strip)clsvr   r   r    set_reference_code_used_nullable   s   z+UserCreate.set_reference_code_used_nullable)r   r   r   r   r   r"   r   r   r#   r$   r%   r&   r   r'   r   r/   r   r   r   r   r       s   
 r    c                   @   s   e Zd ZU dZedddZee ed< dZ	ee
 ed< edddZee ed< edd	d
dZee ed< dZee ed< eddd ZdS )
UserUpdatez=Schema for updating user information with all fields optionalNz^[a-zA-Z]+\s+[a-zA-Z]+$r   	full_namer   r   r   i  i )geledaily_step_goalr'   c                 C   s$   |r|  }t|dkrtd|S )Nr   z7Full name must contain exactly first name and last name)splitlen
ValueError)r-   r.   namesr   r   r   split_full_name*   s
   zUserUpdate.split_full_name)r   r   r   r   r   r1   r   r   r   r   r   r   r4   intr'   r   r9   r   r   r   r   r0       s   
 r0   c                   @   s$  e Zd ZU dZeed< eed< eed< eed< eed< eed< eed< eed	< d
Zeed< dZeed< dZ	e
e ed< dZeed< eed< dZe
e ed< dZeed< dZe
e ed< dZeed< eed< eed< eed< g Zee ed< dZeed< dZe
e ed< dZeed < G d!d" d"ZdS )#UserInDBBasez3Base schema for user data as stored in the databaseidr   r   r   r   r   r$   r%   i'  r4   zprofile/default_avatar.pngr'   Nbackground_imager   total_pointsreference_coder&   Fhealth_sync_status
last_login   statusr#   
created_at
updated_at	addresses   step_notification_frequencylast_step_notification_timestep_notifications_sent_todayc                   @      e Zd ZdZdS )zUserInDBBase.ConfigTN)r   r   r   from_attributesr   r   r   r   ConfigN   s    rM   )r   r   r   r   r:   r   r   r4   r'   r=   r   r>   r&   r@   boolrA   r   rC   rF   r   r	   rH   rI   rJ   rM   r   r   r   r   r;   3   s6   
 r;   c                   @   rK   )Userz$Public user schema for API responsesN)r   r   r   r   r   r   r   r   rO   R   s    rO   c                   @   s   e Zd ZU eed< eed< dS )UserReferralCoder<   r?   N)r   r   r   r:   r   r   r   r   r   r   rP   W   s   
 rP   N)typingr   r   r   pydanticr   r   r   r   Zapp.schemas.user_addressr	   r
   r    r0   r;   rO   rP   r   r   r   r   <module>   s    	