
    #h                      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	 d dl
mZ d dlmZmZmZ d dlmZmZmZmZmZ d d	lmZmZmZmZ d d
lmZ d dlmZ d dl d dl  d dl!m"Z" d dl#m$Z$m%Z%m&Z& 	 	 dde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)UUID)Session)HTTPExceptionstatus)APIException)QueryPaginator)ProducerProducerKeywordProducerNoise)funccastIntegerand_or_)ProducerFilterSchemaProducerCreateSchemaProducerUpdateSchemaProducerOutputSchema)API_PREFIXES)create_producer_noise)*)settings)get_producer_keyword_by_idcreate_producer_keywordupdate_producer_keyworddbpayloadpageper_pagereturnc                 &  K   	 |j                   rH|j                   j                  d      D cg c]#  }|j                         s|j                         % c}ng }|j                  rH|j                  j                  d      D cg c]#  }|j                         s|j                         % c}ng }|dz
  |z  }| j	                  t
              j                  t
        j                  j                               }	|	j                  t
        j                  d k(        }	|j                  r<|	j                  t
        j                  j                  d|j                   d            }	|r |j                  rG|	j                  t        |D 
cg c]%  }
t
        j                  j                  d|
 d      ' c}
       }	n|	j                  t        |D 
cg c]  }
t
        j                  j                  |
 d      t
        j                  j                  d|
 d      z  t
        j                  j                  d|
       z  t
        j                  j                  |
       z   c}
       }	t!        |	t"        dj%                  t'        t)        j*                               t,        j.                  g      ||d      }|j1                         S c c}w c c}w c c}
w c c}
w # t2        $ r-}t5        d	d
t'        |      it6        j8                  d      d }~ww xY ww)N,   %z %z%  T)queryschemaurloffsetlimituse_ormget_producers	exceptionzError retrieving producers.moduleerrorstatus_codemessage)keywordssplitstrip	producersr'   r
   order_by	name_showascfilter
