
    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
mZ d dlmZ d dl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ede%de
fdZ&d!dede%de%de$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dfdZ*dede%defdZ+	 	 	 d!dede%de%de$e   fdZ,dedefdZ-dede%dedefdZ.dede%ddfd Z/y)"    )datetimetimezone)Session)HTTPExceptionstatus)APIException)Region	SubRegion)settings)API_PREFIXES)RegionCreateSchemaRegionUpdateSchemaRegionOutSchemaSubRegionCreateSchemaSubRegionUpdateSchemaSubRegionOutSchemaRegionFilterSchemaSubRegionFilterSchema)get_country_by_id)QueryPaginator)Country)UUID)IntegrityError)Optionaldb	region_idreturnc                   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	   	exceptionRegion not foundmoduleerrorstatus_codemessagezError fetching region by ID.)queryr	   filterid
deleted_atis_firstr   r   HTTP_404_NOT_FOUND	Exceptionstrr   r   regiones       W/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/base/services/region.pyget_region_by_idr3      s     
&!((II"!!$'
 %' 	 "$67"55*	   
A'112	
 	

)   CBB C	B>(B99B>>CNpageper_pagepayloadc           
      D  K   	 |dz
  |z  }| j                  t              j                  t        j                  j	                  d             }|r|j
                  r| j                  t              j                  t        j                  |j
                  k(        j                         }|st        dddit        j                  d      |j                  t              j                  t        j                  |j                  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   r	   r   zCountry not foundr!    Tr&   schemaurloffsetlimituse_ormget_all_regionszFailed to fetch regions.)r&   r	   r'   r)   r*   
country_idr   r(   r+   r   r   r,   joinr   r   r.   r   api_base_urlr   REGIONpaginater-   HTTP_500_INTERNAL_SERVER_ERROR)	r   r5   r6   r7   r>   r&   country	paginatorr1   s	            r2   rA   rA   3   sU    
(h& ''(9(9(=(=d(CDw))hhw'..wzzW=O=O/OPVVXG"#&(;< & 9 9/	  JJw'..wzzWZZ/GHE""X2245|7J7JKL
	 !!## 
$A'==.	
 	

s)   F E"E' &F '	F0(FFF c                   K   t        | |j                         d {   }	 | j                  t              j	                  t        j
                  |j
                  k(        j                         }|r|j                  ^	 d |_        |j                         j                         D ]  \  }}t        |||        | j!                          | j#                  |       |S t        dddit        j                  d      t        di |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Error checking existing region.r!   z$Error restoring soft-deleted region.z$Region with this code already existszError creating region. )r   rB   r&   r	   r'   region_coder+   r-   r   r.   r   HTTP_400_BAD_REQUESTr)   dictitemssetattrcommitrefreshaddrollback)r   r7   rH   existingr1   fieldvaluer0   s           r2   create_regionrX   T   s    %b'*<*<==G
88F#**6+=+=ATAT+TU[[] *&*#$+LLN$8$8$: 4LE5HeU34		

8$  FG33:	
 	
 %glln%FFF6N

		


6Q >  
A'335	
 	

$  "#&A/ & ; ;B	 (  

A'33,	
 	

s}   HEHAE /H>AF A
H%"F= H	F(E<<FH	F:(F55F::H=	H8G>>HHc                   K   t        | |       d {   }	 |j                  d      }d|v rt        | |d          d {   }|j                         D ]  \  }}t	        |||        | j                          | j                  |       |S 7 z7 N# t        $ r=}| j                          t        ddt        |      it        j                  d      d }~ww xY ww)NTexclude_unsetrB   r	   r   zError updating region.r!   )r3   rN   r   rO   rP   rQ   rR   r-   rT   r   r.   r   rM   )	r   r   r7   r0   update_datarH   rV   rW   r1   s	            r2   update_regionr]      s     #B	22F
lll6;&-b+l2KLLG'--/ 	*LE5FE5)	* 			


6 3 M  

A'33,	
 	

E   CBC(B  BAB CB 	C8CCCc                 ,  K   t        | |       d {   }	 d|_        t        j                         |_        | j                          y 7 6# t        $ r=}| j                          t        ddt        |      it        j                  d      d }~ww xY ww)NTr	   r   zError deleting region.r!   )r3   
is_deletedr   utcnowr)   rQ   r-   rT   r   r.   r   rM   r/   s       r2   delete_regionrb      s     #B	22F"
 $OO-
		+ 3,  

