
    "\i]
                     \    d 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
  G d d      Zy	)
zPrediction repository    )OptionalList)datetime)Session)
Prediction)Matchc            
           e Zd ZdZdefdZddedee   dee	   fdZ
ddedee   dee	   fd	Z	 	 	 dd
ee   dee   dedee	   fdZde	de	fdZdedede	fdZy)PredictionRepositoryz$Repository for prediction operationsdbc                     || _         y N)r   )selfr   s     6/app/app/core/db/repositories/prediction_repository.py__init__zPredictionRepository.__init__   s	        Nmatch_idmodel_idreturnc                     | j                   j                  t              j                  t        j                  |k(        }|r"|j                  t        j
                  |k(        }|j                         S )zGet predictions for a match)r   queryr   filterr   r   all)r   r   r   r   s       r   get_by_match_idz$PredictionRepository.get_by_match_id   sR    j)001D1D1PQLL!4!4!@AEyy{r   c                 >   | j                   j                  t              j                  t        j                  |k(        }|"|j                  t        j
                  |k(        }|j                  t        j                  j                               j                         S )zDGet latest prediction for a match (optionally for a specific model).)
r   r   r   r   r   r   order_bycalculated_atdescfirst)r   r   r   qs       r   get_latest_for_matchz)PredictionRepository.get_latest_for_match   sp    GGMM*%,,Z-@-@H-LM,,89Azz*22779:@@BBr   	league_idlimitc                    | j                   j                  t              j                  t              j                  t        j                  dk(        }|r"|j                  t        j                  |k(        }|r"|j                  t        j                  |k(        }|j                  t        j                        j                  |      j                         S )zGet upcoming predictions	scheduled)r   r   r   joinr   r   statusr!   r   r   
match_dater"   r   )r   r!   r   r"   r   s        r   get_upcomingz!PredictionRepository.get_upcoming   s     j)..u5<<LLK'
 LLI!=>ELL!4!4!@AE~~e../55e<@@BBr   
predictionc                     | j                   j                  |       | j                   j                          | j                   j                  |       |S )zCreate a new prediction)r   addcommitrefresh)r   r)   s     r   createzPredictionRepository.create0   s6    J
#r   c                    | j                   j                  t              j                  t        j                  |k(  t        j
                  |k(        j                         }|r?|j                         D ]  \  }}t        |||        t        j                         |_        n)t        d||d|}| j                   j                  |       | j                   j                          | j                   j                  |       |S )zUpdate or create prediction)r   r    )r   r   r   r   r   r   r   itemssetattrr   utcnowr   r+   r,   r-   )r   r   r   kwargsr)   keyvalues          r   update_or_createz%PredictionRepository.update_or_create7   s    WW]]:.558+8+
 %' 	
 $lln
U
C/ -'/'8J$#SXSFSJGGKK
#
#r   r   )NNd   )__name__
__module____qualname____doc__r   r   intr   r   r   r   r    r(   r.   r7   r0   r   r   r
   r
   	   s    .7  x} PTU_P` CS CHSM CU]^hUi C $("&	CC=C 3-C 	C
 
j	C& 
   * r   r
   N)r<   typingr   r   r   sqlalchemy.ormr   app.core.db.models.predictionr   app.core.db.models.matchr   r
   r0   r   r   <module>rB      s!     !  " 4 *? ?r   