o
    Ŏg[%                     @   s  d dl mZmZmZmZ d dlmZmZmZ ddl	m
Z
mZmZmZmZmZmZmZmZ ddlmZmZmZmZmZmZmZmZmZ d dlmZ d dlm Z  d dl!m"Z" d d	l#m$Z$ d d
l%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 ddlm3Z3 d dl4m5Z5 ddlm6Z6 G dd de5Z7G dd dej8Z9G dd dej:Z;G dd dej:Z<G dd dej:Z=G dd dej:Z>G d d! d!ej?Z@G d"d# d#ej?ZAG d$d% d%ejBZCG d&d' d'ej:ZDG d(d) d)e0ZEG d*d+ d+e0ZFd,S )-    )viewsetsgenericsstatusfilters)IsAuthenticatedAllowAnyIsAuthenticatedOrReadOnly   )	CityCategoryPlaceAdvertisementBooking	ContactUsUserFavoritePlaceEmergencyNumber)	CitySerializerCategorySerializerPlaceSerializerAdSerializerBookingSerializerContactUsSerializerUserSerializerFavoritePlaceSerializerEmergencyNumberSerializer)timezone)Response)action)validate_password)ValidationError)DjangoFilterBackend)Q)ObtainAuthToken)Token)APIView)get_object_or_404)FavoritePlaceSerializerCreate)TokenCreateView)CustomTokenCreateSerializerc                   @   s   e Zd ZeZdS )CustomTokenCreateViewN)__name__
__module____qualname__r)   serializer_class r/   r/   2/var/www/newdalilibackend/backend/mainapp/views.pyr*      s    r*   c                   @   s   e Zd ZegZdd Zeddgddd Zeddgdd	d
 Zeddgddd Z	eddgddd Z
eddgddd ZdS )UserViewSetc                 C   s   | j jS N)requestuserselfr/   r/   r0   
get_object   s   zUserViewSet.get_objectFget)detailmethodsc                 C   s   |   }t|}t|jS r2   )r7   r   r   datar6   r3   r4   
serializerr/   r/   r0   me"   s   
zUserViewSet.mepatchc                 C   sB   |   }t||jdd}| r|  t|jS t|jtjdS )NT)r;   partialr   )	r7   r   r;   is_validsaver   errorsr   HTTP_400_BAD_REQUESTr<   r/   r/   r0   
patch_info(   s   
zUserViewSet.patch_infopostc                 C   sN   |   }|jd}|ttjvrtdditjdS ||_	|
  tddiS )Npreferred_languageerrorzInvalid language choice.rA   messagezLanguage updated successfully.)r7   r;   r8   dictr   LANGUAGE_CHOICESr   r   rE   rH   rC   )r6   r3   r4   languager/   r/   r0   change_language1   s   zUserViewSet.change_languagec                 C   sh   |   }|jd}z	tjj|d}W n tjy&   tdditjd Y S w ||_	|
  tddiS )Ncity)idrI   zCity not found.rA   rJ   zCity updated successfully.)r7   r;   r8   r
   objectsDoesNotExistr   r   HTTP_404_NOT_FOUNDrO   rC   )r6   r3   r4   city_idrO   r/   r/   r0   change_city;   s   zUserViewSet.change_cityc              
   C   s   |   }|jd}|jd}||stdditjdS zt|| W n tyA } ztd|j	itjdW  Y d }~S d }~ww |
| |  tddiS )Nold_passwordnew_passwordrI   zOld password is incorrect.rA   rJ   zPassword updated successfully.)r7   r;   r8   check_passwordr   r   rE   r   r    messagesset_passwordrC   )r6   r3   r4   rV   rW   er/   r/   r0   change_passwordG   s   
 
