все остальные апдейты на Кубок России
This commit is contained in:
@@ -122,6 +122,82 @@ def get_coach_id_by_external_id(external_id: str) -> int | None:
|
||||
|
||||
|
||||
|
||||
|
||||
def _split_coach_name_for_autocreate(full_name: str) -> tuple[str, str]:
|
||||
parts = [p.strip() for p in str(full_name or "").replace("\xa0", " ").split() if p.strip()]
|
||||
if not parts:
|
||||
return "", ""
|
||||
if len(parts) == 1:
|
||||
return "", parts[0]
|
||||
first_name = parts[0]
|
||||
last_name = " ".join(parts[1:])
|
||||
return first_name, last_name
|
||||
|
||||
|
||||
def create_coach_from_lineup(
|
||||
team_id: int,
|
||||
external_id: str = "",
|
||||
full_name: str = "",
|
||||
role: str = "",
|
||||
) -> int | None:
|
||||
"""Создаёт минимальную карточку тренера из протокола матча."""
|
||||
full_name = str(full_name or "").strip()
|
||||
if not full_name:
|
||||
return None
|
||||
|
||||
first_name, last_name = _split_coach_name_for_autocreate(full_name)
|
||||
external_id = str(external_id or "").strip()
|
||||
role = str(role or "").strip()
|
||||
|
||||
query = """
|
||||
INSERT INTO coaches (
|
||||
external_id,
|
||||
team_id,
|
||||
player,
|
||||
lastname,
|
||||
name,
|
||||
amplua,
|
||||
is_active,
|
||||
created_at,
|
||||
updated_at
|
||||
)
|
||||
VALUES (NULLIF(%s, ''), %s, %s, %s, %s, %s, TRUE, NOW(), NOW())
|
||||
ON CONFLICT (external_id)
|
||||
DO UPDATE SET
|
||||
team_id = EXCLUDED.team_id,
|
||||
player = COALESCE(NULLIF(EXCLUDED.player, ''), coaches.player),
|
||||
lastname = COALESCE(NULLIF(EXCLUDED.lastname, ''), coaches.lastname),
|
||||
name = COALESCE(NULLIF(EXCLUDED.name, ''), coaches.name),
|
||||
amplua = COALESCE(NULLIF(EXCLUDED.amplua, ''), coaches.amplua),
|
||||
is_active = TRUE,
|
||||
updated_at = NOW()
|
||||
RETURNING id;
|
||||
"""
|
||||
|
||||
conn = get_connection()
|
||||
try:
|
||||
with conn.cursor() as cur:
|
||||
cur.execute(
|
||||
query,
|
||||
(
|
||||
external_id,
|
||||
team_id,
|
||||
full_name,
|
||||
last_name,
|
||||
first_name,
|
||||
role,
|
||||
),
|
||||
)
|
||||
row = cur.fetchone()
|
||||
conn.commit()
|
||||
return row[0] if row else None
|
||||
except Exception:
|
||||
conn.rollback()
|
||||
raise
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
|
||||
def search_coaches_for_admin(q: str = "") -> list[dict]:
|
||||
conn = get_connection()
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user