o
    gp                     @   s   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	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 ddlmZmZ G d	d
 d
eZG dd deZG dd deZdS )    )APIView)Responsestatus)timezone   )DevelopmentDevelopmentTranslateCurrencyFeatureBuildingTypePaymentOptionFlatFlatTranslate)CurrencySerializerDevelopmentListSerializerFlatSerializerMasterDevelopmentSerializer)get_current_timestamptimestamp_to_datetimec                   @      e Zd ZdZdd ZdS )SyncStatusViewzN
    API endpoint that returns the latest update timestamp for each model
    c              
   C   s   t jdd tjdd tjdd tjdd tjdd t	jdd t
jdd tjdd d}i }| D ]\}}|rnd|v rn|d  }|||< qYd||< qYt |d< t|S )Nz-updated_at
updated_at)developmentsdevelopment_translates
currenciesfeaturesbuilding_typespayment_optionsflatsflat_translatesr   server_time)r   objectsorder_byvaluesfirstr	   r
   r   r   r   r   r   items	timestampr   r   )selfrequestlatest_updatesresultkeyvaluer'    r.   7/var/www/Entralon-Web-Backend/development/views_sync.pyget   s"   


zSyncStatusView.getN__name__
__module____qualname____doc__r0   r.   r.   r.   r/   r          r   c                   @   r   )SyncDataViewzS
    API endpoint that returns data that has changed since the given timestamp
    c                 C   s  |j dd }|j dd}|stdditjdS ztt|}W n ty3   tdditjd Y S w i }tj	j
|d}| rJt|d	d
j|d< tj	dddj
||d	dd}| rft|d	d
j|d< tj	ddj
||d	d}| rt|d	d
j|d< tj	j
|d	ddj||d}	|	 r|	jdd	d}
tj	j
|
|d}| rd|vrg |d< |d t|d	d
j t |d}t|S )Nsincelanguageenerrorz(Missing 'since' parameter with timestampr   zInvalid timestamp format)updated_at__gtTmanyr   developmentdevelopment__citydevelopment__countryF)r<   language__codedevelopment__is_activedevelopment__is_deletedr   flatflat__development)r<   rB   flat__development__is_activer   )r<   	is_active
is_deleted)translates__updated_at__gttranslates__language__codeid)rE   )development__id__inrB   	sync_timedata)query_paramsr0   r   r   HTTP_400_BAD_REQUESTr   float
ValueErrorr
   r"   filterexistsr   rP   r	   select_relatedr   r   r   r   excludevalues_listextendr   )r(   r)   since_timestampr9   since_datetimeupdated_dataupdated_currenciesupdated_developments_translateupdated_flatsupdated_developmentsdev_idsdev_translatesr+   r.   r.   r/   r0   4   s   
zSyncDataView.getNr1   r.   r.   r.   r/   r7   0   r6   r7   c                   @   r   )FullSyncViewzC
    API endpoint that returns all active data for a full sync
    c                 C   s   |j dd}i }tj }t|ddj|d< tjdddj	|dd	d
}t
|ddj|d< tjddj	|dd}t|ddj|d< t |d}t|S )Nr9   r:   Tr=   r   r?   r@   rA   F)rB   rC   rD   r   rE   rF   )rB   rG   r   rN   )rQ   r0   r
   r"   allr   rP   r	   rW   rU   r   r   r   r   r   )r(   r)   r9   all_dataall_currenciesall_developments_translate	all_flatsr+   r.   r.   r/   r0      s:   
zFullSyncView.getNr1   r.   r.   r.   r/   rd      r6   rd   N)rest_framework.viewsr   rest_framework.responser   rest_frameworkr   django.utilsr   modelsr   r	   r
   r   r   r   r   r   serializersr   r   r   r   change_trackingr   r   r   r7   rd   r.   r.   r.   r/   <module>   s    ( X