o
    [hQ                     @   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 d dlmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lZd d
lZd d
lZd d
l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" d dl#m$Z$ d dl%m&Z& d dl'm(Z( dd Z)G dd deZ*G dd deZ+G dd deZ,G dd deZ-G dd deZ.G dd  d eZ/G d!d" d"eZ0G d#d$ d$eZ1G d%d& d&eZ2G d'd( d(eZ3G d)d* d*eZ4G d+d, d,eZ5G d-d. d.eZ6G d/d0 d0eZ7G d1d2 d2eZ8G d3d4 d4eZ9G d5d6 d6eZ:d
S )7    )APIView)Responsestatus)get_object_or_404)Gift
AppSettingFemaleReward)Plan)GiftSerializerAppSettingSerializerFemaleRewardSerializer)PlanSerializer)IsActiveAdminN)BytesIO)settings)MultiPartParser
FormParser)uuid4)IsAuthenticated)swagger_auto_schema)openapi)Qc                 C   s6   t  }|D ]}|t di | d|iO }q| |S )N__icontains )r   filter)querysetsearch_termfieldsqfieldr   r   T/var/www/vedio/testing/chatpythonscript.ninositsolution.com/master/views/settings.pyapply_search   s   
r"   c                   @   sh   e Zd ZeegZegZede	j
de	jde	jdgdeddidd	d
 Zedde iddd ZdS )GiftViewz*Get all gifts with optional search by namesearchzSearch gifts by namedescriptiontype   Tmanyoperation_descriptionmanual_parameters	responsesc                 C   sP   t j d}|jd}|rt||dg}t|dd}td|j	dt
jdS )	N-created_atr$   nameTr)   successr   datar   )r   objectsallorder_byquery_paramsgetr"   r   r   r3   r   HTTP_200_OK)selfrequestgiftsr$   
serializerr   r   r!   r8   $   s   zGiftView.getzAdd a new gift with icon upload   r,   r.   c              
   C   sJ  |j d}|stdditjdS zEt| }|d t	
|j\}}|p)d}tjddd	d
dd}dt  d|jdd  }|j|d|d|dd d| }W n  tyv }	 ztddt|	 itjdW  Y d }	~	S d }	~	ww |j }
||
d< t|
d}| r|  tdd|jdtjdS tdd|jdtjdS )NiconerrorzIcon file is required.r   r   application/octet-streams3sgp1#https://sgp1.digitaloceanspaces.comNMQAUQUGQAQ4ZE4QNKFN+IbTaeOcuA8Xb9WFclN1vow53a3D6yjyxbwn1Yzvw5ncregion_nameendpoint_urlaws_access_key_idaws_secret_access_keychatapp/gifts/.foodieninospublic-readACLContentType	ExtraArgs4https://foodieninos.sgp1.cdn.digitaloceanspaces.com/Icon upload failed: r3   r1   zGift uploaded successfullyr   messager3   zInvalid gift datar   r[   errors)FILESr8   r   r   HTTP_400_BAD_REQUESTior   readseek	mimetypes
guess_typer0   boto3clientuuidr   splitupload_fileobj	ExceptionstrHTTP_500_INTERNAL_SERVER_ERRORr3   copyr   is_validsaveHTTP_201_CREATEDr]   )r:   r;   	icon_file	icon_copycontent_type_rC   filenameicon_urler3   r=   r   r   r!   post=   s\   
 (

zGiftView.postN)__name__
__module____qualname__r   r   permission_classesr   parser_classesr   r   	ParameterIN_QUERYTYPE_STRINGr   r8   rx   r   r   r   r!   r#       s(    
r#   c                   @   sJ   e Zd ZeegZegZede	j
de	jde	jdgde iddd Zd	S )
GiftEditViewzEdit a gift by IDidGift IDr%   r(   r+   c              
   C   sx  z	t jj|d}W n t jy   tdddtjd Y S w |jd}|j	 }|rzIt
