from api.db.connection import SessionLocal from api.models.user import User from sqlalchemy import select import uuid async def create_user(telegram_id: str, name: str | None = None): async with SessionLocal() as session: # ensure no NULL in DB: replace None with empty string safe_name = name if name is not None else "" user = User(id=str(uuid.uuid4()), telegram_id=telegram_id, name=safe_name) session.add(user) await session.commit() await session.refresh(user) return user async def get_user(user_id: str): async with SessionLocal() as session: q = select(User).where(User.id == user_id) res = await session.execute(q) return res.scalars().first() async def get_user_by_telegram(telegram_id: str): async with SessionLocal() as session: q = select(User).where(User.telegram_id == telegram_id) res = await session.execute(q) return res.scalars().first() async def update_user(user_id: str, name: str | None = None): async with SessionLocal() as session: q = select(User).where(User.id == user_id) res = await session.execute(q) user = res.scalars().first() if not user: return None if name is not None: # replace None handled by caller; here update only when provided user.name = name await session.commit() return user async def delete_user(user_id: str): async with SessionLocal() as session: q = select(User).where(User.id == user_id) res = await session.execute(q) user = res.scalars().first() if not user: return False await session.delete(user) await session.commit() return True async def list_users(): async with SessionLocal() as session: q = select(User) res = await session.execute(q) return res.scalars().all()