
    Fh2                        d dl mZmZmZmZmZ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mZ d dlZd dlZd dlZd dlmZ 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" d dl#m$Z$ d dlm%Z% d dl&m'Z'  e       Z( e       Z) e       Z* e       Z+ e       Z, ejZ                  dd      Z.ej^                  ja                  ej^                  jc                  ej^                  je                  e3      ddd            Z4ej^                  jc                  e4ddddd      Z5 ejl                  e5d       e(jo                  de!ejp                      ee'      g       ee      fdejr                  d efd!       Z:e(jw                  d"ejp                  ejx                   ee'      g#       ee      fd$e=d ed%ejp                  fd&       Z>e(jw                  de!eejp                        ejx                   ee'      g#       ee      fd'e=d(e$d)e$d ed%e!eejp                        f
d*       Z?e(j                  d"ejp                  ejx                   ee'      g#       ee      fd$e=dej                  d ed%ejp                  fd+       ZBe(j                  d"ejp                  ejx                   ee'      g#       ee      fd$e=dej                  d ed%ejp                  fd,       ZDe(j                  d"ejx                   ee'      g-       ee      fd$e=d ed%eFfd.       ZGe(jo                  d/ej                  ej                   ee'      g#       ed       ed       ed       ed       ee      fd0ee   d1eeJ   d$ee=   d2ee=   d ef
d3       ZKe(j                  d4       ed       ed       ee      fd5ee=   d2ee=   d efd6       ZLe)jo                  d7e!ej                     ej                   ee'      g#       ee      fd8ej                  d efd9       ZOe)jw                  d:e!ej                     ejx                   ee'      g#       ee      fd;e=d ed%ej                  fd<       ZPe)jw                  d7e!eej                        ejx                   ee'      g#       ee      fd$e=d efd=       ZQe)j                  d>ej                  ejx                   ee'      g#       ee      fd;e=d8ej                  d ed%ej                  fd?       ZSe)j                  d>ej                   ee'      g-       ee      fd;e=d ed%dfd@       ZUe*jo                  dAej                   ee'      g-       ee      fd efdB       ZVe*jw                  dC ee'      gD       edEdFG       ee      fdHeJd efdI       ZWe+jo                  dJe! ee'      g      dKej                  fdL       ZYe+jo                  dMe! ee'      g       ee      fdKej                  d efdN       Z[e,jo                  dOe!ejx                  P      dQej                  fdR       Z]y)S    )	APIRouterDependsFile
UploadFileHTTPExceptionForm)Session)
controllerschema)get_db)status)ListOptionalN)Path)save_social_config_to_db)social_media_config)Query)PostTypeConfig)format_post_type_configs)APIResponse)Union)date)	PostImage)get_current_userBASE_URLzhttp://localhost:8000z..menu_designdesignerstatic	marketingimagesT)exist_okz/posts)response_modeldependencies	post_datadbc                     	 t        j                  | |      }dd|dS # t        $ r}|d }~wt        $ r2}t	        d|       t        j                          t        dd      d }~ww xY w)NTzPost created successfullysuccessmessagedatazERROR:  zInternal Server Errorstatus_codedetail)r
   create_calendar_post_controllerr   	Exceptionprint	traceback	print_exc)r$   r%   resultes       =/var/www/html/hubwallet-dev/src/marketing/apps/post/router.pycreate_postr7   ,   ss    M;;IrJ2
 	

   Mh4KLLMs    	A')A'-A""A'z/posts/{post_id})r"   r-   r#   post_idreturnc                 .    t        j                  | |      S N)r
   "get_calendar_post_by_id_controllerr8   r%   s     r6   get_postr>   @   s    88"EE    calendar_id
