o
    )]i                     @   s   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 dZdS )zMatch repository    )OptionalList)datetime)Session)and_or_)MatchMatchStatus)Team)League)Featurec                   @   s  e Zd ZdZdefddZdedee fddZ	d	e
dee fd
dZ				d dee dee dee dedee f
ddZ				d!dee dee dee dedee f
ddZdedefddZdedefddZ			d"dee dee dee dee fddZdS )#MatchRepositoryzRepository for match operationsdbc                 C   s
   || _ d S )N)r   )selfr    r   ,app/core/db/repositories/match_repository.py__init__   s   
zMatchRepository.__init__match_idreturnc                 C      | j ttj|k S )zGet match by ID)r   queryr   filteridfirst)r   r   r   r   r   	get_by_id      zMatchRepository.get_by_id	source_idc                 C   r   )zGet match by source ID)r   r   r   r   r   r   )r   r   r   r   r   get_by_source_id   r   z MatchRepository.get_by_source_idNd   	league_id	from_dateto_datelimitc                 C   sn   | j ttjtjjk}|r|tj|k}|r"|tj	|k}|r,|tj	|k}|
tj	| S )zGet upcoming matches)r   r   r   r   statusr	   	SCHEDULEDvaluer   
match_dateorder_byr"   allr   r   r    r!   r"   r   r   r   r   get_upcoming   s   zMatchRepository.get_upcoming  c                 C   sr   | j ttjtjjk}|r|tj|k}|r"|tj	|k}|r,|tj	|k}|
tj	 | S )zGet finished matches)r   r   r   r   r#   r	   FINISHEDr%   r   r&   r'   descr"   r(   r)   r   r   r   get_finished1   s   zMatchRepository.get_finishedmatchc                 C   s&   | j | | j   | j | |S )zCreate a new match)r   addcommitrefreshr   r/   r   r   r   createH   s   
zMatchRepository.createc                 C   s$   t  |_| j  | j| |S )zUpdate a match)r   utcnow
updated_atr   r1   r2   r3   r   r   r   updateO   s   

zMatchRepository.updatemin_datemax_datec                 C   s   | j tttjtjktjdktj	
dtj
d}|r(|tj|k}|r2|tj|k}|r<|tj|k}|t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   r8   r9   r   r   r   r   get_matches_for_trainingV   s   



z(MatchRepository.get_matches_for_training)NNNr   )NNNr+   )NNN)__name__
__module____qualname____doc__r   r   intr   r   r   strr   r   r   r*   r.   r4   r7   r?   r   r   r   r   r      sb    

	r   N)rC   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   r   r   r   r   <module>   s    