from typing import List, Optional, Dict from sqlalchemy.orm import Session from app.models.tcgplayer_inventory import TCGPlayerInventory from app.services.base_service import BaseService class InventoryService(BaseService[TCGPlayerInventory]): def __init__(self): super().__init__(TCGPlayerInventory) def create(self, db: Session, obj_in: Dict) -> TCGPlayerInventory: """ Create a new inventory item in the database. Args: db: Database session obj_in: Dictionary containing inventory data Returns: Inventory: The created inventory object """ return super().create(db, obj_in) def update(self, db: Session, db_obj: TCGPlayerInventory, obj_in: Dict) -> TCGPlayerInventory: """ Update an existing inventory item in the database. Args: db: Database session db_obj: The inventory object to update obj_in: Dictionary containing updated inventory data Returns: Inventory: The updated inventory object """ return super().update(db, db_obj, obj_in) def get_by_tcgplayer_id(self, db: Session, tcgplayer_id: str) -> Optional[TCGPlayerInventory]: """ Get an inventory item by its TCGPlayer ID. Args: db: Database session tcgplayer_id: The TCGPlayer ID to find Returns: Optional[TCGPlayerInventory]: The inventory item if found, None otherwise """ return db.query(self.model).filter(self.model.tcgplayer_id == tcgplayer_id).first() def get_by_set(self, db: Session, set_name: str, skip: int = 0, limit: int = 100) -> List[TCGPlayerInventory]: """ Get all inventory items from a specific set. Args: db: Database session set_name: The name of the set to filter by skip: Number of records to skip (for pagination) limit: Maximum number of records to return Returns: List[TCGPlayerInventory]: List of inventory items from the specified set """ return db.query(self.model).filter(self.model.set_name == set_name).offset(skip).limit(limit).all()