
    (h                     |   d dl 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
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	lmZ d d
l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$m%Z% d dl&m'Z' d dl(m)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dedede+de+de/dee0   de,fdZ1dee0   de,fdZ2y)     )datetimetimezone)DictListOptionalTuple)UUID)HTTPExceptionstatus)and_funcor_)IntegrityError)Sessionaliased)	nullslast)Country)	RollupLog)RollupLogCreateRollupLogUpdateRollupLogResponseRollupLogFilterSchema)
RollupType)settings)APIException)API_PREFIXES)QueryPaginatordbpayloadreturnc           	        K   	 t        di |j                  d      }| j                  |       | j                          | j	                  |       |S # t
        $ r-}t        dt        j                  dt        |      id      d}~ww xY ww)	z8
    Create a new rollup log entry in the database.
    Texclude_unsetcreate_rollup_log	exceptionzFailed to create rollup logmodulestatus_codeerrormessageN )
r   
model_dumpaddcommitrefresh	Exceptionr   r   HTTP_500_INTERNAL_SERVER_ERRORstr)r   r   
rollup_loges       ]/var/www/html/wine-match-dev/backend/winematch-backend/src/apps/rollup/services/rollup_log.pyr$   r$      s     
H!3!3$!3!GH

z
		


: 
&==A'1	
 	

s)   BAA B	B	(BB		Brollup_log_idc           	        K   	 | j                  t              j                  t        j                  |k(  t        j                  j                  d            j                         }|st        dt        j                  d|id      |S # t        $ r-}t        dt        j                  dt        |      id      d}~ww xY ww)z0
    Retrieve a rollup log entry by its ID.
    Nget_rollup_log_by_idr6   zRollup log not foundr&   r%   zFailed to retrieve rollup log)queryr   filterid
deleted_atis_firstr   r   HTTP_404_NOT_FOUNDr0   r1   r2   )r   r6   r3   r4   s       r5   r8   r8   /   s     
XXi(//LLM)  $$T* eg 	 -"55&6.	   
)==A'3	
 	

s)   CBB C	B>(B99B>>Cc           	      j  K   	 t        | |       d{   }|j                  d      j                         D ]  \  }}|dk(  s|t        |||        | j	                          | j                  |       |S 7 d# t        $ r-}t        dt        j                  dt        |      id      d}~ww xY ww)	z>
    Update an existing rollup log entry in the database.
    NTr"   r*   update_rollup_logr%   zFailed to update rollup logr&   )r8   r,   itemssetattrr.   r/   r0   r   r   r1   r2   )r   r6   r   r3   keyvaluer4   s          r5   rA   rA   K   s     
/MBB
!,,4,@FFH 	0JCi5#4
C/	0 			


: C  
&==A'1	
 	

s>   B3A: A81A: 1A: 7B38A: :	B0(B++B00B3Npageper_page	paginatedsort_byc           
        K   	 |dz
  |z  }| j                  t              j                  t        j                  j	                  d            }|j
                  r=|j                  t        j
                  t        |j
                     j                  k(        }t        ||t               d{   }|r_t        |t        dj                  t        t        j                               t        j                   g      ||d      }|j#                         S |j%                         D 	cg c]  }	t        j&                  |	       c}	S 7 c c}	w # t(        $ r-}
t+        ddt        |
      it,        j.                  d	      d}
~
ww xY ww)
z:
    Retrieve all rollup log entries with pagination.
       N T)r9   schemaurloffsetlimituse_ormget_all_rollup_logsr%   zError retrieving rollup logs.r'   r)   r(   r*   )r9   r   r:   r<   r=   rollup_typer   rE   apply_sorting_to_queryr   r   joinr2   r   api_base_urlr   ROLLUPpaginateallmodel_validater0   r   r   r1   )r   r   rF   rG   rH   rI   rO   r9   	paginatorrollupr4   s              r5   rR   rR   d   sP    
(h&#**  $$T* LL!6!6*WEXEX:Y:_:_!_`E,UGYGG&$5277CH]H]H_D`bnbubuCv;w  AG  OW  aeI %%''GLyy{SV!008SS H T 
(A'==3	
 	

sZ   FB&E *E+A$E FE "E>E  FE E 	E>(E99E>>Fc                   K   g }|r|D ]  }	 |j                  dd      }|dv rHt        ||      }|j                  d      r|j                         }|j	                  t        |             n!t        dd| dt        j                  d       |r | j                  | } | S # t        $ r" t        dd| dt        j                  d      w xY ww)	a  
    Apply sorting to a query based on the provided sort_by list.

    Args:
        query: The SQLAlchemy query object.
        sort_by: List of sorting criteria.
        model: The SQLAlchemy model to apply sorting on.

    Returns:
        The query with sorting applied.
    -rL   )r;   r*   r   
date_startdate_end
created_at
updated_atrU   z&Cannot sort with unidentified column ''z Error applying sorting to query.rS   )replacegetattr
startswithdescappendr   r   r   HTTP_422_UNPROCESSABLE_ENTITYAttributeErrororder_by)r9   rI   model
sort_queryscol
sort_orders          r5   rU   rU      s      J 	AiiR(   ")!4J||C(%/__%6
%%i
&;<&7 FqcK$*$H$H B	  =#	B "ENNJ/EL " "3B1#QG & D D>	 s   
CA?B!C!+CC)NrK   
   TN)3r   r   typingr   r   r   r   uuidr	   fastapir
   r   
sqlalchemyr   r   r   sqlalchemy.excr   sqlalchemy.ormr   r   sqlalchemy.sql.expressionr   src.apps.base.models.countryr   src.apps.rollup.models.rollupr   src.apps.rollup.schemas.rollupr   r   r   r   src.utils.enumsr   src.core.configr   src.core.exceptionsr   src.utils.constantsr   src.utils.paginationr   r$   intanyr8   rA   boolr2   rR   rU   r+       r5   <module>r      s   ' . .  ) & & ) + / 0 3  ' $ , , /


 
*


 	
8


 
 	
6 &*"
"
""
 "
 	"

 "
 #Y"
 	"
J2c 2c 2r   