
    )]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m	Z	 ddl
mZmZ ddlmZ ddlmZ dd	lmZ  G d
 d      Zy)zMatch repository    )OptionalList)datetime)Session)and_or_)MatchMatchStatus)Team)League)Featurec                      e Zd ZdZdefdZdedee   fdZ	de
dee   fdZ	 	 	 	 dd
ee   dee   dee   dedee   f
dZ	 	 	 	 dd
ee   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fdZ	 	 	 dd
ee   dee   dee   dee   fdZy	)MatchRepositoryzRepository for match operationsdbc                     || _         y )N)r   )selfr   s     1/app/app/core/db/repositories/match_repository.py__init__zMatchRepository.__init__   s	        match_idreturnc                     | j                   j                  t              j                  t        j                  |k(        j                         S )zGet match by ID)r   queryr	   filteridfirst)r   r   s     r   	get_by_idzMatchRepository.get_by_id   s2    ww}}U#**588x+?@FFHHr   	source_idc                     | j                   j                  t              j                  t        j                  |k(        j                         S )zGet match by source ID)r   r   r	   r   r   r   )r   r   s     r   get_by_source_idz MatchRepository.get_by_source_id   s2    ww}}U#**5??i+GHNNPPr   N	league_id	from_dateto_datelimitc                     | j                   j                  t              j                  t        j                  t
        j                  j                  k(        }|r"|j                  t        j                  |k(        }|r"|j                  t        j                  |k\        }|r"|j                  t        j                  |k        }|j                  t        j                        j                  |      j                         S )zGet upcoming matches)r   r   r	   r   statusr
   	SCHEDULEDvaluer!   
match_dateorder_byr$   allr   r!   r"   r#   r$   r   s         r   get_upcomingzMatchRepository.get_upcoming   s     e$++LLK11777
 LLI!=>ELL!1!1Y!>?ELL!1!1W!<=E~~e../55e<@@BBr   c                    | j                   j                  t              j                  t        j                  t
        j                  j                  k(        }|r"|j                  t        j                  |k(        }|r"|j                  t        j                  |k\        }|r"|j                  t        j                  |k        }|j                  t        j                  j                               j                  |      j                         S )zGet finished matches)r   r   r	   r   r&   r
   FINISHEDr(   r!   r)   r*   descr$   r+   r,   s         r   get_finishedzMatchRepository.get_finished1   s     e$++LLK00666
 LLI!=>ELL!1!1Y!>?ELL!1!1W!<=E~~e..3356<<UCGGIIr   matchc                     | j                   j                  |       | j                   j                          | j                   j                  |       |S )zCreate a new match)r   addcommitrefreshr   r2   s     r   createzMatchRepository.createH   s5    Er   c                     t        j                         |_        | j                  j	                          | j                  j                  |       |S )zUpdate a match)r   utcnow
updated_atr   r5   r6   r7   s     r   updatezMatchRepository.updateO   s4    #??,r   min_datemax_datec                    | j                   j                  t              j                  t        t        j
                  t        j                  k(        j                  t        j                  dk(  t        j                  j                  d      t        j                  j                  d            }|r"|j                  t        j                  |k(        }|r"|j                  t        j                  |k\        }|r"|j                  t        j                  |k        }|j                  t        j                        j                         S )z?Get finished matches for training (must have scores + features)finishedN)r   r   r	   joinr   r   r   r   r&   
home_scoreisnot
away_scorer!   r)   r*   r+   )r   r!   r=   r>   r   s        r   get_matches_for_trainingz(MatchRepository.get_matches_for_trainingV   s     GGMM% T'7++uxx78V
*  &&t,  &&t, 	 LLI!=>ELL!1!1X!=>ELL!1!1X!=>E~~e../3355r   )NNNd   )NNNi  )NNN)__name__
__module____qualname____doc__r   r   intr   r	   r   strr    r   r   r-   r1   r8   r<   rE    r   r   r   r      si   )7 I# I(5/ IQ# Q(5/ Q $((,&*CC=C H%C (#	C
 C 
eC2 $((,&*JC=J H%J (#	J
 J 
eJ.E e E e  $('+'+	6C=6 8$6 8$	6
 
e6r   r   N)rJ   typingr   r   r   sqlalchemy.ormr   
sqlalchemyr   r   app.core.db.models.matchr	   r
   app.core.db.models.teamr   app.core.db.models.sportr   app.core.db.models.featurer   r   rM   r   r   <module>rU      s,     !  "   7 ( + .d6 d6r   