card_service.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. from sqlalchemy.orm import Session
  2. from sqlalchemy import text
  3. from typing import List, Optional
  4. from app.models.card import Card
  5. from app.schemas.card import CardCreate
  6. class CardService:
  7. @staticmethod
  8. def create(db: Session, obj_in: CardCreate) -> Card:
  9. db_obj = Card(**obj_in.dict())
  10. db.add(db_obj)
  11. db.commit()
  12. db.refresh(db_obj)
  13. return db_obj
  14. @staticmethod
  15. def get_paginated(db: Session, page: int, size: int, culture: str):
  16. offset = page * size
  17. return (
  18. db.query(Card)
  19. .filter(Card.culture == culture)
  20. .order_by(Card.created_at.desc())
  21. .offset(offset)
  22. .limit(size)
  23. .all()
  24. )
  25. @staticmethod
  26. def get_by_keywords(db: Session, keywords: List[str], page: int, size: int, culture: str):
  27. offset = page * size
  28. query = db.query(Card).filter(Card.culture == culture)
  29. # 多关键词模糊查询
  30. for kw in keywords:
  31. like_str = f"%{kw.strip()}%"
  32. query = query.filter(
  33. (Card.title.like(like_str)) |
  34. (Card.content.like(like_str)) |
  35. (Card.label.like(like_str))
  36. )
  37. return (
  38. query.order_by(Card.created_at.desc())
  39. .offset(offset)
  40. .limit(size)
  41. .all()
  42. )