
    `j                         d dl mZ ddlmZmZmZ  G d dej                        Z G d dej                        Z G d d	ej                        Z	y
)    )serializers   )PropertyTypePropertyPropertyTypeBedc                        e Zd Z G d d      Zy)PropertyTypeBedSerializerc                       e Zd ZeZg dZdgZy)PropertyTypeBedSerializer.Meta)idbed_typequantityr   N)__name__
__module____qualname__r   modelfieldsread_only_fields     "/backend/properties/serializers.pyMetar      s    / 6r   r   N)r   r   r   r   r   r   r   r	   r	      s    " "r   r	   c                   J    e Zd Z ed      Z G d d      Zd Zd Zd Zd Z	y	)
PropertyTypeSerializerT)manyc                        e Zd ZeZg dZg dZy)PropertyTypeSerializer.Meta)r   	structurename	image_urlinternal_property_type_idproperty_size_sqm
max_guestsnum_bedsnum_sofa_bedsnum_bedroomsnum_bathrooms	amenitiesstatusbeds
created_at
updated_atr   r+   r,   N)r   r   r   r   r   r   r   r   r   r   r   r      s    
$ >r   r   c                 t    g d}|D ].  }|j                  |d      dk  st        j                  |di       |S )N)r#   r$   r%   r&   r'   r   zMust be a non-negative integer.)getr   ValidationError)selfattrsnumeric_fieldsfields       r   validatezPropertyTypeSerializer.validate%   sK    
 $Eyy"Q&!11=>  $ r   c                 P    |rt        |      dk(  rt        j                  d      |S )Nr   z(At least one bed type must be specified.)lenr   r0   )r1   r*   s     r   validate_bedsz$PropertyTypeSerializer.validate_beds6   s,    s4yA~--:  r   c                     |j                  d      }t        j                  j                  di |}|D ]#  }t	        j                  j                  dd|i| % |S Nr*   property_typer   )popr   objectscreater   )r1   validated_data	beds_datar;   beds        r   r>   zPropertyTypeSerializer.create=   sY    "&&v.	$,,33EnEC##**NN#N  r   c                 8   |j                  dd       }|j                         D ]  \  }}t        |||        |j                          |P|j                  j                         j                          |D ]#  }t        j                  j                  dd|i| % |S r:   )
r<   itemssetattrsaver*   alldeleter   r=   r>   )r1   instancer?   r@   attrvaluerA   s          r   updatezPropertyTypeSerializer.updateF   s    "&&vt4	 *//1KD%HdE* 2 MM&&( ''..MXMM ! r   N)
r   r   r   r	   r*   r   r5   r8   r>   rK   r   r   r   r   r      s*    $$/D> >,"r   r   c                   N    e Zd Z ej                  dd      Z G d d      Zd Zy)PropertySerializerzproperty_type.nameT)source	read_onlyc                        e Zd ZeZg dZg dZy)PropertySerializer.Meta)r   r   r;   r   property_type_namer)   availabilityinternal_property_idfloor_numberr(   r+   r,   r-   N)r   r   r   r   r   r   r   r   r   r   r   rQ   Y   s    
 >r   r   c                 >    ||dk  rt        j                  d      |S )Nr   z,floor_number must be a non-negative integer.)r   r0   )r1   rJ   s     r   validate_floor_numberz(PropertySerializer.validate_floor_numberk   s+    -->  r   N)r   r   r   r   	CharFieldrR   r   rW   r   r   r   rM   rM   V   s(    ...6JVZ[> >$r   rM   N)
rest_frameworkr   modelsr   r   r   ModelSerializerr	   r   rM   r   r   r   <module>r\      sG    & ; ;" ; ; "G[88 GT44 r   