start_dateend_datec                 N    t        j                  | |||      }t        dd|      S )z`
    Get calendar posts by calendar_id and a schedule_date between start_date and end_date.
    Tz%Calendar posts retrieved successfullyr'   )r
   ;get_calendar_posts_by_calendar_id_and_date_range_controllerr   )r@   rA   rB   r%   r4   s        r6   .get_calendar_posts_by_branch_id_and_date_rangerE   F   s5     SSZ2F 7 r?   c                 0    t        j                  | ||      S r;   )r
   update_calendar_post_controllerr8   r$   r%   s      r6   update_postrI   ]   s    55gy"MMr?   c                 0    t        j                  | ||      S )zY
    Partially update a calendar post.
    Only the provided fields will be updated.
    )r
   'partial_update_calendar_post_controllerrH   s      r6   partial_update_postrL   a   s     ==gyRTUUr?   )r-   r#   c                 6    t        j                  | |       ddiS )Nr.   z"Calendar post deleted successfully)r
   delete_calendar_post_controllerr=   s     r6   delete_postrO   n   s    ..w;:;;r?   z/upload-post-imageimage	image_urlpost_type_idc                 P   | s|st        dd      | r| j                  dvrt        dd      t        j                         j                   d| j
                   }t        j                  j                  t        |      }t        |d      5 }t        j                  | j                  |       d d d        t         d| }|}n|r|j                  d	      d
   }t!        |||      }	|j#                  |	       |j%                          |j'                  |	       |	S # 1 sw Y   pxY w)N  z+Either image file or image URL is required.r,   )z	image/pngz
image/jpegz	image/jpgz
image/webpzInvalid image type_wbz/static/marketing/images//)r8   rR   rQ   
image_name)r   content_typeuuiduuid4hexfilenameospathjoinSTATIC_PATHopenshutilcopyfileobjfiler   splitr   addcommitrefresh)
rP   rQ   r8   rR   r%   r^   	file_pathbufferrY   
post_images
             r6   upload_post_imagern   {   s    4abb %[[C8LMMjjl&&'q(89GGLLh7	)T" 	3fuzz62	3  j 9(D	
 
__S)"-
7%1"+#-/J FF:IIKJJz+	3 	3s   !DD%z/delte-upload-imageimage_idc                 2    t        j                  || |      S )N)r%   ro   rR   )r
   delete_uplod_photo_controller)ro   rR   r%   s      r6   delete_photo_routerrr      s     33r8Yeffr?   z/post-typespost_type_datac                     	 t        j                  | |      }t        dd|      S # t        $ r}t	        dt        |            d }~ww xY w)NTz'Calendar post type created successfullyr'   r+   r,   )r
   $create_calendar_post_type_controllerr   r0   r   str)rs   r%   created_post_typer5   s       r6   create_calendar_post_typerx      sT    <&KKN\^_="
 	

  <CF;;<s   #& 	A
AA
z/post-types/{id}idc                 J    t        j                  | |      }t        dd|      S )z)
    Get a calendar post type by ID.
    Tz)Calendar post type retrieved successfullyr'   )r
   'get_calendar_post_type_by_id_controllerr   )ry   r%   r4   s      r6   get_calendar_post_type_by_idr|      s,     @@RHF; r?   c                 J    t        j                  | |      }t        dd|      S )NTz!Post types retrieved successfullyr'   )r
   -get_calendar_post_types_by_post_id_controllerr   )r8   r%   r4   s      r6   get_post_types_by_post_idr      s-    
 FFwPRSF3 r?   z/post-type/{id}c                 0    t        j                  | ||      S )z&
    Update a calendar post type.
    )r
   $update_calendar_post_type_controller)ry   rs   r%   s      r6   update_calendar_post_typer      s     ::2~bQQr?   c                 6    t        j                  | |       ddiS )z&
    Delete a calendar post type.
    r.   z'Calendar post type deleted successfully)r
   $delete_calendar_post_type_controller)ry   r%   s     r6   delete_calendar_post_typer     s      33B;?@@r?   z/load-configc                 P    t               }|st        d      t        | |       ddiS )Nz6Social media post configuration data is not available.r)   z+Social media post config saved successfully)r   
ValueErrorr   )r%   config_datas     r6   load_social_configr     s/    %'KQRRR-DEEr?   z/post-type-configs)r#   .z*Comma-separated list of master account IDs)description
master_idsc                 ~   	 | j                  d      D cg c]  }t        |j                                }}|st	        dd      |j                  t              j                  t        j                  j                  |            j                         }t        |      S c c}w # t        $ r t	        dd      w xY w)N,rT   z8Invalid master_ids format. Use comma-separated integers.r,   z&master_account_id list cannot be empty)rg   intstripr   r   queryr   filtermaster_account_idin_allr   )r   r%   ry   master_ids_listconfigss        r6   get_post_type_configs_altr   #  s    
p5?5E5Ec5JKr3rxxz?KK 4\]]hh~&--((,,_=	ce  $G,, L p4noops   B%  B B%  B% %B<z/generate-textrequest_datac                     	 t        j                  |       }t        dd|      S # t        $ r}|d }~wt        $ r)}t        t
        j                  t        |            d }~ww xY w)NTz#Text content generated successfullyr'   r,   )r
   generate_text_controllerr   r   r0   r   HTTP_500_INTERNAL_SERVER_ERRORrv   )r   r4   r5   s      r6   generate_textr   >  sj    
44\B9
 	

   
==q6
 	

s   "% 	A%0A%$A  A%z/image-generatec                     	 t        j                  | |      }t        dd|      S # t        $ r}|d }~wt        $ r)}t        t
        j                  t        |            d }~ww xY w)N)r%   Tz$Image content generated successfullyr'   r,   )r
   generate_image_controllerr   r   r0   r   r   rv   )r   r%   r4   r5   s       r6   generate_imager   U  sl    
55lrJ:
 	

   
==q6
 	

s   $' 	A'2A'$A""A'z
/check-url)r"   r-   url_datac                 H    t        j                  |       }t        dd|      S )NTz$URL information fetched successfullyr'   )r
   	check_urlr   )r   r4   s     r6   check_url_endpointr   r  s*    
 !!(+F6 r?   )^fastapir   r   r   r   r   r   sqlalchemy.ormr	   src.marketing.apps.postr
   r   src.utils.dbr   r   typingr   r   r_   r[   rd   pathlibr   r2   src.marketing.apps.post.utilsr   ,src.marketing.utils.social_media_post_configr   r   src.marketing.apps.post.modelr   r   src.utils.responser   r   datetimer   r   src.apps.auth.controllerr   routerpost_type_routerpost_type_configgenerate_content_routerget_url_informationgetenvr   r`   abspathra   dirname__file__BASE_DIRrb   makedirspostCalendarPostOutCalendarPostCreater7   getHTTP_200_OKr   r>   rE   putCalendarPostUpdaterI   patchrL   deletedictrO   PostImageOutHTTP_201_CREATEDrv   rn   rr   CalendarPostTypeOutCalendarPostTypeCreaterx   r|   r   CalendarPostTypeUpdater   HTTP_204_NO_CONTENTr   r   r   GenerateTextContentr   GenerateImageContentr   URLInfoRequestr    r?   r6   <module>r      s   M M " 6   ! 	     B L  8 B *   3 5 
