
    Jhv.              	       n   d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ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 ddedededefdZ dedefdZ!dedefdZ"dededefdZ#dedefdZ$	 	 	 ddedededefdZ%dedefdZ&dedefdZ'dededefdZ(dedefdZ)y)    )Session)HTTPExceptionstatus)UUID)LocationLocale)LocationCreateSchemaLocationUpdateSchemaLocaleCreateSchemaLocaleUpdateSchemaLocationOutSchemaLocaleOutSchemaLocationFilterSchemaLocaleFilterSchema)QueryPaginator)Region)settings)API_PREFIXES)APIException)get_region_by_idNdbpageper_pagepayloadc           
        K   	 |dz
  |z  }| j                  t              j                  t        j                  j	                  d             j                  t        j                  j                               }|rV|j                  rJt        | |j                         d {   }|j                  t        j                  |j                  k(        }t        |t        dj                  t        t        j                                t"        j$                  g      ||d      }|j'                         S 7 # 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_all_locations	exceptionzFailed to fetch locations.moduleerrorstatus_codemessage)r   r   filter
deleted_atis_order_by
created_atdesc	region_idr   idr   r   joinstrr   api_base_urlr   LOCATIONpaginate	Exceptionr   r   HTTP_500_INTERNAL_SERVER_ERROR)	r   r   r   r   r"   r   region	paginatores	            Z/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/base/services/locations.pyr%   r%      s/    
(h&"))##D)

(8&&++-
. 	 w((+B0A0ABBFLL!3!3vyy!@AE"$X2245|7L7LMN
	 !!## C  
&A'==0	
 	

<   E*BD1 D/ BD1 .E*/D1 1	E':(E""E''E*location_idc                   K   	 | j                  t              j                  t        j                  |k(  t        j                  j                  d             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)Nr   r&   zLocation not foundzLocation not found.r'   zError fetching location by ID.)r   r   r,   r3   r-   r.   firstr   r   HTTP_404_NOT_FOUNDr9   r5   r:   r   r@   locationr=   s       r>   get_location_by_idrF   1   s     
88H%,,KK;&##D)
 %' 	 !"$89"55-	   
A'==4	
 	

)   CBB C	B>(B99B>>Cc           	      z  K   t        | |j                         d {   }| j                  t              j	                  t        j
                  |j
                  k(  t        j                  |j                  k(        j                         }|rt        dddit        j                  d      	 t        |j
                  |j                        }| j                  |       | j                          | j                  |       |j"                  r|j"                  D ]  }| j                  t$              j	                  t$        j
                  |j
                  k(  t$        j&                  |j                  k(  t$        j(                  j+                  d             j                         }|r	 t%        |j
                  |j                        }| j                  |        	 | j-                          | j                  |       |S 7 # t        $ r-}t        ddt        |      it        j                   d      d }~ww xY w# t        $ r-}t        d	dt        |      it        j                   d
      d }~ww xY w# t        $ r=}| j/                          t        ddt        |      it        j                   d      d }~ww xY ww)Nr   r&   z&Location already exists in this regionz'Location already exists in this region.r'   )namer2   zError creating location.rI   r@   r   Error creating locale.z#Error committing location creation.)r   r2   r   r   r,   rI   r3   rB   r   r   HTTP_400_BAD_REQUESTaddflushrefreshr9   r5   r:   localesr   r@   r-   r.   commitrollback)	r   r   r;   existing_locationrE   r=   locale_payloadexisting_localelocales	            r>   create_location_with_localesrW   H   sN    #B(9(9::F *11%fii' eg   HI33=	
 	

ii
 	x




8 %oo 	N hhv.55~222""hkk1!!%%d+ eg	 
 	^%8%8hkkRv	$

		


8m ;0  
A'==.	
 	

(  "#&A/ & E E4	   

A'==9	
 	

s~   J;G=BJ;,AH  ?B%J;%2H9J;"I2 <J; 	H6	(H11H66J;9	I/(I**I//J;2	J8;8J33J88J;c           	      d  K   t        | |       d {   }	 |j                  |j                  |_        |j                  /t        | |j                         d {   }|j                  |_        |j
                  |j
                  D ]  }	 | j                  t              j                  t        j                  |j                  k(  t        j                  |j                  k(  t        j                  j                  d             j                         }|r	 	 t        |j                  |j                        }| j%                  |        | j'                          | j)                  |       |S 7 ]7 # t        $ r-}t        ddt        |      it         j"                  d      d }~ww xY w# t        $ r-}t        ddt        |      it         j"                  d      d }~ww xY w# t        $ r=}| j+                          t        ddt        |      it         j"                  d      d }~ww xY ww)	Nr   r&   Error checking existing locale.r'   rJ   rK   r   zError updating location.)rF   rI   r2   r   r3   rP   r   r   r,   r@   r-   r.   rB   r9   r   r5   r   r:   rM   rQ   rO   rR   )	r   r@   r   rE   r;   rT   rU   r=   rV   s	            r>   update_locationrZ      s    'K88H2
<<##LLHM(+B0A0ABBF!'H??&")// &(hhv&6&=&=~':'::**hkk9))--d3' eg	 $
 '  '#+00$,KKF FF6N+< 			


