from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from core.models import Product from sqlalchemy.engine import Result from .schemas import ProductCreate, ProductUpdate, ProductUpdatePartial async def get_all_products(session: AsyncSession) -> list[Product]: stmt = select(Product).order_by(Product.id) result: Result = await session.execute(stmt) products = result.scalars().all() return list(products) async def get_products_by_id(session: AsyncSession, product_id: int) -> Product | None: return await session.get(Product, product_id) async def create_product(session: AsyncSession, product_in: ProductCreate) -> Product: new_product = Product(**product_in.model_dump()) session.add(new_product) await session.commit() await session.refresh(new_product) return new_product async def update_product( session: AsyncSession, product: Product, product_update: ProductUpdate | ProductUpdatePartial, partial: bool = False, ) -> Product: for name, value in product_update.model_dump(exclude_unset=partial).items(): setattr(product, name, value) await session.commit() return product async def delete_product(session: AsyncSession, product: Product) -> None: await session.delete(product) await session.commit()