o
    %Ai;                     @   sT  d dl 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mZ d d	lmZ d d
lmZ d dlmZ d dlT d dlmZ d dlmZ d dlT 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Z$G d d! d!eZ%G d"d# d#eZ&dS )$    N)	timedelta)settings)User)Q)timezonestatus)IsAdminUserAllowAny)Response)APIView)	OTPMaster)*)CustomAPIException)logger)success_responsec                   C   s   t tddS )z-
    Generate a 4-digit OTP as a string.
    i  i'  )strrandomrandint r   r   */var/www/html/premium_crap/admins/views.pygenerate_otp   s   r   c                   @   "   e Zd ZdZeZegZdd ZdS )AdminLoginViewz#
    API view for admin login.
    c              
   C   s  | j |jd|id}|jdd zUtjj|jd d }|rY||jd s4tt	t
jtdt
jd	W S |jsDtt	t
jtdt
jd	W S t||d
j}tt|t
jtdt
jd	W S tt	t
jtdt
jd	W S  ty } ztjddd tt|t
jdd }~ww )NrequestdatacontextTraise_exceptionemailemail__iexactpasswordcodemessager   r   zError in AdminLoginViewexc_infodetailstatus_code)serializer_classr   is_validr   objectsfilterfirstcheck_passwordr   fail_responser   HTTP_409_CONFLICTincorrect_passwordis_superuserHTTP_400_BAD_REQUESTonly_admin_loginAuthenticationSerializerr   HTTP_200_OKlogin_successHTTP_404_NOT_FOUNDincorrect_email	Exceptionr   errorr   r   )selfr   
serializeruserr   er   r   r   post%   s2   zAdminLoginView.postN)	__name__
__module____qualname____doc__AdminLoginSerializerr-   r
   permission_classesrD   r   r   r   r   r      
    r   c                   @   r   )AdminForgotPasswordViewz:
    API view to request password reset and send OTP.
    c              
   C   s   | j |jd}|jdd |jd}zFtjrtjnt }t	 t
dd }tjj|||dd tjj|d	 }|rMtt||d
tjtdtjdW S tttjtdtjdW S  tyu } ztjddd tt|tjdd }~ww )Nr   Tr   r    
   )minutes)otpexpireAt)r    defaultsr!   )r    rP   r   r%   r&   r   r$   z'Error in Admin ResetPasswordRequestViewr(   r*   )r-   r   r.   getr   
IS_TESTINGTESTING_OTPr   r   nowr   r   r/   update_or_creater   r0   r1   r   r   r   r:   reset_password_successr3   r<   r=   r>   r   r?   r   r   r7   )r@   r   rA   r    rP   expire_timerB   rC   r   r   r   rD   C   s,   zAdminForgotPasswordView.postN)	rE   rF   rG   rH   !AdminForgotPasswordViewSerializerr-   r
   rJ   rD   r   r   r   r   rL   <   rK   rL   c                   @   r   ) AdminVerifyForgotPasswordOTPViewzH
    API view for verifying OTP for registration or password reset.
    c              
   C   s   | j |jd| jid}|jdd |jd}|jd}zEtjj|d }|rVt	jj|t
|d }|rI|  ttd tjtd	tjd
W S tttjtdtjd
W S tttjtdtjd
W S  ty~ } ztjddd tt|tjdd }~ww )Nr   r   Tr   r    rP   r!   )r"   rP   rS   r   r$   z"Error in Admin OTPVerificationViewr(   r*   )r-   r   r   r.   rT   r   r/   r0   r1   r   intdeleter   r   r   r:   otp_verifiedr3   r<   invalid_otpr=   r>   r   r?   r   r   r7   )r@   r   rA   r    rP   rB   	check_otprC   r   r   r   rD   b   s2   z%AdminVerifyForgotPasswordOTPView.postN)	rE   rF   rG   rH   &AdminVerifyForgotPasswordOTPSerializerr-   r
   rJ   rD   r   r   r   r   r\   [   rK   r\   c                   @   r   )AdminSetNewPasswordViewz6
    API view to set a new password for the user.
    c              
   C   s   | j |jd|id}|jdd |jd}z3tjj|d }|r=||jd |	  t
ti tjtdtjd	W S t
ttjtd
tjd	W S  tye } ztjddd tt|tjdd }~ww )Nr   r   Tr   r    r!   newPasswordrS   r   r$   z!Error in Admin SetNewPasswordViewr(   r*   )r-   r   r.   rT   r   r/   r0   r1   set_passwordsaver   r   r   r:   password_change_successr3   r<   invalid_userIdr>   r   r?   r   r   r7   )r@   r   rA   r    rB   rC   r   r   r   rD      s&   zAdminSetNewPasswordView.postN)	rE   rF   rG   rH   AdminSetNewPasswordSerializerr-   r
   rJ   rD   r   r   r   r   rc   {   rK   rc   c                   @   r   )AdminLogoutViewz
    API view for logout.
    c              
   C   s   | j |jd}|jdd z|jd }t|}|  tti tjt	dtjdW S  t
