Files
iddaai-be/scripts/find_surprise_matches.py
T
fahricansecer 2f0b85a0c7
Deploy Iddaai Backend / build-and-deploy (push) Failing after 18s
first (part 2: other directories)
2026-04-16 15:11:25 +03:00

89 lines
3.8 KiB
Python

#!/usr/bin/env python3
"""Find surprise matches from database."""
import psycopg2
from psycopg2.extras import RealDictCursor
import os
from datetime import datetime
# Use the same DSN as the main project
conn = psycopg2.connect(os.environ.get('DATABASE_URL', 'postgresql://suggestbet:SuGGesT2026SecuRe@localhost:15432/boilerplate_db'))
cur = conn.cursor(cursor_factory=RealDictCursor)
# Bayern Munich vs Augsburg - 24 Jan 2026
cur.execute("""
SELECT m.id, m.home_team_id, m.away_team_id, m.score_home, m.score_away,
m.ht_score_home, m.ht_score_away, m.mst_utc,
th.name as home_name, ta.name as away_name, l.name as league
FROM matches m
JOIN teams th ON m.home_team_id = th.id
JOIN teams ta ON m.away_team_id = ta.id
JOIN leagues l ON m.league_id = l.id
WHERE th.name ILIKE '%bayern%' AND ta.name ILIKE '%augsburg%'
AND m.mst_utc >= EXTRACT(EPOCH FROM '2026-01-20'::timestamp) * 1000
AND m.mst_utc <= EXTRACT(EPOCH FROM '2026-01-30'::timestamp) * 1000
ORDER BY m.mst_utc DESC
LIMIT 5
""")
print('=== Bayern vs Augsburg (24 Jan 2026) ===')
for row in cur.fetchall():
match_date = datetime.fromtimestamp(row['mst_utc'] / 1000)
print(f"ID: {row['id']}")
print(f"Match: {row['home_name']} vs {row['away_name']}")
print(f"Score: {row['score_home']}-{row['score_away']} (HT: {row['ht_score_home']}-{row['ht_score_away']})")
print(f"Date: {match_date}")
print(f"League: {row['league']}")
print()
# Benfica vs Real Madrid - 18 Feb 2026
cur.execute("""
SELECT m.id, m.home_team_id, m.away_team_id, m.score_home, m.score_away,
m.ht_score_home, m.ht_score_away, m.mst_utc,
th.name as home_name, ta.name as away_name, l.name as league
FROM matches m
JOIN teams th ON m.home_team_id = th.id
JOIN teams ta ON m.away_team_id = ta.id
JOIN leagues l ON m.league_id = l.id
WHERE th.name ILIKE '%benfica%' AND ta.name ILIKE '%real madrid%'
AND m.mst_utc >= EXTRACT(EPOCH FROM '2026-02-15'::timestamp) * 1000
AND m.mst_utc <= EXTRACT(EPOCH FROM '2026-02-20'::timestamp) * 1000
ORDER BY m.mst_utc DESC
LIMIT 5
""")
print('=== Benfica vs Real Madrid (18 Feb 2026) ===')
for row in cur.fetchall():
match_date = datetime.fromtimestamp(row['mst_utc'] / 1000)
print(f"ID: {row['id']}")
print(f"Match: {row['home_name']} vs {row['away_name']}")
print(f"Score: {row['score_home']}-{row['score_away']} (HT: {row['ht_score_home']}-{row['ht_score_away']})")
print(f"Date: {match_date}")
print(f"League: {row['league']}")
print()
# Find all 1/2 and 2/1 HT/FT results in recent matches
cur.execute("""
SELECT m.id, m.score_home, m.score_away, m.ht_score_home, m.ht_score_away,
th.name as home_name, ta.name as away_name, l.name as league, m.mst_utc
FROM matches m
JOIN teams th ON m.home_team_id = th.id
JOIN teams ta ON m.away_team_id = ta.id
JOIN leagues l ON m.league_id = l.id
WHERE m.mst_utc >= EXTRACT(EPOCH FROM '2026-01-01'::timestamp) * 1000
AND m.score_home IS NOT NULL AND m.score_away IS NOT NULL
AND m.ht_score_home IS NOT NULL AND m.ht_score_away IS NOT NULL
AND (
(m.ht_score_home > m.ht_score_away AND m.score_home < m.score_away) -- 1/2 reversal
OR (m.ht_score_home < m.ht_score_away AND m.score_home > m.score_away) -- 2/1 reversal
)
ORDER BY m.mst_utc DESC
LIMIT 30
""")
print('=== Recent HT/FT Reversals (1/2 or 2/1) ===')
for row in cur.fetchall():
match_date = datetime.fromtimestamp(row['mst_utc'] / 1000)
ht_result = "1" if row['ht_score_home'] > row['ht_score_away'] else ("2" if row['ht_score_home'] < row['ht_score_away'] else "X")
ft_result = "1" if row['score_home'] > row['score_away'] else ("2" if row['score_home'] < row['score_away'] else "X")
print(f"{row['home_name']} vs {row['away_name']} | HT: {row['ht_score_home']}-{row['ht_score_away']} FT: {row['score_home']}-{row['score_away']} | {ht_result}/{ft_result} | {match_date}")
conn.close()