from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from app.models.unc_thread import UncSeries, UncThread async def get(db: AsyncSession, unc_thread_id: int) -> UncThread | None: return await db.get(UncThread, unc_thread_id) async def get_by_values( db: AsyncSession, *, diameter_fraction: str, tpi: int, series: UncSeries, depth_in: float | None, ) -> UncThread | None: depth_clause = ( UncThread.depth_in.is_(None) if depth_in is None else UncThread.depth_in == depth_in ) result = await db.execute( select(UncThread).where( UncThread.diameter_fraction == diameter_fraction, UncThread.tpi == tpi, UncThread.series == series, depth_clause, ) ) return result.scalar_one_or_none() async def list_all( db: AsyncSession, skip: int = 0, limit: int = 100 ) -> list[UncThread]: result = await db.execute( select(UncThread).order_by(UncThread.id).offset(skip).limit(limit) ) return list(result.scalars().all()) async def create( db: AsyncSession, *, diameter_fraction: str, tpi: int, series: UncSeries, depth_in: float | None = None, ) -> UncThread: thread = UncThread( diameter_fraction=diameter_fraction, tpi=tpi, series=series, depth_in=depth_in, ) db.add(thread) await db.commit() await db.refresh(thread) return thread async def update(db: AsyncSession, thread: UncThread, data: dict) -> UncThread: for field, value in data.items(): setattr(thread, field, value) await db.commit() await db.refresh(thread) return thread async def delete(db: AsyncSession, thread: UncThread) -> None: await db.delete(thread) await db.commit()