
    4i<                        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
mZmZmZ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  ed
dg          Z ed          ZdedefdZdedefdZ  e	e          fdedeeef         fdZ!deeef         deeef         fdZ"e#                    dej$                   ed           e
d           ed           e	e!          fdedede%fd            Z&e'                    d ej(                  d+d"ee%         fd#            Z)e'                    d$ej(                  d%efd&            Z*e+                    d'ej(                   ed!           e
d!           ed!           e	e!          fd%edee         dee         dee%         fd(            Z,e-                    d)ej(                   e	e!          fd%efd*            Z.d!S ),    )datetime)AnyDictOptional)ObjectId)	APIRouterDependsFileFormHTTPException
UploadFilestatus)HTTPAuthorizationCredentials
HTTPBearer)get_col)Category)delete_image_from_cloudinaryextract_public_id_from_urlupload_image_to_cloudinary)
verify_jwtz/categories
categories)prefixtagsF)
auto_errorid_strreturnc                 ~    	 t          |           S # t          $ r!}t          t          j        d          |d }~ww xY w)NzInvalid identifierstatus_codedetail)r   	Exceptionr   r   HTTP_400_BAD_REQUEST)r   excs     4D:\Nbitz\nbitez_python\app\routers\categoryRouter.py_ensure_object_idr%      sS    k k k k(CL`aaagjjks    
<7<valuec                 X    t          | t                    r|                                 S | S N)
isinstancer   	isoformat)r&   s    r$   _serialize_datetimer+      s)    %"" !   L    credentialsc                    | st          t          j        d          t          | j                  \  }}|r|st          t          j        d          |                    d          dk    rt          t          j        d          t          d          }|                    dt          |d	                   i          }|st          t          j        d
          |S )NzNot authenticatedr   zInvalid tokenroleadminzAdmin access requiredadmins_idsubzAdmin not found)
r   r   HTTP_401_UNAUTHORIZEDr   r-   getHTTP_403_FORBIDDENr   find_oner%   )r-   okpayloadr1   r0   s        r$   _require_adminr:   #   s     b(DM`aaaa[455KB ^W ^(D_]]]]{{6g%%(AJabbbbXFOOU$5gen$E$EFGGE `(DM^____Lr,   docc                 >   t          | d                   | d         |                     d          |                     dd          |                     dg           t          |                     d                    t          |                     d                    d	S )
Nr2   category_namecategory_imager   Tproduct_list	createdAt	updatedAt)idr=   r>   r   r?   r@   rA   )strr5   r+   )r;   s    r$   _serialize_categoryrD   2   s    #e*oo_-''"233''(D))33()=)=>>()=)=>>  r,   z/create)r   .Tr=   r>   r   c                 4  K   t          d          }|                    d| i          rt          |j        d          t	          |d          }t          j                    }| ||g ||d}|                    |          }|j        |d<   t          |          S )Nr   r=   zCategory already existsr   folder)r=   r>   r   r?   r@   rA   r2   )
r   r7   r   r"   r   r   utcnow
insert_oneinserted_idrD   )	r=   r>   r   _adminr   	image_urlnowr9   ress	            r$   create_categoryrO   >   s       &&JO];<< g(CLeffff +>,OOOI
/

C&# G 


(
(C_GENw'''r,   z/listNstatus_filterc                 p    t          d          }i }| | |d<   d |                    |          D             S )Nr   r   c                 ,    g | ]}t          |          S  )rD   ).0r;   s     r$   
<listcomp>z#list_categories.<locals>.<listcomp>`   s!    GGG$$GGGr,   )r   find)rP   r   querys      r$   list_categoriesrX   Z   sC    &&JE 'hGG
0F0FGGGGr,   z/single/{category_id}category_idc                     t          d          }t          |           }|                    d|i          }|st          t          j        d          t          |          S )Nr   r2   Category not foundr   )r   r%   r7   r   r   HTTP_404_NOT_FOUNDrD   )rY   r   oidr;   s       r$   get_categoryr^   c   sa    &&J
K
(
(C


ucl
+
+C `(AJ^____s###r,   z/update/{category_id}c                   K   t          d          }t          |           }|                    d|i          }|st          |j        d          i }|7|                    |d|id          }	|	rt          |j        d          ||d<   |||d	<   |K|                    d
          }
|
r t          |
          }|rt          |           t          |d          |d
<   |st          |j        d          t          j                    |d<   |                    d|id|i           |                    d|i          }t          |          S )Nr   r2   r[   r   z$ne)r=   r2   zCategory name already existsr=   r   r>   rF   zNo fields to updaterA   z$set)r   r%   r7   r   r\   r"   r5   r   r   r   r   rH   
update_onerD   )rY   r=   r>   r   rK   r   r]   r;   r9   existingold_image_url	public_idupdated_docs                r$   update_categoryre   m   s      &&J
K
(
(C


ucl
+
+C `(AJ^____ G &&PUWZ|'\'\]] 	pF,GPnoooo#0 "! 011 	82=AAI 8,Y777 %?~Vb$c$c$c ! c(CLabbbb#?,,GK5#,(9:::%%ucl33K{+++r,   z/delete/{category_id}c                 J   t          d          }t          |           }|                    d|i          }|st          t          j        d          |                    d          }|r t          |          }|rt          |           |	                    d|i           ddiS )Nr   r2   r[   r   r>   messagezCategory deleted successfully)
r   r%   r7   r   r   r\   r5   r   r   
delete_one)rY   rK   r   r]   r;   rL   rc   s          r$   delete_categoryri      s    &&J
K
(
(C


ucl
+
+C `(AJ^____ ())I 4.y99	 	4(3335#,'''677r,   r(   )/r   typingr   r   r   bsonr   fastapir   r	   r
   r   r   r   r   fastapi.securityr   r   	app.db.dbr   app.models.categoryr   app.utility.cloudinary_utilsr   r   r   app.utility.securityr   routerauth_schemerC   r%   r+   r:   rD   postHTTP_201_CREATEDboolrO   r5   HTTP_200_OKrX   r^   putre   deleteri   rS   r,   r$   <module>rz      s         & & & & & & & & & &       U U U U U U U U U U U U U U U U U U E E E E E E E E       ( ( ( ( ( (         
 , + + + + + 
-|n	=	=	=jE***kc kh k k k ks s     @Gw{?S?S   < X\]`be]eXf    	T#s(^ 	S#X 	 	 	 	 YF$;<<c!%c4::7>""	( ((( ( ( ( =<(6 G!344H H8D> H H H 54H #1CDD$c $ $ $ ED$ #1CDD $(4::+/4::!T$ZZ7>""', ',',C=', Z(', TN	', ', ', ED',T &F4FGG-4W^-D-D 8 8 8 8 8 HG8 8 8r,   