deleted_at	filter_idliteralilikesearch_partialr   r	   r   joinstrr   api_base_urlr   PRODUCERpaginate	Exceptionr   r   HTTP_500_INTERNAL_SERVER_ERROR)r   r   r   r    wr4   pr7   r*   r'   keyword	paginatores                b/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/wine/producer/services/producer.pyr-   r-      s    &
T[TdTdw'7'7'='=c'BP!aggiAGGIPjlV]VgVg(9(9(?(?(DR1	QWWYRmo	(h&"++H,>,>,B,B,DEX00D89LL!1!1!7!7!G<M<M;Na8P!QRE%%RZ[w(,,22Qwiq>B[  ,4
 !(	 %..44y^D$..44r'"5EFG$..44r'^DE %..44yBC
 # 4"''3xG\G\G^C_amavavBw:x  BH  PX  bf
	 !!##= QR \  
"A'==1	
 	

sl   L)K KK.K K	K	+CK *K/K BKA&K LK 	L!(L		LLproducer_idc                   K   	 | j                  t              j                  t        j                  |k(  t        j                  dk(        j                         }|st        dddit        j                  d      t        j                  |      S # t        $ r-}t        ddt        |      it        j                  d      d}~ww xY ww)z$
    Retrieve a producer by ID.
    Nget_producer_by_idr.   zProducer not foundProducer not found.r/   z Error retrieving producer by ID.)r'   r
   r;   idr<   firstr   r   HTTP_404_NOT_FOUNDr   model_validaterF   rB   rG   )r   rN   producerrL   s       rM   rP   rP   ?   s     
88H%,,X[[K-GI\I\`dIdekkm+"$89"55-	  $228<< 
'A'==6	
 	

s)   CB
B C	C(C  CCreg_codec                 `  K   	 |rt        |      dk  rt        dddit        j                  d      |d d j	                         }|j                         st        dddit        j                  d      | j                  t        j                  t        t        j                  t        j                  t        j                  d	      d
      t                          j                  t        j                  j!                  | d      t        j"                  t        j                        dkD  t        j                  t        j                  dd      |k(        j%                         xs d}| |dz    }|S # t&        $ r-}t        ddt)        |      it        j                  d      d }~ww xY ww)N   get_literal_by_reg_coderW   z,reg_code must be at least 2 characters long.zInvalid reg_code.r/   z8reg_code prefix must contain only alphabetic characters.zInvalid reg_code prefix.   r&   r%   r$   r   r.   z%Error retrieving literal by reg_code.)lenr   r   HTTP_400_BAD_REQUESTlowerisalphar'   r   maxr   nullifsubstrr
   r>   r   r;   r?   lengthscalarrF   rB   )r   rW   prefixmax_numnew_literalrL   s         rM   rZ   rZ   U   s    "
3x=1,0!#QR"77+	  "1##%~~0!#]^"772	  ((HHT[[X-=-=q!A2FP
 &""fXQ<0KK(()A-KK((!Q/69
 &(  	  1. 
,A'33;	
 	

s)   F.E0E5 4F.5	F+>(F&&F++F.c                 R  K   	 | j                  t              j                  t        j                  |k(  t        j                  dk(        j                         }|st        dddit        j                  d      |j                  |_
        |j                  |_	        | j                          |j                  t        | |j                         d{   }|r5t        | |j                  t        |j                               d{    n4t!        | t#        |j                  |j                  	      
       d{    | j%                  |       t'        j(                  |      S 7 7 a7 .# t*        $ r-}t        ddt-        |      it        j.                  d      d}~ww xY ww)z&
    Update a producer's details.
    Nupdate_producerrN   rQ   r/   )r   rN   )rJ   )r   rN   keyword_datarN   rJ   r   producer_keywordr.   zError updating producer.)r'   r
   r;   rR   r<   rS   r   r   rT   r9   namecommitrJ   r   r   ProducerKeywordUpdateSchemar   ProducerKeywordAdditionSchemarefreshr   rU   rF   rB   rG   )r   rN   r   rV   keyword_objrL   s         rM   ri   ri   z   sz    *
88H%,,X[[K-GI\I\`dIdekkm($&;<"55-	   ))$..
		 ??& :$KK! K - (!<W__!U   .%B$,KK '&   	

8#228<<'
  
$A'==.	
 	

s_   F'CE. E(5E. E*	4E. =E,>)E. 'F'(E. *E. ,E. .	F$7(FF$$F'c                   K   t        |j                  |j                  |j                        }	 | j                  |       | j	                          | j                  |       |j                  r4t        | t        |j                  |j                               d{    |j                  r;|j                  D ],  }t!        | t#        |j                  |	      
       d{    . | j                  |       t%        j&                  |      S # t        $ r-}t        ddt        |      it        j                  d      d}~ww xY w7 7 gw)z 
    Create a new producer.
    )rn   r9   r>   create_winer.   zError creating producer.r/   Nrk   rl   )rN   noise)r   producer_noise)r
   producer_showr>   addro   rr   rF   r   rB   r   r]   rm   r   rq   rR   rw   r   ProducerNoiseAdditionSchemar   rU   )r   r   created_producerrL   rv   s        rM   create_producerr|      s=      ""''



 
		


#$ %:,//00
 	
 	
 ++ 	E': 0 3 3   	 JJ ../?@@3  
 A'33.	
 	

	
sG   -E2D ";EEAE"E
#,E	E(E  EE
EN)r$   
   )/r   uuidr   sqlalchemy.ormr   fastapir   r   src.core.exceptionsr   src.utils.paginationr	   &src.apps.wine.producer.models.producerr
   r   r   
sqlalchemyr   r   r   r   r   'src.apps.wine.producer.schemas.producerr   r   r   r   src.utils.constantsr   .src.apps.wine.producer.services.producer_noiser   /src.apps.wine.producer.schemas.producer_keyword-src.apps.wine.producer.schemas.producer_noisesrc.core.configr   0src.apps.wine.producer.services.producer_keywordr   r   r   intanyr-   rP   rB   rZ   ri   r|        rM   <module>r      s     " ) , / Y Y 3 3 H  H , P = ; $ H  H
 	,
,
!,
 ,
 	,

 	,
\
 
s 
x 
,#
g #
 #
 #
J2
2
2
 "2
 	2
h)A)A!)A )Ar   