"""Load team config from teams table; no hardcoded team list.""" from typing import Optional from sqlmodel import Session, select from app.models import Team def get_team_by_name(session: Session, team_name: str) -> Optional[Team]: stmt = select(Team).where(Team.team_name == team_name) return session.exec(stmt).first() def get_team_by_id(session: Session, team_id: str) -> Optional[Team]: return session.get(Team, team_id) def get_all_teams(session: Session) -> list[Team]: stmt = select(Team) return list(session.exec(stmt).all()) def create_team( session: Session, *, team_id: str, team_name: str, team_domain: str, team_token: str, invite_link: str, ) -> Team: """Create a new team with explicitly provided team_id.""" team = Team( team_id=team_id.strip(), team_name=team_name.strip(), team_domain=team_domain.strip(), team_token=team_token.strip(), invite_link=invite_link.strip() or None, ) session.add(team) session.commit() session.refresh(team) return team def get_invite_link_for_team(session: Session, team_name: str) -> Optional[str]: """Return teams.invite_link for the given team_name, or None if not found or not set.""" team = get_team_by_name(session, team_name) if team is None: return None return team.invite_link _UNSET = object() def update_team( session: Session, team_id: str, *, team_name: str | None = _UNSET, team_domain: str | None = _UNSET, team_token: str | None = _UNSET, invite_link: str | None = _UNSET, ) -> Optional[Team]: """Update team fields; _UNSET means do not change. None for invite_link clears it. Returns updated team or None.""" team = get_team_by_id(session, team_id) if team is None: return None if team_name is not _UNSET: team.team_name = team_name if team_domain is not _UNSET: team.team_domain = team_domain if team_token is not _UNSET and team_token: team.team_token = team_token if invite_link is not _UNSET: team.invite_link = invite_link session.add(team) session.commit() session.refresh(team) return team def delete_team(session: Session, team_id: str) -> bool: """Delete a team by id. Returns True if deleted, False if not found.""" team = get_team_by_id(session, team_id) if team is None: return False session.delete(team) session.commit() return True