
    <gEi_"              &       v   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 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 ddlZddlZddlZ e       ZejA                  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!de!de!de"de!dee#   dee#   dee!   dee!   de$de$dee#   dee   ded e
f d!       Z%ejM                  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jM                  d'ee          ee       ee      fded e
fd(       Z(ejM                  d)e       ee      fd*e"d e
fd+       Z)ejU                  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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e   ded e
f$d-       Z+ejY                  d)       ee       ee      fd*e"ded e
fd.       Z-y)/u8   
Endpoints pour les annonces de dons (choses à offrir)
    )	APIRouterDependsHTTPExceptionstatus
UploadFileFileForm)Session)get_db)User)DonationListing)ListingStatus)DonationListingCreateDonationListingUpdateDonationListingResponse)get_current_user)ListOptionalN/)response_model.   Ftitledescriptioncategory	conditionquantitylocationlatitude	longitudecontact_phonecontact_preferencerequires_pickupcan_deliverdelivery_radius_km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        di d|j                  d	| d
|d|d|d|d|d|d|d|d|	d|
d|d|d|rt!        j"                  |      nddt$        j&                  }|j)                  |       |j+                          |j-                  |       |S 7 # 1 sw Y   xY ww)uA   
    Création d'une annonce de don avec photos optionnelles
    uploads/donation_listingsTexist_okimage/r   wbNuser_idr   r   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&   r'   photo_paths
upload_dirphotofile_extensionr2   filepathfcontentnew_listings                            N/home/www/lebenam.kofcorporation.com/app/api/v1/endpoints/donation_listings.pycreate_donation_listingrN      s    , K0

J. 
	-E~~%"4"4"?"?"I!#!1!1%..!A!!D"jjl^N+;<77<<
H=(D) %Q$)JJL0GGGG$% ""8,
	- "    	
      $ . (   . +6tzz+&4  ##!K& FF;IIKJJ{; 1% %s<   /F-F-A0F->F!FF!(B7F-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)z,
    Liste des annonces de dons actives
    )queryr   filterr   r   r   rA   order_by
created_atdescoffsetrR   all)r   rP   rQ   rR   r'   rT   listingss          rM   get_donation_listingsr\   V   s      HH_%E_55AB_33}DE_33}7K7KKL~~o88==?@GGMSSTYZ^^`HOs   C*C,z/my-listingsc                    K   |j                  t              j                  t        j                  | j                  k(        j                  t        j                  j                               j                         }|S w)z5
    Liste des annonces de dons de l'utilisateur
    )	rT   r   rU   r.   r>   rV   rW   rX   rZ   )r&   r'   r[   s      rM   get_my_donation_listingsr^   n   s\      xx(//<??2h))..01##%  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 de don
       Annonce non trouvéestatus_codedetail)rT   r   rU   r>   firstr   r   HTTP_404_NOT_FOUND)r_   r'   listings      rM   get_donation_listingrh   |   sX      hh'../A/AZ/OPVVXG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 hxY w7 # 1 sw Y   xY ww)uD   
    Mise à jour d'une annonce de don avec photos optionnelles
    ra   rb   r   r)   Tr*   r,   r   r-   Nr%   )r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r   ) rT   r   rU   r>   r.   re   r   rf   r2   r0   r1   r%   r?   loadsr5   existsremover3   r4   r6   r7   r8   r9   r:   r;   r<   r=   setattrr@   itemsrC   rD   ) r_   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r   r%   r&   r'   rg   rF   rE   	old_pathsold_pathrG   rH   r2   rI   rJ   rK   update_datafieldvalues                                    rM   update_donation_listingrt      s>    0 hh'..j(<??2 eg 
 11)
 	
 &)$$0

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 {H(9&>P*;0FK $))+ +uGUE*+ IIKJJwNG 1% %sc   B3J6AI5 :I5 J$J A0J0I?I=I?A(J2J5I:7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 de don
    ra   rb   Tu&   Annonce de don supprimée avec succès)r   message)rT   r   rU   r>   r.   re   r   r   rf   r%   r?   rj   r0   r5   rk   rl   deleterC   )r_   r&   r'   rg   rE   
photo_paths         rM   delete_donation_listingry      s      hh'..j(<??2 eg 
 11)
 	
 ~~	**W^^4K) *
77>>*-IIj)* IIgIIK ; 	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.donation_listingr   app.models.waste_listingr   app.schemas.donation_listingr   r   r   app.core.securityr   typingr   r   r0   r7   r?   routerpoststrintfloatboolrN   getr\   r^   rh   putrt   rw   ry   r/       rM   <module>r      sg   V U U " !   7 2 n n . ! 	  	S!89cCyI#YGI $T
!%d#':(,T
 KU*.t*#Dz !12&/!??? ? 	?
 ? ? uo? ? C=? !? ? ? !? ? ?  	!? :?B C%< =>"-1&/smM*  	
 	 ?. N40G+HI !12&/ J O,CD &/ E" O,CD  :!%d"4j#Dz"4j"4j $T
!%d#':(,T
&*4j"&t**.t* J#Dz !12&/%RRC=R #R sm	R
 }R smR smR uoR R C=R !R d^R $R !R SMR  !R" #R$ 	%R ERh  !!12&/### 	#  #r   