Files
WFL/repositories/match_view_repository.py

96 lines
2.8 KiB
Python

from db import get_connection
def get_match_lineups_grouped(match_id: int, home_team_id: int, away_team_id: int):
query = """
SELECT
ml.team_id,
ml.player_id,
ml.player_name,
ml.number,
ml.position,
ml.lineup_type,
ml.is_captain,
p.last_name,
p.first_name,
p.position as pos
FROM match_lineups ml
LEFT JOIN players p ON p.id = ml.player_id
WHERE ml.match_id = %s;
"""
conn = get_connection()
try:
with conn.cursor() as cur:
cur.execute(query, (match_id,))
rows = cur.fetchall()
finally:
conn.close()
grouped = {
"home_starting": [],
"away_starting": [],
"home_bench": [],
"away_bench": [],
}
for row in rows:
(
team_id,
player_id,
player_name,
number,
position,
lineup_type,
is_captain,
last_name,
first_name,
pos,
) = row
item = {
"player_id": player_id,
"number": number or "",
"last_name": last_name or "",
"first_name": first_name or "",
"player_name": player_name or "",
"position": position or "",
"is_captain": bool(is_captain),
"pos": pos,
}
if team_id == home_team_id and lineup_type == "starting":
grouped["home_starting"].append(item)
elif team_id == away_team_id and lineup_type == "starting":
grouped["away_starting"].append(item)
elif team_id == home_team_id and lineup_type == "bench":
grouped["home_bench"].append(item)
elif team_id == away_team_id and lineup_type == "bench":
grouped["away_bench"].append(item)
def is_goalkeeper(position: str) -> int:
pos = (position or "").strip().lower()
goalkeeper_values = {"вр.", "вр", "вратарь", "goalkeeper", "gk"}
return 0 if pos in goalkeeper_values else 1
def player_number_value(number: str) -> int:
number = str(number or "").strip()
return int(number) if number.isdigit() else 999
def sort_players(players: list[dict]) -> list[dict]:
return sorted(
players,
key=lambda p: (
is_goalkeeper(p.get("position", "")),
player_number_value(p.get("number", "")),
p.get("last_name", "") or p.get("player_name", ""),
p.get("first_name", ""),
),
)
grouped["home_starting"] = sort_players(grouped["home_starting"])
grouped["away_starting"] = sort_players(grouped["away_starting"])
grouped["home_bench"] = sort_players(grouped["home_bench"])
grouped["away_bench"] = sort_players(grouped["away_bench"])
return grouped