8W 9 C ! &'*CF3$*$I$I A	  ! &'*CF3$*$I$I 8	   

A'==.	
 	

s   H0E/H0AG' E20G' B	E5G' 2F.
$G' .H02G' 5	F+>(F&&F++G' .	G$7(GG$$G' '	H-08H((H--H0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)Nr   r&   zError deleting location.r'   )rF   datetimenowtimezoneutcr-   rQ   rO   r9   rR   r   r5   r   r:   rD   s       r>   delete_locationr`      s     'K88H
&ll8<<8
		


8 9  

A'==.	
 	

s3   B-A"B-A	A$ !B-$	B*-8B%%B**B-c           
        K   	 |dz
  |z  }| j                  t              j                  t        j                  j	                  d             j                  t        j                  j                               }|rV|j                  rJt        | |j                         d {   }|j                  t        j                  |j                  k(        }t        |t        dj                  t        t        j                                t"        j$                  g      ||d      }|j'                         S 7 # t(        $ r-}t+        ddt        |      it,        j.                  d      d }~ww xY ww)	Nr   r   Tr   get_all_localesr&   zFailed to fetch locales.r'   )r   r   r,   r-   r.   r/   r0   r1   r@   rF   r3   r   r   r4   r5   r   r6   r   LOCALEr8   r9   r   r   r:   )	r   r   r   r   r"   r   rE   r<   r=   s	            r>   rb   rb      s/    
(h& ''!!$'

(6$$))+
, 	 w**/G4G4GHHHLL!3!3x{{!BCE""X2245|7J7JKL
	 !!## I  
$A'==.	
 	

r?   	locale_idc                   K   	 | j                  t              j                  t        j                  |k(  t        j                  j                  d             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)Nr   r&   zLocale not foundzLocale not found.r'   zError fetching locale by ID.)r   r   r,   r3   r-   r.   rB   r   r   rC   r9   r5   r:   r   rd   rV   r=   s       r>   get_locale_by_idrg      s     
&!((II"!!$'
 %' 	 "$67"55+	   
A'==2	
 	

rG   c                 P  K   t        | |j                         d {   }	 | j                  t              j	                  t        j
                  |j
                  k(  t        j                  |j                  k(  t        j                  j                  d             j                         }|rt        dddit        j                  d      	 	 t        |j
                  |j                        }| j!                  |       | j#                          | j%                  |       |S 7 # t        $ r-}t        ddt        |      it        j                  d      d }~ww xY w# t        $ r=}| j'                          t        ddt        |      it        j                  d      d }~ww xY ww)	Nr   r&   z&Locale already exists in this locationz'Locale already exists in this location.r'   rY   rJ   rK   )rF   r@   r   r   r,   rI   r3   r-   r.   rB   r   r   rL   r9   r5   r:   rM   rQ   rO   rR   )r   r   rE   rU   r=   rV   s         r>   create_localeri     si    'G,?,?@@H
((6*11KK7<<'(++-!!$'
 %'	 	
 "$LM"77A	  
W\\x{{C
v
		


65 A  
A'==5	
 	

  

A'==,	
 	

sX   F&D!F&B(D$ 
F&AE  F&$	E-(EEF&	F#&8FF##F&c                   K   t        | |       d {   }	 |j                  |j                  |_        |j                  /t        | |j                         d {   }|j                  |_        | j                          | j                  |       |S 7 7 :# t        $ r=}| j                          t        ddt        |      it        j                  d      d }~ww xY ww)Nr   r&   zError updating locale.r'   )rg   rI   r@   rF   r3   rQ   rO   r9   rR   r   r5   r   r:   )r   rd   r   rV   rE   r=   s         r>   update_localerk   5  s     #B	22F
<<#!,,FK*/G4G4GHHH!)F
		


6 3
 I  

A'==,	
 	

sE   C BC AB B7B C B 	C 8CCC c                   K   t        | |       d {   }	 | j                  |       | j                          y 7 '# t        $ r=}| j	                          t        ddt        |      it        j                  d      d }~ww xY ww)Nr   r&   zError deleting locale.r'   )	rg   deleterQ   r9   rR   r   r5   r   r:   rf   s       r>   delete_localern   K  sy     #B	22F

		&
			 3
  

A'==,	
 	

s.   B:B!< B	B8A==BB)r   
   N)Nr   ro   )*sqlalchemy.ormr   fastapir   r   uuidr   src.apps.base.models.locationsr   r   src.apps.base.schemas.locationsr	   r
   r   r   r   r   r   r   src.utils.paginationr   src.apps.base.models.regionsr   src.core.configr   src.utils.constantsr   src.core.exceptionsr   src.apps.base.services.regionr   intr%   rF   rW   rZ   r`   rb   rg   ri   rk   rn        r>   <module>r~      s;   " )  ;   0 / $ , , :

 
s 
# 
Ui 
:
 
s 
.@
7 @
=Q @
F4
g 4
C 4
BV 4
n
g 
C 
* #'	


 
 	
D
w 
3 
0#
G #
.@ #
L
G 
 
>P 
,
G 
 
r}   