Files
WFL/repositories/team_squad_repository.py

58 lines
1.9 KiB
Python

from db import get_connection
def get_team_players_for_match_editor(
team_id: int,
match_id: int | None = None,
home_team_id: int | None = None,
away_team_id: int | None = None,
) -> list[dict]:
conn = get_connection()
try:
with conn.cursor() as cur:
cur.execute(
"""
SELECT
p.id AS player_id,
COALESCE(
p.full_name,
TRIM(COALESCE(p.last_name, '') || ' ' || COALESCE(p.first_name, ''))
) AS player_name,
COALESCE(p.last_name, '') AS last_name,
COALESCE(p.first_name, '') AS first_name,
COALESCE(p.number::text, '') AS number,
COALESCE(p.position, '') AS position,
FALSE AS is_captain
FROM players p
WHERE p.team_id = %s
ORDER BY
CASE
WHEN LOWER(COALESCE(p.position, '')) IN ('вр', 'вр.', 'gk', 'goalkeeper', 'вратарь') THEN 0
ELSE 1
END,
CASE
WHEN COALESCE(p.number::text, '') ~ '^[0-9]+$' THEN p.number::integer
ELSE 999
END,
COALESCE(p.last_name, ''),
COALESCE(p.first_name, ''),
p.id
""",
(team_id,),
)
rows = cur.fetchall()
return [
{
"player_id": row[0],
"player_name": row[1] or "",
"last_name": row[2] or "",
"first_name": row[3] or "",
"number": row[4] or "",
"position": row[5] or "",
"is_captain": bool(row[6]),
}
for row in rows
]
finally:
conn.close()