o
    6k~i                     @   s   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 ddlmZmZ ddlmZmZ d d	lmZmZ d d
lmZ G dd dejZdS )    )viewsetsstatusfilters)action)Response)IsAuthenticatedOrReadOnlyIsAuthenticated)DjangoFilterBackend   )ReviewReviewHelpful)ReviewSerializerReviewResponseSerializer)IsPlaceAdminIsPlaceOwner)StandardResultsSetPaginationc                   @   s   e Zd ZdZegZeZee	j
e	jgZg dZdgZg dZdgZdd Zdd	 Zd
d ZeddgddddZedddgddddZdS )ReviewViewSetzReview ViewSet)placeratingis_verifiedcomment)r   
created_athelpful_countz-created_atc                 C   s   | j dkrtS tS )Nrespond)r   r   r   )self r   2/var/www/newdalilibackend/backend/reviews/views.pyget_serializer_class   s   
z"ReviewViewSet.get_serializer_classc                 C   s8   t jjdddd}| jjd}|r|j|d}|S )NT)	is_activer   user)place_id)r   objectsfilterselect_relatedrequestquery_paramsget)r   querysetr    r   r   r   get_queryset   s   zReviewViewSet.get_querysetc                 C   s   |j | jjd d S )N)r   )saver$   r   )r   
serializerr   r   r   perform_create'   s   zReviewViewSet.perform_createTpost)detailmethodsNc                 C   s   |   }|j}|jdvr&|jdkst|dr|jj|jkr&tdditjdS t	||j
dd}| r=|  tt|j
S t|jtjdS )	z Place admin responds to a review)super_adminadminplace_adminplace_admin_profileerrorz4You do not have permission to respond to this reviewr   T)datapartial)
get_objectr   rolehasattrr2   r   r   r   HTTP_403_FORBIDDENr   r5   is_validr)   r   errorsHTTP_400_BAD_REQUEST)r   r$   pkreviewr   r*   r   r   r   r   *   s   
zReviewViewSet.responddeletec                 C   s   |   }|jdkr6tjj||jd\}}|r-| jd7  _|jdgd tddit	j
dS tdd	it	jdS |jd
krltjj||jd d }|rctd|jd |_|jdgd tddit	jdS tddit	jdS dS )z-Mark review as helpful or remove helpful votePOST)r?   r   r
   r   )update_fieldsmessagezMarked as helpfulr4   zAlready marked as helpfulDELETEr   zRemoved helpful votez	Not foundN)r7   methodr   r!   get_or_creater   r   r)   r   r   HTTP_201_CREATEDHTTP_200_OKr"   r@   maxHTTP_404_NOT_FOUND)r   r$   r>   r?   helpfulcreateddeletedr   r   r   rK   ?   s&   


zReviewViewSet.helpful)N)__name__
__module____qualname____doc__r   permission_classesr   pagination_classr	   r   SearchFilterOrderingFilterfilter_backendsfilterset_fieldssearch_fieldsordering_fieldsorderingr   r(   r+   r   r   rK   r   r   r   r   r      s     r   N)rest_frameworkr   r   r   rest_framework.decoratorsr   rest_framework.responser   rest_framework.permissionsr   r   django_filters.rest_frameworkr	   modelsr   r   serializersr   r   common.permissionsr   r   common.paginationr   ModelViewSetr   r   r   r   r   <module>   s    