o
    l~i7                     @   s  d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZmZ d dlmZmZ d dlmZ e d	d
ZG dd deZG dd deZG dd deeZG dd dejZG dd dZG dd dZG dd deeZG dd deeeZG dd deeZdS )    N)Q)permissionsstatus)CreateModelMixin)Response)ModelSerializer
SerializerValidationError)GenericViewSetModelViewSet)FCM_DJANGO_SETTINGS
fcm_django	fcmdevicec                   @   s   e Zd ZG dd dZdS )DeviceSerializerMixinc                   @   s    e Zd ZdZdZdddiiZdS )zDeviceSerializerMixin.Meta)idnameregistration_id	device_idactivedate_createdtype)r   r   defaultTN)__name__
__module____qualname__fieldsread_only_fieldsextra_kwargs r   r   d/var/www/newdalilibackend/backend/venv/lib/python3.10/site-packages/fcm_django/api/rest_framework.pyMeta   s    	r    N)r   r   r   r    r   r   r   r   r      s    r   c                   @      e Zd Zdd ZdS )!UniqueRegistrationSerializerMixinc                 C   sp  d }d }d }| j dd r| jrd}| jj}nd}n| jd jdv r)d}| jj}n
| jd jdkr3d}| jj}| jd j}|d}|dkr|r|d urt|j	rt|j
j|dj|d}|d	d
rm|t|d jd
d |j|d}n:|j
j|dj|d}n.|dkr|d ur|j	r|j
j|d}|t|d jd
d |j|dd}n|j
j|d}|rtddi|S )Nr   updatecreaterequest)PUTPATCHPOSTr   )r   r   Fuserr   T)r+   r   zThis field must be unique.)initial_datagetinstancer   contextmethodr    modelr+   is_authenticatedobjectsfilterexcluder   r#   r	   )selfattrsdevicesprimary_keyrequest_methodDevicer+   r   r   r   r   validate    sT   


z*UniqueRegistrationSerializerMixin.validateN)r   r   r   r=   r   r   r   r   r"          r"   c                   @   s   e Zd ZG dd dejZdS )FCMDeviceSerializerc                   @   s,   e Zd ZeZddddiZeejj dS )zFCMDeviceSerializer.Metar   TF)	read_onlyrequiredN)	r   r   r   	FCMDevicer2   r   r#   r   r    r   r   r   r   r    S   s    r    N)r   r   r   r   r    r   r   r   r   r?   R   s    r?   c                   @   r!   )IsOwnerc                 C   s   |j |j kS )Nr*   )r7   r%   viewobjr   r   r   has_object_permission\   s   zIsOwner.has_object_permissionN)r   r   r   rF   r   r   r   r   rC   [   r>   rC   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	DeviceViewSetMixinr   c                 O   s   d }d}t dr(d|jv r(| jjjj|jd d }|r(| j||jd}d}|s1| j|jd}|j	dd |rC| 
| t|jS | | | |j}t|jtj|dS )	NFUPDATE_ON_DUPLICATE_REG_IDr   r)   )dataT)raise_exception)r   headers)SETTINGSr.   rI   querysetr2   r4   r5   firstget_serializeris_validperform_updater   perform_createget_success_headersr   HTTP_201_CREATED)r7   r%   argskwargs
serializer	is_updater/   rK   r   r   r   r$   e   s0   





zDeviceViewSetMixin.createc                 C   sT   | j jjr&td r| j jddrtjj| j jdj	dd |j
| j jdS |
 S )NONE_DEVICE_PER_USERr   Tr*   Fr,   r%   r+   r3   rL   rI   r.   rB   r4   r5   r#   saver7   rW   r   r   r   rR      s   
z!DeviceViewSetMixin.perform_createc                 C   sT   | j jjr&td r| j jddrtjj| j jdj	dd |j
| j jdS |
 S )NrY   r   Fr*   r,   rZ   r\   r   r   r   rQ      s   
z!DeviceViewSetMixin.perform_updateN)r   r   r   lookup_fieldr$   rR   rQ   r   r   r   r   rG   b   s
    	rG   c                   @   s   e Zd ZejefZdd ZdS )AuthorizedMixinc                 C   s   | j j| jjdS )Nr*   )rM   r5   r%   r+   )r7   r   r   r   get_queryset   s   zAuthorizedMixin.get_querysetN)r   r   r   r   IsAuthenticatedrC   permission_classesr_   r   r   r   r   r^      s    
r^   c                   @   s   e Zd ZejdZeZdS )FCMDeviceViewSetz-idN)	r   r   r   rB   r4   order_byrM   r?   serializer_classr   r   r   r   rb      s    rb   c                   @   s   e Zd Zej ZeZdS )FCMDeviceCreateOnlyViewSetN)	r   r   r   rB   r4   allrM   r?   rd   r   r   r   r   re      s    
re   c                   @   s   e Zd ZdS )FCMDeviceAuthorizedViewSetN)r   r   r   r   r   r   r   rg      s    rg   ) swapperdjango.db.modelsr   rest_frameworkr   r   rest_framework.mixinsr   rest_framework.responser   rest_framework.serializersr   r   r	   rest_framework.viewsetsr
   r   fcm_django.settingsr   rL   
load_modelrB   r   r"   r?   BasePermissionrC   rG   r^   rb   re   rg   r   r   r   r   <module>   s$    3	2	