
    iI                        d Z ddlZddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
 ddlZddlZddlmZmZmZmZmZ ddlmZmZmZmZ ddlmZmZmZmZmZmZ  ej>                  d	      Z d
 Z! G d d      Z" G d d      Z# G d d      Z$y)z6Database repositories for Publishing Integrity tables.    N)datetimetimezone)OptionalListDictAny   )DB_HOSTDB_PORTDB_NAMEDB_USERDB_PASS)ValidationStateAvailabilityStatusLineupStatusAuditAction)PropEligibilityAuditLogEntryRegressionFailureAvailabilityReportLineupConfirmationConflictDetailzpub-integrityc                  ^    t        j                  t        t        t        t
        t              S )N)hostportdbnameuserpassword)psycopg2connectr
   r   r   r   r        L/var/www/html/rainmaker/backend/scripts/publishing_integrity/repositories.pyget_connectionr$      s!    77w r"   c                       e Zd ZdZededefd       Zededee	ee
f      fd       Zededee	ee
f      fd       Zedd
ee   dedee	ee
f      fd       Zedededee   fd       Zy	)PropEligibilityRepoz#CRUD for pi_prop_eligibility table.eligreturnc                    | j                         }|j                  xs t        t        j                               }|j                  d||j                  |j                  |j                  |j                  |j                  |j                  |j                  j                  |j                  |j                  |j                   |j"                  |j$                  |j&                  |j(                  |j*                  rt-        j.                  |j*                        nd |j0                  f       |j3                         d   }|j5                          |S )Na  
            INSERT INTO pi_prop_eligibility
                (id, run_id, game_id, player_id, player_name, team_id, league,
                 validation_state, market_presence_flag,
                 roster_verified_at, availability_verified_at, lineup_verified_at,
                 suppress_reason, suppress_reason_human, winning_source,
                 conflict_payload, publish_allowed)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
            ON CONFLICT (game_id, player_id) DO UPDATE SET
                run_id = EXCLUDED.run_id,
                validation_state = EXCLUDED.validation_state,
                market_presence_flag = EXCLUDED.market_presence_flag,
                roster_verified_at = EXCLUDED.roster_verified_at,
                availability_verified_at = EXCLUDED.availability_verified_at,
                lineup_verified_at = EXCLUDED.lineup_verified_at,
                suppress_reason = EXCLUDED.suppress_reason,
                suppress_reason_human = EXCLUDED.suppress_reason_human,
                winning_source = EXCLUDED.winning_source,
                conflict_payload = EXCLUDED.conflict_payload,
                publish_allowed = EXCLUDED.publish_allowed,
                updated_at = NOW()
            RETURNING id
        r   )cursoridstruuiduuid4executerun_idgame_id	player_idplayer_nameteam_idleaguevalidation_statevaluemarket_presence_flagroster_verified_atavailability_verified_atlineup_verified_atsuppress_reasonsuppress_reason_humanwinning_sourceconflict_payloadjsondumpspublish_allowedfetchoneclose)connr'   curelig_id	result_ids        r#   upsertzPropEligibilityRepo.upsert    s    kkm''.S. . T[[$,,dllDKK!!'')B)B##T%B%B##  $"<"<151F1FDJJt,,-D  

- 	B LLN1%			r"   r1   c                     | j                  t        j                  j                        }|j	                  d|f       |j                         }|j                          |S )Ncursor_factoryz_
            SELECT * FROM pi_prop_eligibility WHERE game_id = %s ORDER BY player_name
        r*   r   extrasRealDictCursorr/   fetchallrD   )rE   r1   rF   rowss       r#   get_by_gamezPropEligibilityRepo.get_by_gameI   sM    kk)G)GkH Z	 ||~		r"   r2   c                     | j                  t        j                  j                        }|j	                  d|f       |j                         }|j                          |S )NrK   ze
            SELECT * FROM pi_prop_eligibility WHERE player_id = %s ORDER BY created_at DESC
        rM   )rE   r2   rF   rQ   s       r#   get_by_playerz!PropEligibilityRepo.get_by_playerS   sM    kk)G)GkH \	 ||~		r"   Nr5   limitc                     | j                  t        j                  j                        }|r|j	                  d||f       n|j	                  d|f       |j                         }|j                          |S )NrK   z
                SELECT * FROM pi_prop_eligibility
                WHERE publish_allowed = false AND league = %s
                ORDER BY updated_at DESC LIMIT %s
            z
                SELECT * FROM pi_prop_eligibility
                WHERE publish_allowed = false
                ORDER BY updated_at DESC LIMIT %s
            rM   )rE   r5   rU   rF   rQ   s        r#   get_suppressionsz$PropEligibilityRepo.get_suppressions]   sn    kk)G)GkHKK  %	" KK  	
 ||~		r"   c                     | j                         }|j                  d||f       |j                         }|j                          |r|d   S d S )Nzx
            SELECT validation_state FROM pi_prop_eligibility
            WHERE game_id = %s AND player_id = %s
        r   )r*   r/   rC   rD   )rE   r1   r2   rF   rows        r#   get_prior_statez#PropEligibilityRepo.get_prior_statep   sO    kkm  y!	# lln		s1v&$&r"   )Nd   )__name__
