
    i                        d dl m Z  d dlmZ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mZmZ d dlmZ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   e	d
dg          Z! ed          Z"de#defdZ$ e
e"          fdedee#ef         fdZ%dedefdZ&dee#ef         dee#ef         fdZ'e!(                    dej)                   eddd           eddd           ed           eddd           ed dd           ed dd           ed            ed dd           e
e%          f	d!e#d"e#d#ee         d$e#d%ee#         d&ee#         d'eee#                  d(ee#         fd)            Z*e!+                    d*ej,                  d+             Z-e!+                    d,ej,                  d$e#fd-            Z.e!/                    d.ej,                   ed dd           ed dd           ed            ed dd           ed dd           ed dd           ed            ed dd           e
e%          f	d/e#d!ee#         d"ee#         d#eee                  d$ee#         d%ee#         d&ee#         d'eee#                  d(ee#         fd0            Z0e!1                    d1ej,                   e
e%          fd/e#fd2            Z2d S )3    )datetime)AnyDictOptionalList)ObjectId)		APIRouterDependsFileFormHTTPExceptionPathQuery
UploadFilestatus)HTTPAuthorizationCredentials
HTTPBearer)	BaseModelField	validator)get_col)delete_image_from_cloudinaryextract_public_id_from_urlupload_image_to_cloudinary)
verify_jwtz/blogsblogs)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     "D:\Nbitz\app\routers\blogRouter.py_ensure_object_idr*      sS    k k k k(CL`aaagjjks    
<7<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payloadr/   r.   s        r)   _require_adminr8      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^____L    valuec                 X    t          | t                    r|                                 S | S )N)
isinstancer   	isoformat)r:   s    r)   _serialize_datetimer>   +   s)    %"" !   Lr9   docc                    t          | d                   |                     d          |                     d          |                     dg           |                     d          |                     d          |                     d          |                     d          |                     d	          t          |                     d
                    t          |                     d                    dS )zRConvert MongoDB document to JSON-serializable dict, converting ObjectId to string.r0   titlecontentimageblog_urlblog_meta_titleblog_meta_descriptionblog_meta_keywordsblog_schema_markup	createdAt	updatedAt)idrA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   )strr3   r>   )r?   s    r)   _serialize_blogrM   0   s     #e*oo!!779%%"%%GGJ''77#455!$)@!A!A!gg&:;;!gg&:;;()=)=>>()=)=>>  r9   z/create/blogs)r$   .   d   )
min_length
max_length
   i  NrA   rB   imagesrD   rE   rF   rG   rH   c	                 P   t          d          }	g }
|D ]$}|
                    t          |                     %| ||
|||||t          j                    t          j                    d
}|	                    |          }|	                    d|j        i          }t          |          S )Nr   )
rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   r0   )	r   appendr   r   utcnow
insert_oner5   inserted_idrM   )rA   rB   rS   rD   rE   rF   rG   rH   _adminr   
image_urlsrC   	blog_dataresultinserted_docs                  r)   create_blogr^   @   s     GEJ = =4U;;<<<< *!600_&&_&& I i((F>>5&*<"=>>L<(((r9   z
/all/blogsc                  z    t          d          } t          |                                           }d |D             S )Nr   c                 ,    g | ]}t          |          S  )rM   ).0r?   s     r)   
<listcomp>zget_blogs.<locals>.<listcomp>h   s     111SOC  111r9   )r   listfind)r   docss     r)   	get_blogsrg   d   s8    GE

D11D1111r9   z/blog/{blog_url}c                     t          d          }|                    d| i          }|st          t          j        d          t          |          S )Nr   rD   Blog not foundr#   )r   r5   r   r   HTTP_404_NOT_FOUNDrM   )rD   r   r?   s      r)   get_blogrk   j   sS    GE
..*h/
0
0C \(AJZ[[[[3r9   z/update/blog/{blog_id}blog_idc
                 &   t          d          }
|
                    dt          |           i          }|st          dd          i }|||d<   |||d<   |||d<   |||d	<   |||d
<   |||d<   |||d<   |t	          |          dk    r=|                    dg           D ] }t          |          }t          |           !g |d<   ne|                    dg           D ] }t          |          }t          |           !g }|D ]$}|                    t          |                     %||d<   t          j                    |d<   |
                    d|d         id|i           |
                    d|d         i          }t          |          S )Nr   r0   i  ri   r#   rA   rB   rD   rE   rF   rG   rH   r   rC   rJ   z$set)r   r5   r   r   lenr3   r   r   rU   r   r   rV   
update_onerM   )rl   rA   rB   rS   rD   rE   rF   rG   rH   rY   r   r?   update_dataimg_url	public_idnew_urlsfileupdated_docs                     r)   update_blogrv   r   s    GE
..%'!2!23
4
4C F4DEEEEK $G!(I"*J")8%&(/D+,%,>()%,>() v;;!777B// 8 86w??	,Y7777#%K  
 777B// 8 86w??	,Y7777 H B B :4 @ @AAAA#+K   (00K 
eSZ(6;*?@@@..%U!455K;'''r9   z/delete/blog/{blog_id}c                     t          d          }|                    dt          |           i          }|st          t          j        d          |                    d|d         i           ddiS )Nr   r0   ri   r#   messagezBlog deleted successfully)r   r5   r   r   r   rj   
delete_one)rl   rY   r   r?   s       r)   delete_blogrz      sv    GE
..%'!2!23
4
4C \(AJZ[[[[	eSZ()))233r9   )3r   typingr   r   r   r   bsonr   fastapir	   r
   r   r   r   r   r   r   r   fastapi.securityr   r   pydanticr   r   r   	app.db.dbr   app.utility.cloudinary_utilsr   r   r   app.utility.securityr   routerauth_schemerL   r*   r8   r>   rM   postHTTP_201_CREATEDr^   r3   HTTP_200_OKrg   rk   putrv   deleterz   ra   r9   r)   <module>r      sr         , , , , , , , , , , , ,       b b b b b b b b b b b b b b b b b b b b b b E E E E E E E E 0 0 0 0 0 0 0 0 0 0               
 , + + + + +	('	3	3	3jE***kc kh k k k k @Gw{?S?S   < X\]`be]eXf    s s    
c3h DcN      _&*ABBcaC8884t<<<#tCyyD<<<%)T$1%M%M%M+/4PT+U+U+U.2d4jj(,TbT(R(R(R7>""!) !)!)!) !) 	!)
 c]!) $C=!) !c+!) !!) !) !) CB!)F Lf&8992 2 :92
 F,>?? s       @?  $&2DEE  4sCCC!T$2$GGG)-d"d4B3GGG%)T$1%M%M%M+/4PT+U+U+U.2d4jj(,TbT(R(R(R7>""B( B(B(C=B( c]B( T*%&	B(
 smB( c]B( $C=B( !c+B( !B( B( B( FEB(J 'V5GHH%,W^%<%< 4 4 4 4 4 IH4 4 4r9   