
    Jh*              	       >   d dl 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 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 m!Z! 	 	 ddede"de"de#fdZ$dede"defdZ%dededefdZ&dede"dedefdZ'dede"defdZ(y)    )datetimetimezone)Session)HTTPExceptionstatus)API_PREFIXES)settings)QueryPaginator)APIException)Country)IntegrityError)Optional)Appellation)AppellationCreateSchemaAppellationOutputSchemaAppellationUpdateSchema)get_country_by_id)get_region_by_idget_sub_region_by_id)get_location_by_iddbpageper_pagereturnc           
      $  K   	 |dz
  |z  }| j                  t              j                  t        j                  j	                  d             j                  t        j                  j                               }t        |t        dj                  t        t        j                               t        j                  g      ||d      }|j!                         S # t"        $ r-}t%        ddt        |      it&        j(                  d      d }~ww xY ww)	N    T)queryschemaurloffsetlimituse_ormget_appellations	exceptionzFailed to fetch appellations.moduleerrorstatus_codemessage)r   r   filter
deleted_atis_order_bydate_createddescr
   r   joinstrr	   api_base_urlr   APPELLATIONpaginate	Exceptionr   r   HTTP_500_INTERNAL_SERVER_ERROR)r   r   r   r!   r   	paginatores          h/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/wine/appellation/services/appellation.pyr$   r$      s     

(h&%,,[-C-C-G-G-MNWWXcXpXpXuXuXwx"*X2245|7O7OPQ
	 !!## 
%A'==3	
 	

s)   DCC D	D (DDDappellation_idc                   K   	 | j                  t              j                  t        j                  |k(  t        j                  j                  d             j                         }|st        dd|it        j                  d      |S # t        $ r-}t        ddt        |      it        j                  d      d }~ww xY ww)Nget_appellations_by_idr;   zAppellation not found.r&   r%   z"Failed to fetch appellation by ID.)r   r   r+   idr,   r-   firstr   r   HTTP_404_NOT_FOUNDr6   r2   r7   r   r;   appellationr9   s       r:   r=   r=   .   s     
hh{+22NNn,""&&t,
 %' 	 /'8"550	   
+A'==8	
 	

s)   CBB C	B>(B99B>>Cpayloadc           
      R  K   |j                   rt        | |j                          d {   nd }|j                  rt        | |j                         d {   nd }|j                  rt        | |j                         d {   nd }	 t        |j                  |r|j                  nd |r|j                  nd |r|j                  nd t        j                  t        j                        t        j                  t        j                              }| j                  |       | j                          | j                  |       t!        j"                  |      S 7 .7 7 # t$        $ r=}| j'                          t)        ddt+        |      it,        j.                  d      d }~ww xY ww)N)name
country_id	region_idsub_region_idr/   last_updatedcreate_appellationr%   zFailed to create appellation.r&   )rF   r   rG   r   rH   r   r   rE   r>   r   nowr   utcaddcommitrefreshr   model_validater6   rollbackr   r2   r   r7   )r   rC   countryregion
sub_regionnew_appellationr9   s          r:   rJ   rJ   G   sP    
 BIASAS%b'*<*<===Y]G>E>O>O#B(9(9:::UYFJQJ_J_+B0E0EFFFeiJ
%%,wzz$#)fiit+5*--4!hll3!hll3
 	
		


?#&55oFF! >:F  

'A'==3	
 	

sX   &F'E+F'E+F' EF'CE F'F'F'	F$'8FF$$F'c                 Z  K   |j                   rt        | |j                          d {   nd }|j                  rt        | |j                         d {   nd }|j                  rt        | |j                         d {   nd }t        | |       d {   }	 |j                  r|j                  n|j                  |_        |r|j                  n|j                   |_         |r|j                  n|j                  |_        |r|j                  n|j                  |_        | j                          | j                  |       t        j                  |      S 7 07 7 7 # t        $ r=}| j                          t        ddt!        |      it"        j$                  d      d }~ww xY ww)Nupdate_appellationr%   zFailed to update appellation.r&   )rF   r   rG   r   rH   r   r=   rE   r>   rN   rO   r   rP   r6   rQ   r   r2   r   r7   )r   r;   rC   rR   rS   rT   rB   r9   s           r:   rW   rW   f   s_     BIASAS%b'*<*<===Y]G>E>O>O#B(9(9:::UYFJQJ_J_+B0E0EFFFeiJ.r>BBK
+2<<7<<[=M=M/6K<R<R-3		9N9N5?JMM[E^E^!
		


;&55kBB >:FB  

'A'==3	
 	

sj   &F+E+F+E+F+ EF+E F+B;E" F+F+F+ F+"	F(+8F##F((F+c                 ^  K   t        | |       d {   }	 t        j                  t        j                        |_        | j                          | j                  |       y 7 O# t        $ r=}| j                          t        ddt        |      it        j                  d      d }~ww xY ww)Ndelete_appellationr%   zFailed to delete appellation.r&   )r=   r   rK   r   rL   r,   rN   rO   r6   rQ   r   r2   r   r7   rA   s       r:   rY   rY      s      /r>BBK
!)hll!;
		


; C  

'A'==3	
 	

s3   B-A"B-A	A$ !B-$	B*-8B%%B**B-N)r   
   ))r   r   sqlalchemy.ormr   fastapir   r   src.utils.constantsr   src.core.configr	   src.utils.paginationr
   src.core.exceptionsr   src.apps.base.models.countryr   sqlalchemy.excr   typingr   ,src.apps.wine.appellation.models.appellationr   -src.apps.wine.appellation.schemas.appellationr   r   r   src.apps.base.services.countryr   src.apps.base.services.regionr   r    src.apps.base.services.locationsr   intanyr$   r=   rJ   rW   rY        r:   <module>rm      s    ' " ) , $ / , 0 )  D 
 = O ? 



 
 		
2


 
2

$
 
>


 %
 	
:


 
rl   