A'33,	
 	

s2   BA	B0A B	B8BBBsub_region_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Sub-region not foundr!   z Error fetching sub-region by ID.)r&   r
   r'   r(   r)   r*   r+   r   r   r,   r-   r.   r   rc   
sub_regionr1   s       r2   get_sub_region_by_idrg      s     
XXi(//LLM)  $$T*
 %' 	 ""$:;"55.	   
A'116	
 	

r4   c           
        K   	 |dz
  |z  }| j                  t              j                  t        j                  j	                  d             }|r|j
                  r| j                  t              j                  t        j                  |j
                  k(        j                         }|st        dddit        j                  d      |j                  t        j
                  |j                  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)Nr9   r
   r   r    r!   r:   Tr;   get_all_sub_regionszFailed to fetch sub-regions.)r&   r
   r'   r)   r*   r   r	   r(   r+   r   r   r,   r   r   rC   r.   r   rD   r   
SUB_REGIONrF   r-   rG   )	r   r5   r6   r7   r>   r&   r0   rI   r1   s	            r2   ri   ri      sN    
(h&#**9+?+?+C+CD+IJw((XXf%,,VYY':K:K-KLRRTF"&&(:; & 9 9.	  LL!4!4		!ABE #%X2245|7N7NOP
	 !!## 
(A'==2	
 	

s)   FEE F	F
(FF

Fc                   K   	 t        | |j                         d {   }t        |j                  |j                        }| j                  |       | j                          | j                  |       |S 7 Y# t        $ r=}| j                          t        ddt        |      it        j                  d      d }~ww xY ww)N)namer   r
   r   zError creating sub-region.r!   )r3   r   r
   rl   r(   rS   rQ   rR   r-   rT   r   r.   r   rM   )r   r7   r0   rf   r1   s        r2   create_sub_regionrm     s     
'G,=,=>>yy


 	z
		


: ?  

A'330	
 	

s9   CA9 A7AA9 6C7A9 9	B?8B::B??Cc                   K   t        | |       d {   }	 |j                  d      }d|v rt        | |d          d {   }|j                         D ]  \  }}t	        |||        | j                          | j                  |       |S 7 z7 N# t        $ r=}| j                          t        ddt        |      it        j                  d      d }~ww xY ww)NTrZ   r   r
   r   zError updating sub-region.r!   )rg   rN   r3   rO   rP   rQ   rR   r-   rT   r   r.   r   rM   )	r   rc   r7   rf   r\   r0   rV   rW   r1   s	            r2   update_sub_regionro     s     +B>>J
lll6 +%+BK0HIIF'--/ 	2LE5
E51	2 			


:' ? J  

A'330	
 	

r^   c                 J  K   t        | |       d {   }	 d|_        t        j                  t        j
                        |_        | j                          y 7 E# t        $ r=}| j                          t        ddt        |      it        j                  d      d }~ww xY ww)NTr
   r   zError deleting sub-region.r!   )rg   r`   r   nowr   utcr)   rQ   r-   rT   r   r.   r   rM   re   s       r2   delete_sub_regionrs   9  s     +B>>J
 $
 (X\\ :

		 ?  

A'330	
 	

s2   B#AB#?A B#	B #8BB  B#)r9   
   N)0r   r   sqlalchemy.ormr   fastapir   r   src.core.exceptionsr   src.apps.base.models.regionsr	   r
   src.core.configr   src.utils.constantsr   src.apps.base.schemas.regionr   r   r   r   r   r   r   r   src.apps.base.services.countryr   src.utils.paginationr   src.apps.base.models.countryr   uuidr   sqlalchemy.excr   typingr   intr3   rA   rX   r]   rb   rg   ri   rm   ro   rs   rK       r2   <module>r      s   ' " ) , : $ ,	 	 	 = / 0  ) 

w 
3 
6 
.
g 
S 
 
S[\nSo 
B1
G 1
.@ 1
V 1
h
G 
 
>P 
U[ 
0
G 
 
 
H
7 
3 
9 
2 /3	%
%

%
 %
 +,	%
P
 
2G 
.
 
 
F[ 
`i 
>
 
 
 
r   