__module____qualname____doc__staticmethodr   r,   rI   r   r   r   rR   rT   r   intrW   rZ   r!   r"   r#   r&   r&      s    -&? &s & &P 3 4S#X+?   s tDcN/C   x} C RVW[\_ad\dWeRf  $ 's 's 'x} ' 'r"   r&   c            	       R    e Zd Zededefd       Zeddedee	ee
f      fd       Zy)AuditLogRepoentryr(   c                    | j                         }t        t        j                               }|j	                  d||j
                  |j                  |j                  |j                  |j                  |j                  |j                  j                  |j                  j                  |j                  |j                  |j                   |j"                  rt%        j&                  |j"                        nd |j(                  |j*                  xs# t-        j.                  t0        j2                        f       |j5                          |S )Nar  
            INSERT INTO pi_publish_audit_log
                (id, run_id, game_id, player_id, player_name, team_id, league,
                 action, validation_state, suppress_reason, suppress_reason_human,
                 winning_source, conflict_payload, prior_state, acted_at)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
        )r*   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   actionr7   r6   r<   r=   r>   r?   r@   rA   prior_stateacted_atr   nowr   utcrD   )rE   rd   rF   entry_ids       r#   insertzAuditLogRepo.insert}   s    kkmtzz|$  ellEMM5??u}}ellLL 6 6 < <!!5#>#>  272H2HDJJu--.dNN8hll8<<8	
	  			r"   rU   c                     | j                  t        j                  j                        }|j	                  d|f       |j                         }|j                          |S )NrK   zX
            SELECT * FROM pi_publish_audit_log ORDER BY acted_at DESC LIMIT %s
        rM   )rE   rU   rF   rQ   s       r#   
get_recentzAuditLogRepo.get_recent   sM    kk)G)GkH X	 ||~		r"   N)   )r\   r]   r^   r`   r   r,   rl   ra   r   r   r   rn   r!   r"   r#   rc   rc   |   sQ    M c  ,  d4S>.B  r"   rc   c                   P    e Zd Zededefd       Zededeeee	f      fd       Z
y)RegressionRepofailurer(   c                    | j                         }t        t        j                               }|j	                  d||j
                  |j                  |j                  |j                  |j                  |j                  |j                  |j                  rt        j                  |j                        nd f	       |j                          |S )Nz
            INSERT INTO pi_regression_failures
                (id, run_id, test_name, league, entity_type, entity_id,
                 severity, failure_reason, failure_payload)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
        )r*   r,   r-   r.   r/   r0   	test_namer5   entity_type	entity_idseverityfailure_reasonfailure_payloadr@   rA   rD   )rE   rr   rF   fail_ids       r#   rl   zRegressionRepo.insert   s    kkmdjjl#  W^^W%6%6!2!2G4D4D""3:3J3JDJJw../PT	

	 			r"   r0   c                     | j                  t        j                  j                        }|j	                  d|f       |j                         }|j                          |S )NrK   z`
            SELECT * FROM pi_regression_failures WHERE run_id = %s ORDER BY created_at
        rM   )rE   r0   rF   rQ   s       r#   
get_by_runzRegressionRepo.get_by_run   sM    kk)G)GkH Y	 ||~		r"   N)r\   r]   r^   r`   r   r,   rl   r   r   r   r|   r!   r"   r#   rq   rq      sR    / C  "  d38n)=  r"   rq   )%r_   r@   r-   loggingr   r   typingr   r   r   r   r   psycopg2.extrasconfigr
   r   r   r   r   enumsr   r   r   r   modelsr   r   r   r   r   r   	getLoggerlogr$   r&   rc   rq   r!   r"   r#   <module>r      sq    <    ' , ,   ? ? Q Q 
 g(\' \'~   F r"   