zUserViewSet.change_passwordN)r+   r,   r-   r   permission_classesr7   r   r>   rF   rN   rU   r\   r/   r/   r/   r0   r1      s    


	
r1   c                   @   (   e Zd Zej ZeZe	gZ
dd ZdS )	AdViewSetc                 C   s$   | j j}|j}tjj|dt dS )NT)cities	is_activeexpiry_date__gte)r3   r4   rO   r   rQ   filterr   nowr6   r4   	user_cityr/   r/   r0   get_queryset`   s   zAdViewSet.get_querysetN)r+   r,   r-   r   rQ   allquerysetr   r.   r   r]   rg   r/   r/   r/   r0   r_   [   
    
r_   c                   @       e Zd Zej ZeZe	gZ
dS )CityViewSetN)r+   r,   r-   r
   rQ   rh   ri   r   r.   r   r]   r/   r/   r/   r0   rl   f       

rl   c                   @   sB   e Zd Zej ZeZe	gZ
dd Zeddge	gddd ZdS )	CategoryViewSetc                 C   s    | j j}|j}tjj|d S )N)place__city)r3   r4   rO   r   rQ   rc   distinctre   r/   r/   r0   rg   q   s   zCategoryViewSet.get_querysetFr8   r9   r:   r]   c                 C   sj   | j j}|j}tjj|g dd }| |}|d ur)| j|dd}| 	|j
S | j|dd}t|j
S )N)
restaurantcaffehotelhospital)ro   name_en__inTmany)r3   r4   rO   r   rQ   rc   rp   paginate_querysetget_serializerget_paginated_responser;   r   r6   r3   r4   rf   filtered_querysetpager=   r/   r/   r0   filteredv   s   

zCategoryViewSet.filteredN)r+   r,   r-   r   rQ   rh   ri   r   r.   r   r]   rg   r   r   r/   r/   r/   r0   rn   l   s    
rn   c                   @   sZ   e Zd Zej ZeZe	gZ
eejgZdgZg dZdd Zeddgegddd	 Zd
S )PlaceViewSetcategory)name_arname_enname_kuc                 C   s,   | j j}|jr|j}nd}tjj|d}|S )Nr	   )rO   )r3   r4   is_authenticatedrO   r   rQ   rc   )r6   r4   rf   ri   r/   r/   r0   rg      s   zPlaceViewSet.get_querysetFr8   rq   c                 C   sr   | j j}|jr|j}nd}tjj|dd }| |}|d ur-| j	|dd}| 
|jS | j	|dd}t|jS )Nr	   g@)rO   rating__gteTrw   )r3   r4   r   rO   r   rQ   rc   rp   ry   rz   r{   r;   r   r|   r/   r/   r0   	bestplace   s   

zPlaceViewSet.bestplaceN)r+   r,   r-   r   rQ   rh   ri   r   r.   r   r]   r!   r   SearchFilterfilter_backendsfilterset_fieldssearch_fieldsrg   r   r   r   r/   r/   r/   r0   r      s    

	r   c                   @   r^   )BookingCreateViewc                 C   s   |j | jjd d S N)r4   )rC   r3   r4   )r6   r=   r/   r/   r0   perform_create   s   z BookingCreateView.perform_createN)r+   r,   r-   r   rQ   rh   ri   r   r.   r   r]   r   r/   r/   r/   r0   r      rj   r   c                   @   rk   )ContactUsCreateViewN)r+   r,   r-   r   rQ   rh   ri   r   r.   r   r]   r/   r/   r/   r0   r      rm   r   c                   @   s   e Zd ZeZegZdd ZdS )FavoritePlaceListViewc                 C   s   t jj| jjdS r   )r   rQ   rc   r3   r4   r5   r/   r/   r0   rg      s   z"FavoritePlaceListView.get_querysetN)r+   r,   r-   r   r.   r   r]   rg   r/   r/   r/   r0   r      s    r   c                   @   rk   )EmergencyNumberViewSetN)r+   r,   r-   r   rQ   rh   ri   r   r.   r   r]   r/   r/   r/   r0   r      rm   r   c                   @      e Zd ZegZdd ZdS )CreateFavoritePlaceViewc                 O   s~   |j }t|jd}| r7|jd}tjj||d	 r&t
dditjdS tjj||d t
dditjdS t
|jtjdS )	N)r;   place)r4   r   rI   z'This place is already in your favoritesrA   successzPlace added to favorites)r4   r'   r;   rB   validated_datar8   r   rQ   rc   existsr   r   rE   createHTTP_201_CREATEDrD   )r6   r3   argskwargsr4   r=   r   r/   r/   r0   rG      s   zCreateFavoritePlaceView.postN)r+   r,   r-   r   r]   rG   r/   r/   r/   r0   r          r   c                   @   r   )FavoritePlaceDeleteViewc                 O   sX   |j }|jd}|stdditjdS tt||d}|  tdd| ditj	dS )NrP   r9   z)Place ID is required in query parameters.rA   )r4   	place__idzFavorite place with ID z successfully deleted.)
r4   query_paramsr8   r   r   rE   r&   r   deleteHTTP_200_OK)r6   r3   r   r   r4   place_idfavorite_placer/   r/   r0   r      s   zFavoritePlaceDeleteView.deleteN)r+   r,   r-   r   r]   r   r/   r/   r/   r0   r      r   r   N)Grest_frameworkr   r   r   r   rest_framework.permissionsr   r   r   modelsr
   r   r   r   r   r   r   r   r   serializersr   r   r   r   r   r   r   r   r   django.utilsr   rest_framework.responser   rest_framework.decoratorsr   'django.contrib.auth.password_validationr   rest_framework.validatorsr    django_filters.rest_frameworkr!   django.db.modelsr"   rest_framework.authtoken.viewsr#   rest_framework.authtoken.modelsr$   rest_framework.viewsr%   django.shortcutsr&   r'   djoser.viewsr(   r)   r*   ViewSetr1   ReadOnlyModelViewSetr_   rl   rn   r   CreateAPIViewr   r   ListAPIViewr   r   r   r   r/   r/   r/   r0   <module>   s<    ,,?2		