
    =gEix!              $       D   d Z ddlmZmZmZmZmZmZ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mZ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 e       Zej?                  de       ed       ed       ed       ed       ed       ed
       ed       ed       ed
       ed
       ed
       ed
       ed
       ee       ee      fde de de de!de dee!   de"de dee!   dee!   dee    dee    dee   dede
fd       Z#ejI                  dee         d
d
dd ee      fdee    d ee   d!e%d"e%de
f
d#       Z&ejI                  d$ee          ee       ee      fdede
fd%       Z'ejI                  d&e       ee      fd'e%de
fd(       Z(ejS                  d&e       ed
       ed
       ed
       ed
       ed
       ed
       ed
       ed
       ed
       ed
       ed
       ed
       ed
       ed
       ee       ee      fd'e%dee    dee    dee    dee!   dee    dee!   dee"   dee    dee!   dee!   dee    dee    d)ee    dee   dede
f"d*       Z*ejW                  d&       ee       ee      fd'e%dede
fd+       Z,y
),u5   
Endpoints pour les annonces de déchets à revendre
    )	APIRouterDependsHTTPExceptionstatus
UploadFileFileForm)Session)get_db)User)WasteListingListingStatus)WasteListingCreateWasteListingUpdateWasteListingResponse)get_current_user)ListOptionalN/)response_model.Ttitledescriptioncategoryquantityunitpriceis_negotiablelocationlatitude	longitudecontact_phonecontact_preferencephotoscurrent_userdbc                    K   g }|rd}t        j                  |d       |D ]  }|j                  s|j                  j	                  d      s,t         j
                  j                  |j                        d   }t        j                          | }t         j
                  j                  ||      }t        |d      5 }|j                          d{   }|j                  |       ddd       |j                  |        t        |j                  | |||||||||	|
||rt!        j"                  |      ndt$        j&                        }|j)                  |       |j+                          |j-                  |       |S 7 # 1 sw Y   xY ww)	uF   
    Création d'une annonce de déchets avec photos optionnelles
    uploads/waste_listingsTexist_okimage/   wbN)user_idr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r   )osmakedirsfilenamecontent_type
startswithpathsplitextuuiduuid4joinopenreadwriteappendr   idjsondumpsr   ACTIVEaddcommitrefresh)r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   photo_paths
upload_dirphotofile_extensionr0   filepathfcontentnew_listings                           K/home/www/lebenam.kofcorporation.com/app/api/v1/endpoints/waste_listings.pycreate_waste_listingrL      s[    * K-

J. 
	-E~~%"4"4"?"?"I!#!1!1%..!A!!D"jjl^N+;<77<<
H=(D) %Q$)JJL0GGGG$% ""8,
	- ##-*5tzz+&4##K$ FF;IIKJJ{9 1% %s<   /FFA0F>FF F(BF FF	F   status_filterskiplimitc                   K   |j                  t              }| r"|j                  t        j                  | k(        }|r#|j                  t        j                  |k(        }n0|j                  t        j                  t
        j                  k(        }|j                  t        j                  j                               j                  |      j                  |      j                         }|S w)u0   
    Liste des annonces de déchets actives
    )queryr   filterr   r   r   r?   order_by
created_atdescoffsetrP   all)r   rN   rO   rP   r%   rR   listingss          rK   get_waste_listingsrZ   S   s      HH\"E\22h>?\00MAB\00M4H4HHI~~l55::<=DDTJPPQVW[[]HOs   C*C,z/my-listingsc                    K   |j                  t              j                  t        j                  | j                  k(        j                  t        j                  j                               j                         }|S w)z-
    Liste des annonces de l'utilisateur
    )	rR   r   rS   r-   r<   rT   rU   rV   rX   )r$   r%   rY   s      rK   get_my_waste_listingsr\   k   s\      xx%,,/h|&&++-.ssu  Os   A;A=z/{listing_id}