yD } ztjddd tt|tjd	d }~ww )
NrM   Tr   refreshrS   r   zError in LogoutViewr(   r*   )r-   r   r.   RefreshToken	blacklistr   r   r   r:   logout_successr>   r   r?   r   r   r7   )r@   r   rA   refresh_tokentokenrC   r   r   r   rD      s   
zAdminLogoutView.postN)	rE   rF   rG   rH   AdminLogoutSerializerr-   r	   rJ   rD   r   r   r   r   rj      rK   rj   c                   @   &   e Zd ZegZeZdd Zdd ZdS )CategoryListCreateViewc           	   
   C   sR  z|j dd }|j dd }|j dd }tj d}| }|rD|t|	 d}| }d}|sDt
td tjtdtjdW S |rp|rpzt|}t|}||||  }W n tyo } z	tt|tjd	d }~ww t|d
|iddj}||d}t
t|tjtdtjdW S  ty } ztjddd tt|tjd	d }~ww )Nlimitoffsetsearchpk)description__iexactr   r$   r   r*   r   Tr   many)totalCategoriesr   zError in Category Getr(   )query_paramsrT   Categoryr/   allorder_bycountr0   r   lowerr   r   r   r:   no_datar]   
ValueErrorr   r   r7   CategoryGetSerializerr   category_listr>   r   r?   )	r@   r   rt   ru   search_query
categoriestotal_categoriesrC   r   r   r   r   rT      sH   zCategoryListCreateView.getc              
   O      | j |jd|id}|jdd z| }t|d|idj}tt|tjt	dtjdW S  t
yG } ztjddd	 tt|tjd
d }~ww )Nr   r   Tr   r'   rS   r   zError in Category Create Viewr(   r*   )r-   r   r.   rf   r   r   r   r   r:   category_creater>   r   r?   r   r   r7   )r@   r   argskwargsrA   categoryr   rC   r   r   r   rD      s   zCategoryListCreateView.postN)	rE   rF   rG   r	   rJ   CategoryCreateSerializerr-   rT   rD   r   r   r   r   rs      s
    %rs   c                   @   s"   e Zd ZegZdd Zdd ZdS )CategoryDetailViewc              
   C      z0t jj|d}t||jdd}|jdd |  t|d|idj}tt	|t
jtdt
jdW S  t jyM } ztjd	dd
 tt|t
jdd }~w tyh } ztjd	dd
 tt|t
jdd }~ww )Nrw   Tr   partialr   r   r'   rS   r   zError in Category Patch View:r(   r*   )r}   r/   rT   CategoryUpdateSerializerr   r.   rf   r   r   r   r   r:   category_updateDoesNotExistr   r?   r   r   r7   r>   )r@   r   rw   r   rA   r   rC   r   r   r   put   *   zCategoryDetailView.putc              
   C   s   zt jj|d}|  ttd tjtdtjdW S  t j	y6 } zt
jddd tt|tjdd }~w tyQ } zt
jddd tt|tjdd }~ww )Nr   rS   r   zError in Category Delete View:Tr(   r*   )r}   r/   rT   r^   r   r   r   r:   category_deleter   r   r?   r   r   r7   r>   )r@   r   rw   r   rC   r   r   r   r^      s    zCategoryDetailView.deleteN)rE   rF   rG   r	   rJ   r   r^   r   r   r   r   r      s    r   c                   @   rr   )CraptitudeListCreateViewc           	   
   C   s  zl|j dd }|j dd }|j dd }tjj|dd}| }|rP|rPzt|}t|}||||  }W n tyO } z	t	t
|tjdd }~ww t|d|idd	j}||d
}tt|tjtdtjdW S  ty } ztjddd t	t
|tjdd }~ww )Nr   rt   ru   )category_idrw   r*   r   Try   )totalCraptitudesr   r$   r   zError in Craptitude Getr(   )r|   rT   
Craptituder/   r0   r   r   r]   r   r   r   r   r7   CraptitudeGetSerializerr   r   r   r:   craptitude_listr>   r   r?   )	r@   r   r   rt   ru   craptitudestotal_craptitudesrC   r   r   r   r   rT     s8   zCraptitudeListCreateView.getc              
   O   r   )Nr   r   Tr   r'   rS   r   zError in Craptitude Create Viewr(   r*   )r-   r   r.   rf   r   r   r   r   r:   craptitude_creater>   r   r?   r   r   r7   )r@   r   r   r   rA   
craptituder   rC   r   r   r   rD   )  s   zCraptitudeListCreateView.postN)	rE   rF   rG   r	   rJ   CraptitudeCreateSerializerr-   rT   rD   r   r   r   r   r     s
    r   c                   @   s   e Zd ZegZdd ZdS )CraptitudeDetailViewc              
   C   r   )Nr   Tr   r   r   r'   rS   r   zError in Craptitude Patch View:r(   r*   )r   r/   rT   CraptitudeUpdateSerializerr   r.   rf   r   r   r   r   r:   craptitude_updater   r   r?   r   r   r7   r>   )r@   r   rw   r   rA   r   rC   r   r   r   r   :  r   zCraptitudeDetailView.putN)rE   rF   rG   r	   rJ   r   r   r   r   r   r   7  s    r   )'r   datetimer   django.confr   django.contrib.auth.modelsr   django.db.modelsr   django.utilsr   rest_frameworkr   rest_framework.permissionsr	   r
   rest_framework.responser   rest_framework.viewsr   admins.modelsr   admins.serializerscore.custom_exceptionr   core.loggerr   core.responser   r   r   rL   r\   rc   rj   rs   r   r   r   r   r   r   r   <module>   s4     9%/