60 lines
2.0 KiB
Python
60 lines
2.0 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,
|
|
COALESCE(p.photo_enabled, FALSE) AS photo_enabled
|
|
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]),
|
|
"photo_enabled": bool(row[7]),
|
|
}
|
|
for row in rows
|
|
]
|
|
finally:
|
|
conn.close() |