listing_idc                    K   |j                  t              j                  t        j                  | k(        j	                         }|st        t        j                  d      |S w)u    
    Détails d'une annonce
       Annonce non trouvéestatus_codedetail)rR   r   rS   r<   firstr   r   HTTP_404_NOT_FOUND)r]   r%   listings      rK   get_waste_listingrf   y   sV      hh|$++LOOz,IJPPRG11)
 	

 Ns   A#A%r   c                   K   |j                  t              j                  t        j                  | k(  t        j                  |j                  k(        j                         }|st        |j                  d      |r|d   j                  rd}t        j                  |d       g }|j                  r]	 t        j                  |j                        }|D ]7  }t        j                  j                  |      s#t        j                   |       9 	 |D ]  }|j                  s|j"                  j%                  d      s,t        j                  j'                  |j                        d   }t)        j*                          | }t        j                  j-                  ||      }t/        |d	      5 }|j1                          d
{   }|j3                  |       d
d
d
       |j5                  |        t7        |d|rt        j8                  |      nd
       |||||||||	|
|||d}|j;                         D ]  \  }}|	t7        |||        |j=                          |j?                  |       |S #  Y gxY w7 # 1 sw Y   xY ww)u=   
    Mise à jour d'une annonce avec photos optionnelles
    r_   r`   r   r'   Tr(   r*   r+   r,   Nr#   )r   r   r   r   r   r   r   r   r   r    r!   r"   r   ) rR   r   rS   r<   r-   rc   r   rd   r0   r.   r/   r#   r=   loadsr3   existsremover1   r2   r4   r5   r6   r7   r8   r9   r:   r;   setattrr>   itemsrA   rB   )r]   r   r   r   r   r   r   r   r   r   r    r!   r"   r   r#   r$   r%   re   rD   rC   	old_pathsold_pathrE   rF   r0   rG   rH   rI   update_datafieldvalues                                  rK   update_waste_listingrr      s<    . hh|$++:%/ eg 
 11)
 	
 &)$$-

J. >> JJw~~6	 ) ,Hww~~h/		(+,  
	-E~~%"4"4"?"?"I!#!1!1%..!A!!D"jjl^N+;<77<<
H=(D) %Q$)JJL0GGGG$% ""8,
	- 	k4::k#:tT {dU&H9&>PK $))+ +u GUE*	+ IIKJJwNK 1% %sc   B3J
6AI4 :I4 J
$J
 A0J
0I>I<I>A'J
2J
4I96J
<I>>J	J
c                 .  K   |j                  t              j                  t        j                  | k(  t        j                  |j                  k(        j                         }|st        t        j                  d      |j                  r]	 t        j                  |j                        }|D ]7  }t        j                  j                  |      s#t        j                  |       9 	 |j!                  |       |j#                          dddS #  Y *xY ww)z#
    Suppression d'une annonce
    r_   r`   Tu   Annonce supprimée avec succès)r   message)rR   r   rS   r<   r-   rc   r   r   rd   r#   r=   rh   r.   r3   ri   rj   deleterA   )r]   r$   r%   re   rC   
photo_paths         rK   delete_waste_listingrw      s      hh|$++:%/ eg 
 11)
 	
 ~~	**W^^4K) *
77>>*-IIj)* IIgIIK 4 	s%   B	DAD D ''DDD)-__doc__fastapir   r   r   r   r   r   r	   sqlalchemy.ormr
   app.db.sessionr   app.models.userr   app.models.waste_listingr   r   app.schemas.waste_listingr   r   r   app.core.securityr   typingr   r   r.   r5   r=   routerpoststrfloatboolrL   getintrZ   r\   rf   putrr   ru   rw        rK   <module>r      s=   V U U " !   @ b b . ! 	  	S!56cCyI3iS	!$Zt*I $T
!%d#':(,T
#Dz !12&/=== = 	=
 = E?= = = uo= = C== != = = 	= 7=~ C%9 :;"-1&/smM*  	
 	 <. N40D+EF !12&/ G O,@A &/ B" O,@A  :!%d"4j $T
t*!$Z$(J"4j $T
!%d#':(,T
 J#Dz !12&/#TTC=T #T sm	T
 uoT 3-T E?T D>T smT uoT T C=T !T SMT T  !T" 	#T BTl  !!12&/### 	#  #r   