
    h              	       .   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 	 	 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)QueryPaginator)Country)UUID)IntegrityError)Optional)WineDb)Variety)APIException)VarietyUpdateSchemaVarietyCreateSchemaVarietyOutputSchema)API_PREFIXES)settingsdbpageper_pagereturnc           
        K   	 |dz
  |z  }| j                  t              j                  t        j                  j	                               }|j                  t        j                  d k(        }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_varieties	exceptionzFailed to fetch varieties.moduleerrorstatus_codemessage)r   r   order_bydate_createddescfilter
deleted_atr   VarietyOutSchemajoinstrr   api_base_urlr   VARIETYpaginate	Exceptionr   r   HTTP_500_INTERNAL_SERVER_ERROR)r   r   r   r   r   	paginatores          `/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/wine/variety/services/variety.pyr"   r"      s     

(h&!**7+?+?+D+D+FGW//478" 0bggs8CXCXCZ?[]i]q]q>r6s  }C  KS  ]a
	 !!## 
"A'==0	
 	

s)   DCC D	D(C>>DD
variety_idc                 n  K   	 | j                  t              j                  t        j                  |k(  t        j                  d k(        j                         }|st        d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_variety_by_idr#   zVariety not foundzVariety not found.r$   zFailed to fetch variety.)r   r   r,   idr-   firstr   r   HTTP_404_NOT_FOUNDr4   r0   r5   r   r9   varietyr7   s       r8   r;   r;   &   s     
((7#**7::+CGDVDVZ^D^_eeg*"$78"55,	   
&A'==.	
 	

s)   B5A7A< ;B5<	B2(B--B22B5variety_datac                   K   	 t        di |j                         }| j                  |       | j                          | j	                  |       t        j                  |      S # t        $ r4}| j                          t        dddit        j                  d      d }~wt        $ r-}t        ddt        |      it        j                  d      d }~ww xY ww)Ncreate_varietyr#   Variety already existsVariety already exists.r$   zFailed to create variety. )r   
model_dumpaddcommitrefreshr.   model_validater   rollbackr   r   HTTP_400_BAD_REQUESTr4   r0   r5   )r   rA   new_varietyr7   s       r8   rC   rC   <   s     
: 7 7 9:
{
		


;..{;; 

# 8933-	
 	
  
#A'==/	
 	

s5   CAA$ #C$	C-/BC((CCCc                   K   	 t        | |       d {   }|j                         j                         D ]  \  }}t        |||        | j	                          | j                  |       t        j                  |      S 7 m# t        $ r4}| j                          t        dddit        j                  d      d }~wt        $ r-}t        ddt        |      it        j                  d      d }~ww xY ww)Nupdate_varietyr#   rD   rE   r$   zFailed to update variety.)r;   rG   itemssetattrrI   rJ   r.   rK   r   rL   r   r   rM   r4   r0   r5   )r   r9   rA   r@   keyvaluer7   s          r8   rP   rP   V   s     

)"j99&11399; 	)JCGS%(	) 			


7..w77 :  

# 8933-	
 	
  
#A'==/	
 	

sE   C7B BA,B  C7B 	C4/B;;C4(C//C44C7c                 D  K   	 t        | |       d {   }t        j                  t        j                        |_        | j                          t        j                  |      S 7 Q# t        $ r-}t        ddt        |      it        j                  d      d }~ww xY ww)Ndelete_varietyr#   zFailed to delete variety.r$   )r;   r   nowr   utcr-   rI   r.   rK   r4   r   r0   r   r5   r?   s       r8   rV   rV   s   s     
)"j99%\\(,,7
		..w77 :  
#A'==/	
 	

s9   B A' A%AA' $B %A' '	B0(BBB N)r   
   )'r   r   sqlalchemy.ormr   fastapir   r   src.utils.paginationr   src.apps.base.models.countryr	   uuidr
   sqlalchemy.excr   typingr   src.apps.wine.wine.models.winer   $src.apps.wine.variety.models.varietyr   src.core.exceptionsr   %src.apps.wine.variety.schemas.varietyr   r   r   r.   src.utils.constantsr   src.core.configr   intanyr"   r;   rC   rP   rV   rF       r8   <module>rj      s    ' " ) / 0  )  1 8 , B  B , $ 



 
 		
*


 
,

%
 
4


 &
 	
:


 
ri   