| }|d t|j\}}|pCd}tjd	d
dddd}	dt  d|jdd  }
|	j|d|
d|dd d|
 }||d< W n  ty } ztddt| itjdW  Y d }~S d }~ww t||dd}| r|  tdd|jdtjdS tdd|jdtjdS )NpkrA   Gift not found.r   r[   r   r@   r   rB   rC   rD   rE   rF   rG   rH   rM   rN   rO   rP   rQ   rR   rU   rW   rX   Tr3   partialr1   zGift updated successfullyrZ   Invalid datar\   ) r   r4   r8   DoesNotExistr   r   HTTP_404_NOT_FOUNDr^   r3   rm   r`   r   ra   rb   rc   rd   r0   re   rf   rg   r   rh   ri   rj   rk   rl   r   rn   ro   r9   r]   r_   )r:   r;   r   giftrq   update_datarr   rs   rt   rC   ru   rv   rw   r=   r   r   r!   rx   z   sd   

 
(zGiftEditView.postN)ry   rz   r{   r   r   r|   r   r}   r   r   r~   IN_PATHTYPE_INTEGERr   rx   r   r   r   r!   r   v   s    r   c                   @   sT   e Zd ZeegZedejdej	dej
dgejddejdddd	d
d ZdS )GiftDeleteViewz Delete a gift by ID (using POST)r   r   r%   zGift deleted successfully)r&   zGift not foundr(     r+   c                 C   s^   zt jj|d}|  tdddtjdW S  t jy.   tdd| ddtjd Y S w )	Nr   r1   zGift deleted successfully.r   r   rA   zGift with ID z not found.)	r   r4   r8   deleter   r   r9   r   r   )r:   r;   r   r   r   r   r!   rx      s"   

zGiftDeleteView.postN)ry   rz   r{   r   r   r|   r   r   r~   r   r   r   rx   r   r   r   r!   r      s    


r   c                   @   s0   e Zd ZegZeddeddiddd ZdS )	GiftActiveUserListViewz"Get all active gifts (status=True)r(   Tr)   r?   c                 C   s6   t jjddd}t|dd}td|jdtjdS )NTr   r/   r)   r1   r2   )	r   r4   r   r6   r   r   r3   r   r9   )r:   r;   active_giftsr=   r   r   r!   r8      s   zGiftActiveUserListView.getN)ry   rz   r{   r   r|   r   r   r8   r   r   r   r!   r      s    r   c                
   @   sT   e Zd ZeegZedejej	dgdejej
ddiddedidd	d
 ZdS )GiftStatusUpdateViewz-Update the status of a gift (active/inactive)r   New status (true or false)r'   r&   r'   required
propertiesr(   Status updated successfullyr,   request_bodyr.   c                 C   s   z	t jj|d}W n t jy   tdddtjd Y S w |jd}|d u r2tdddtjdS ||_|	  tdd	t
|jd
tjdS )Nr   rA   r   r   r   r   z'status' field is required.r1   z!Gift status updated successfully.rZ   )r   r4   r8   r   r   r   r   r3   r_   ro   r   r9   )r:   r;   r   r   
new_statusr   r   r!   rx      s"   zGiftStatusUpdateView.postN)ry   rz   r{   r   r   r|   r   r   SchemaTYPE_OBJECTTYPE_BOOLEANr   rx   r   r   r   r!   r      s    r   c                	   @   sZ   e Zd ZegZedejdejdej	dejdejdej	dgde
dd	id
dd ZdS )UserAppSettingView0Get all app settings or filter by code or searchcodeFilter by exact coder%   r$   Search in name or coder(   Tr)   r+   c                 C   l   |j d}|j d}tj d}|r|j|d}|r%t||dg}t|dd}t	d|j
d	tjd
S Nr   r$   r/   )r   r0   Tr)   r1   r2   r   r7   r8   r   r4   r5   r6   r   r"   r   r   r3   r   r9   r:   r;   r   r$   r   r=   r   r   r!   r8        zUserAppSettingView.getN)ry   rz   r{   r   r|   r   r   r~   r   r   r   r8   r   r   r   r!   r     s    r   c                	   @   sx   e Zd ZeegZedejdej	dej
dejdej	dej
dgdedd	id
dd Zedede iddd ZdS )AppSettingViewr   r   r   r%   r$   r   r(   Tr)   r+   c                 C   r   r   r   r   r   r   r!   r8   -  r   zAppSettingView.getzCreate a new app settingr>   r   c                 C   sJ   t |jd}| r|  tdd|jdtjdS td|jdtjdS )NrY   r1   z App setting created successfullyrZ   r   rA   )r   r]   )	r   r3   rn   ro   r   r   rp   r]   r_   r:   r;   r=   r   r   r!   rx   L  s    zAppSettingView.postN)ry   rz   r{   r   r   r|   r   r   r~   r   r   r   r8   rx   r   r   r   r!   r   *  s(    
r   c                   @   s0   e Zd ZeegZedede iddd ZdS )AppSettingEditViewz,Edit app setting by ID (POST instead of PUT)r(   r   c                 C   s   z	t jj|d}W n t jy   tdditjd Y S w t||jdd}|	 r9|
  tdd|jd	tjdS t|jtjdS )
Nr   rA   zAppSetting not foundr   Tr   r1   z App setting updated successfullyrZ   )r   r4   r8   r   r   r   r   r   r3   rn   ro   r9   r]   r_   )r:   r;   r   settingr=   r   r   r!   rx   d  s    zAppSettingEditView.postN)	ry   rz   r{   r   r   r|   r   r   rx   r   r   r   r!   r   a  s    r   c                   @   sH   e Zd ZeegZedejdej	dej
dgdeddidd	d
 ZdS )PlanListViewz.Retrieve all plans with optional search filterr$   zSearch by coins, amountr%   r(   Tr)   r+   c                 C   sR   t j }|jd}|rddg}t|||}t|dd}tdd|jdt	j
d	S )
Nr$   coinsamountTr)   r1   zPlans retrieved successfullyrZ   r   )r
   r4   r5   r7   r8   r"   r   r   r3   r   r9   )r:   r;   plansr   search_fieldsr=   r   r   r!   r8     s   
zPlanListView.getN)ry   rz   r{   r   r   r|   r   r   r~   r   r   r   r8   r   r   r   r!   r   |  s    r   c                   @   s0   e Zd ZeegZeeedddddd ZdS )PlanCreateViewInvalid input)r>     zCreate a new planr   r.   r,   c                 C   L   t |jd}| r|  tdd|jdtjdS tdd|jdtjdS )	NrY   r1   zPlan created successfullyrZ   r   rA   r   r\   )	r   r3   rn   ro   r   r   rp   r]   r_   r   r   r   r!   rx     s
   zPlanCreateView.postN	ry   rz   r{   r   r   r|   r   r   rx   r   r   r   r!   r     s    r   c                   @   s2   e Zd ZeegZeeeddddddd ZdS )	PlanUpdateViewr   Plan not foundr(   r   r   zUpdate an existing plan by IDr   c                 C   \   t t|d}t||jdd}| r"|  tdd|jdtjdS tdd	|j	d
tj
dS )Nr   Tr   r1   zPlan updated successfullyrZ   r   rA   r   r\   )r   r
   r   r3   rn   ro   r   r   r9   r]   r_   )r:   r;   r   planr=   r   r   r!   rx        zPlanUpdateView.postNr   r   r   r   r!   r     s    
r   c                   @   s.   e Zd ZeegZeddddddd ZdS )	PlanDeleteViewzPlan deleted successfullyr   r   zDelete a plan by ID)r.   r,   c                 C   sV   zt jj|d}|  tdddtjdW S  t jy*   tdddtjd Y S w )Nr   r1   zPlan deleted successfully.r   r   rA   Plan not found.)	r
   r4   r8   r   r   r   r9   r   r   )r:   r;   r   r   r   r   r!   rx     s   zPlanDeleteView.postN)ry   rz   r{   r   r   r|   r   rx   r   r   r   r!   r     s    r   c                	   @   sR   e Zd ZeegZeejej	dgdejej
ddidddddd	d
dd ZdS )PlanStatusUpdateViewr   zNew status (true/false)r   r   r   zStatus field is requiredr   r   zUpdate the status of a planr   c                 C   s   z	t jj|d}W n t jy   tdddtjd Y S w |jd}|d u r2tdddtjdS t	||_|
  tdd	|jd
tjdS )Nr   rA   r   r   r   r   Status field is required.r1   r   r   r[   status_value)r
   r4   r8   r   r   r   r   r3   r_   boolro   r9   )r:   r;   r   r   r   r   r   r!   rx     s   
zPlanStatusUpdateView.postNry   rz   r{   r   r   r|   r   r   r   r   r   rx   r   r   r   r!   r     s    
r   c                   @   s2   e Zd ZeegZeddeddiddd ZdS )	FemaleRewardListViewz3Retrieve all female rewards with formatted durationr(   Tr)   r?   c                 C   s,   t j }t|dd}td|jdtjdS )NTr)   r1   r2   r   )r	   r4   r5   r   r   r3   r   r9   )r:   r;   rewardsr=   r   r   r!   r8     s   
zFemaleRewardListView.getN)	ry   rz   r{   r   r   r|   r   r   r8   r   r   r   r!   r     s    r   c                   @   s.   e Zd ZeegZeedeidddd ZdS )FemaleRewardCreateViewr>   zCreate a new FemaleRewardr   c                 C   r   )	NrY   r1   z!FemaleReward created successfullyrZ   r   rA   r   )r   r[   rA   )	r   r3   rn   ro   r   r   rp   r]   r_   r   r   r   r!   rx     s"   zFemaleRewardCreateView.postN	ry   rz   r{   r   r   r|   r   r   rx   r   r   r   r!   r     s    r   c                   @   s2   e Zd ZeegZeededddddd ZdS )	FemaleRewardEditViewzUpdate a female rewardr   	Not foundr   r   r,   r.   c                 C   r   )Nr   Tr   r1   zReward updatedrZ   r   rA   r   r\   )r   r	   r   r3   rn   ro   r   r   r9   r]   r_   )r:   r;   r   rewardr=   r   r   r!   rx     r   zFemaleRewardEditView.postNr   r   r   r   r!   r     s    
r   c                	   @   sR   e Zd ZeegZeejej	dgdejej
ddidddddd	d
dd ZdS )FemaleRewardStatusUpdateViewr   r   r   r   z$Update the status of a female rewardzStatus updatedzBad requestr   r   r   c                 C   s^   t t|d}|jd}|d u rtdddtjdS t||_|  tdd|jd	tj	dS )
Nr   r   rA   r   r   r   r1   r   r   )
r   r	   r3   r8   r   r   r_   r   ro   r9   )r:   r;   r   r   r   r   r   r!   rx     s   
z!FemaleRewardStatusUpdateView.postNr   r   r   r   r!   r     s    
r   );rest_framework.viewsr   rest_framework.responser   rest_frameworkr   django.shortcutsr   master.modelsr   r   r	   user.modelsr
   master.serializersr   r   r   user.serializersr   master.authenticationr   re   rg   rc   r`   r   django.confr   rest_framework.parsersr   r   r   rest_framework.permissionsr   drf_yasg.utilsr   drf_yasgr   django.db.modelsr   r"   r#   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   <module>   sH     VB$"7