| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- from sqlalchemy.orm import Session
- from sqlalchemy import text
- from typing import List, Optional
- 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 get_paginated(db: Session, page: int, size: int, culture: str):
- offset = page * size
- return (
- db.query(Card)
- .filter(Card.culture == culture)
- .order_by(Card.created_at.desc())
- .offset(offset)
- .limit(size)
- .all()
- )
- @staticmethod
- def get_by_keywords(db: Session, keywords: List[str], page: int, size: int, culture: str):
- offset = page * size
- query = db.query(Card).filter(Card.culture == culture)
- # 多关键词模糊查询
- for kw in keywords:
- like_str = f"%{kw.strip()}%"
- query = query.filter(
- (Card.title.like(like_str)) |
- (Card.content.like(like_str)) |
- (Card.label.like(like_str))
- )
- return (
- query.order_by(Card.created_at.desc())
- .offset(offset)
- .limit(size)
- .all()
- )
|