import uuid from typing import List, Optional from sqlalchemy.orm import Session from models.sale import Sale from schemas.sale import SaleCreate, SaleUpdate #some comment def get_all_sales(db: Session) -> List[Sale]: """ Retrieves all sales from the database. Args: db (Session): The database session. Returns: List[Sale]: A list of all sale objects. """ return db.query(Sale).all() def get_sale_by_id(db: Session, sale_id: uuid.UUID) -> Optional[Sale]: """ Retrieves a single sale by its ID. Args: db (Session): The database session. sale_id (UUID): The ID of the sale to retrieve. Returns: Optional[Sale]: The sale object if found, otherwise None. """ return db.query(Sale).filter(Sale.id == sale_id).first() def create_sale(db: Session, sale_data: SaleCreate) -> Sale: """ Creates a new sale in the database. Args: db (Session): The database session. sale_data (SaleCreate): The data for the sale to create. Returns: Sale: The newly created sale object. """ db_sale = Sale(**sale_data.dict()) db.add(db_sale) db.commit() db.refresh(db_sale) return db_sale def update_sale(db: Session, sale_id: uuid.UUID, sale_data: SaleUpdate) -> Optional[Sale]: """ Updates an existing sale in the database. Args: db (Session): The database session. sale_id (UUID): The ID of the sale to update. sale_data (SaleUpdate): The updated data for the sale. Returns: Optional[Sale]: The updated sale object if found, otherwise None. """ db_sale = db.query(Sale).filter(Sale.id == sale_id).first() if not db_sale: return None update_data = sale_data.dict(exclude_unset=True) for key, value in update_data.items(): setattr(db_sale, key, value) db.add(db_sale) db.commit() db.refresh(db_sale) return db_sale def delete_sale(db: Session, sale_id: uuid.UUID) -> bool: """ Deletes a sale from the database. Args: db (Session): The database session. sale_id (UUID): The ID of the sale to delete. Returns: bool: True if the sale was deleted, False otherwise. """ db_sale = db.query(Sale).filter(Sale.id == sale_id).first() if not db_sale: return False db.delete(db_sale) db.commit() return True