from sqlalchemy.orm import Session from sqlalchemy import text from typing import List, Optional from app.utils.search import apply_keyword_search from app.utils.pagination import paginate from app.core.biz_exception import NotFoundError, PermissionDeniedError, BizLogicError from app.models.card import Card from app.schemas.card import CardCreate class CardService: @staticmethod def create(db: Session, obj_in: CardCreate) -> Card: db_obj = Card(**obj_in.dict()) db.add(db_obj) db.commit() db.refresh(db_obj) return db_obj @staticmethod def list_by_keyword(db: Session, keyword: str = None, page: int = 0, size: int = 10, culture: str = "english"): query = db.query(Card).filter(Card.culture == culture) query = apply_keyword_search( query=query, model=Card, keyword=keyword, fields=["title", "content", "label"] ) return paginate(query, page, size)