a
     ld                     @   s   d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
mZ d dlmZmZmZ g dZG dd	 d	eZG d
d dejZG dd deeejZG dd dejZG dd dejZG dd dejZdS )    )serializers)ValidationError)UniqueValidator)HistoryTypeHistoryTypeSymbol)PlatformReviewSource)AverageRatingRepDynamicFieldsModelSerializerReviewsCountRep)ZCheckatradezTrustpilot.comZYelpZHomeAdvisorZAngiZBBBZGoogleZFacebookc                       sj   e Zd Ze ZejddddZG dd dZe	d fddZ
 fd	d
Ze	dddZdd Z  ZS )PlatformSerializerFT)required
allow_nullallow_blankc                   @   s<   e Zd ZeZdZddeej dgdde	j
jidZdS )	zPlatformSerializer.Meta__all__FT)queryset)r   r   
validatorsdefault)namesync_statusN)__name__
__module____qualname__r   modelfieldsr   objectsallr   
SyncStatusNOT_SYNCextra_kwargs r    r    F/var/www/html/Ranjet/backend/verify_trusted/reviews/api/serializers.pyMeta   s   
r"   )instancec                    s*   d|v r|d dkrd |d< t  ||S Ndisplay_order)superupdate)selfr#   validated_data	__class__r    r!   r(   *   s    zPlatformSerializer.updatec                    s(   d|v r|d dkrd |d< t  |S r$   )r'   create)r)   r*   r+   r    r!   r-   /   s    zPlatformSerializer.createobjc                 C   s
   |j tv S N)r   ABLE_TO_SYNC_NAMESr)   r/   r    r    r!   get_able_to_sync_reviews4   s    z+PlatformSerializer.get_able_to_sync_reviewsc                 C   s@   |rt |dkrdS z
t|W S  ty:   tdY n0 d S )Nr   r&   zYou must supply an integer)lenint
ValueErrorr   r   )r)   valuer    r    r!   validate_display_order7   s    
z)PlatformSerializer.validate_display_order)r   r   r   r   SerializerMethodFieldable_to_sync_reviews	CharFieldr%   r"   r   r(   r-   r3   r8   __classcell__r    r    r+   r!   r      s   r   c                   @   sB   e Zd ZejejjdZejddZ	ejddZ
G dd dZdS )UserPlatformCreateSerializerr   FNc                   @   s   e Zd ZeZdZdS )z!UserPlatformCreateSerializer.Metar   N)r   r   r   r   r   r   r    r    r    r!   r"   E   s   r"   )r   r   r   r   HiddenFieldr   StatusUNAVAILABLEstatus
is_popularr%   r"   r    r    r    r!   r=   @   s   r=   c                   @   sJ   e Zd ZeddZe Zeje	j
jdZG dd dZe	dddZd	S )
ReviewSourceSerializerT	read_onlyr>   c                   @   s   e Zd ZeZdZdS )zReviewSourceSerializer.Metar   Nr   r   r   r   r   r   r    r    r    r!   r"   S   s   r"   r.   c                 C   s   |j jtv S r0   )platformr   r1   r2   r    r    r!   r3   W   s    z/ReviewSourceSerializer.get_able_to_sync_reviewsN)r   r   r   r   rH   r   r9   r:   r;   r   r   r   r   r"   r3   r    r    r    r!   rD   J   s
   
rD   c                   @   s4   e Zd ZejddZejddZejej	j
dZdS )(UserReviewSourcePlatformCreateSerializer2   )
max_lengthT)r   r>   N)r   r   r   r   r;   r   urlr?   r   r@   rA   rB   r    r    r    r!   rI   [   s   rI   c                       s<   e Zd Ze ZG dd dZ fddZ fddZ  ZS ) UserReviewSourceCreateSerializerc                   @   s.   e Zd ZeZdZdddddiddidZdS )	z%UserReviewSourceCreateSerializer.Metar   FT)r   r   r   r   )rL   reviews_countaverage_ratingN)r   r   r   r   r   r   r   r    r    r    r!   r"   d   s   r"   c                    s   |d }|d }|d }t jj|d }|rz|jt jjt jjfv }|sTtddit	jj||d d
 rtddin0t jj|d	
 rtdd
it jjf i |}||d< t |S )NrH   rL   r   )rL   z This platform is not active yet!company)rH   rP   z4The review source for this platform already existed!)r   z#This platform name already existed!)r   r   filterfirstrB   r@   ACTIVEHIDE_REVIEWSr   r   existsr-   r'   )r)   r*   Zplatform_dataZplatform_urlZplatform_namerH   	conditionr+   r    r!   r-   t   s*    
z'UserReviewSourceCreateSerializer.createc                    s    t |trt|jS t |S r0   )
isinstancer   r   datar'   to_representation)r)   r#   r+   r    r!   rY      s    

z2UserReviewSourceCreateSerializer.to_representation)	r   r   r   rI   rH   r"   r-   rY   r<   r    r    r+   r!   rM   a   s   rM   c                   @   sD   e Zd Ze ZejddZe Z	e
 ZG dd dZdd ZdS )ReviewSourceHistorySerializerTrE   c                   @   s   e Zd ZeZdZdS )z"ReviewSourceHistorySerializer.Metar   NrG   r    r    r    r!   r"      s   r"   c                 C   s:   |j }|tjkrtjS |tjkr&tjS |tjkr6tjS |S r0   )history_typer   CREATEDr   CHANGEDDELETED)r)   r/   r[   r    r    r!   get_history_type   s    


z.ReviewSourceHistorySerializer.get_history_typeN)r   r   r   r   ReadOnlyField
history_idDateTimeFieldhistory_dater9   r[   r   rH   r"   r_   r    r    r    r!   rZ      s   rZ   N)rest_frameworkr   rest_framework.exceptionsr   rest_framework.validatorsr   &verify_trusted.companies.history_typesr   r   verify_trusted.reviews.modelsr   r    verify_trusted.utils.serializersr	   r
   r   r1   r   ModelSerializerr=   rD   
SerializerrI   rM   rZ   r    r    r    r!   <module>   s    (

7