71 lines
1.8 KiB
Python
71 lines
1.8 KiB
Python
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()
|