; ; #+ k 299Z!89 77??277<<(A4tTUggll8]J+W_` K$ ' Xk&2H2H&IX_`pXqWrsDKFO M644 M' M tM& v/E/ESYSeSeu|  ~N  vO  uP  Q)0 Fc Fw FV=S=S F QF
 H[f6L6L1M%N\b\n\n  F  GW  X  ~Y  Z
 &/	  		
 f,,-. Z, v/E/ESYSeSeu|  ~N  vO  uP  QRYZ`Ra N N)B)B N Nflf|f| N QN  1G1GU[UgUgw~  @P  xQ  wR  S &/	V	V((	V 		V 		V S	V !v/A/AQXYiQjPkl,3FO < <' < < m< !&2E2ESYSjSj  {B  CS  {T  zU  V"&t*#Dz!$Z"&t*&/)J)}) c]) 3-	)
 	) V)Z $%/3Dz6:4j#*6?g# g&.smg"g &g4 v99:''*+,	   &/<11<<<* (VE_E_9`nt  oA  oA  QX  Yi  Qj  Pk  l &/  l mKVE_E_@`4aou  pB  pB  RY  Zj  Rk  Ql  m &/			 m	 )&:T:Tbhbtbt  EL  M]  E^  D_  ` &/RR11R 	R 	R `R *8R8Rbijzb{a|} &/AAA 
A ~A ~63J3JZabrZsYtu%,V_ F7 F vF *'BR:S9TUC-YZ&/--- V-4 *+,  

 : : 


$ *+,  
 MTTZO 
!<!< 
' 


0 ""  $!6!6 	$r?   