from typing import List, Optional from sqlalchemy.orm import Session from app.models.category import Category from app.schemas.category import CategoryCreate, CategoryUpdate def get_category(db: Session, category_id: int) -> Optional[Category]: return db.query(Category).filter(Category.id == category_id).first() def get_category_by_name(db: Session, name: str, owner_id: int) -> Optional[Category]: return db.query(Category).filter(Category.name == name, Category.owner_id == owner_id).first() def get_categories( db: Session, owner_id: int, skip: int = 0, limit: int = 100 ) -> List[Category]: return db.query(Category).filter(Category.owner_id == owner_id).offset(skip).limit(limit).all() def create_category(db: Session, category_in: CategoryCreate, owner_id: int) -> Category: db_category = Category( name=category_in.name, description=category_in.description, owner_id=owner_id ) db.add(db_category) db.commit() db.refresh(db_category) return db_category def update_category( db: Session, db_obj: Category, obj_in: CategoryUpdate ) -> Category: update_data = obj_in.model_dump(exclude_unset=True) for field in update_data: setattr(db_obj, field, update_data[field]) db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj def delete_category(db: Session, category_id: int) -> Category: category = db.query(Category).filter(Category.id == category_id).first() db.delete(category) db.commit() return category