o
    ph'                     @   s   d Z ddlmZ ddlmZmZ ddlmZ ddlT 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ZG dd dejZdS )z{
Base views providing reusable API views for list, create, retrieve, update, and destroy operations with custom responses.
    )timezone)genericsstatus)Response)*c                   @   s$   e Zd ZdZdZdd Zdd ZdS )CustomListAPIViewzf
    A reusable base view for custom list APIs with manual pagination and standardized responses.
    Fc                 C      |   }| |}| sdtdtjtdfS | s%dtdtjtdfS |j	d}|j	d}|dura|durazt
|}t
|}||||  }W |dfS  ty`   dttjtdf Y S w |dfS )zO
        Filter and paginate the queryset based on request parameters.
        Ndatacodemessagelimitoffsetr   r   get_querysetfilter_querysetexistssuccess_responser   HTTP_200_OKZ	blankDataZfilterRecordEmptyquery_paramsgetint
ValueErrorfail_responseHTTP_400_BAD_REQUESTZlimitOffsetselfrequestZbase_querysetZfiltered_querysetr   r    r   )E:\0_Mansi\PremiumCrap\core\base_views.pyget_filtered_paginated_queryset   $   
z1CustomListAPIView.get_filtered_paginated_querysetc                 O   >   |  |\}}|rt|S | j|dd}tt|jtjtdS )?
        List objects with custom response formatting.
        Tmanyr	   N)r!   r   get_serializerr   r
   r   r   
getMessager   r   argskwargsquerysetZearly_response
serializerr   r   r    list*      zCustomListAPIView.listN)__name__
__module____qualname____doc__pagination_enabledr!   r.   r   r   r   r    r   
   s
    r   c                   @   s   e Zd ZdZdZdd ZdS )CustomCreateAPIViewz$
    Base view for create APIs.
    Fc                 O   :   | j |jd}|jdd | | tt|jtjtdS zC
        Create an object with custom response formatting.
        )r
   Traise_exceptionr   N	r'   r
   is_validperform_creater   r   r   r   createdMessager   r   r*   r+   r-   r   r   r    create=      
zCustomCreateAPIView.createN)r0   r1   r2   r3   r4   r?   r   r   r   r    r5   7   s    r5   c                   @   s    e Zd ZdZdd Zdd ZdS )CustomRetrieveDestroyAPIViewzH
    Base view for retrieve and destroy APIs with custom responses.
    c              
   O   f   z|   }| |}tt|jtjtdW S  ty2 } ztt	tj
t|dW  Y d}~S d}~ww zE
        Retrieve an object with custom response formatting.
        r	   r   N
get_objectr'   r   r   r
   r   r   r(   	Exceptionr   HTTP_404_NOT_FOUNDstrr   r   r*   r+   instancer-   er   r   r    retrieveM      

"z%CustomRetrieveDestroyAPIView.retrievec              
   O   d   z|   }| | ttdtjtdW S  ty1 } ztttj	t
|dW  Y d}~S d}~ww zD
        Destroy an object with custom response formatting.
        Nr	   r   rE   perform_destroyr   r   r   HTTP_204_NO_CONTENTZdeletedMessagerF   r   r   rH   r   r   r*   r+   rJ   rK   r   r   r    destroy\      

"z$CustomRetrieveDestroyAPIView.destroyN)r0   r1   r2   r3   rL   rT   r   r   r   r    rA   H   s    rA   c                   @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
CustomListCreateAPIViewzY
    Base view for list and create APIs with manual pagination and custom responses.
    Fc                 C   r   )zG
        Handles filtering and manual offset/limit pagination.
        Nr	   r   r   r   r   r   r   r   r    get_queryset_datar   r"   z)CustomListCreateAPIView.get_queryset_datac                 O   r#   )r$   Tr%   r   N)rW   r   r'   r   r
   r   r   r(   r)   r   r   r    r.      r/   zCustomListCreateAPIView.listc                 O   r6   r7   r:   r>   r   r   r    r?      r@   zCustomListCreateAPIView.createN)r0   r1   r2   r3   r4   rW   r.   r?   r   r   r   r    rV   l   s    rV   c                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	"CustomRetrieveUpdateDestroyAPIViewzQ
    Base view for retrieve, update, and destroy APIs with custom responses.
    c              
   O   rB   rC   rD   rI   r   r   r    rL      rM   z+CustomRetrieveUpdateDestroyAPIView.retrievec              
   O      | dd}z$|  }| j||j|d}|jdd | | tt|jtj	t
dW S  tyG } ztttjt|dW  Y d}~S d}~ww 	zC
        Update an object with custom response formatting.
        partialF)r
   r\   Tr8   r	   r   Nr   rE   r'   r
   r;   perform_updater   r   r   r   ZupdatedMessagerF   r   r   rH   r   r   r*   r+   r\   rJ   r-   rK   r   r   r    update      

"z)CustomRetrieveUpdateDestroyAPIView.updatec              
   O   rN   rO   rP   rS   r   r   r    rT      rU   z*CustomRetrieveUpdateDestroyAPIView.destroyNr0   r1   r2   r3   rL   r`   rT   r   r   r   r    rY      
    rY   c                   @   rX   )	&CustomRetrieveUpdateSoftDestroyAPIViewzV
    Base view for retrieve, update, and soft destroy APIs with custom responses.
    c              
   O   rB   rC   rD   rI   r   r   r    rL      rM   z/CustomRetrieveUpdateSoftDestroyAPIView.retrievec              
   O   rZ   r[   r]   r_   r   r   r    r`      ra   z-CustomRetrieveUpdateSoftDestroyAPIView.updatec              
   O   sr   z|   }t |_|jdgd ttdtjt	dW S  t
y8 } ztttjt|dW  Y d}~S d}~ww )z[
        Soft destroy (mark as deleted) an object with custom response formatting.
        	deletedOn)update_fieldsNr	   r   )rE   r   nowre   saver   r   r   rR   ZsoftDeletedMessagerF   r   r   rH   rS   r   r   r    rT      s   

"z.CustomRetrieveUpdateSoftDestroyAPIView.destroyNrb   r   r   r   r    rd      rc   rd   N)r3   django.utilsr   rest_frameworkr   r   rest_framework.responser   Zcore.responseZListAPIViewr   ZCreateAPIViewr5   ZRetrieveDestroyAPIViewrA   ZListCreateAPIViewrV   ZRetrieveUpdateDestroyAPIViewrY   rd   r   r   r   r    <module>   s    -$86