| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- from __future__ import annotations
- from sqlalchemy import or_, select
- from sqlalchemy.orm import Session
- from app.db.models.knowledge import KnowledgeItem
- from app.db.repositories.base import paginate
- def list_knowledge(
- db: Session,
- *,
- mine_id: str | None = None,
- knowledge_type: str | None = None,
- category: str | None = None,
- keyword: str | None = None,
- page: int = 1,
- page_size: int = 20,
- ) -> tuple[list[KnowledgeItem], int]:
- statement = select(KnowledgeItem)
- if mine_id:
- statement = statement.where(
- or_(KnowledgeItem.mine_id == mine_id, KnowledgeItem.mine_id.is_(None))
- )
- if knowledge_type:
- statement = statement.where(KnowledgeItem.knowledge_type == knowledge_type)
- if category:
- statement = statement.where(KnowledgeItem.category == category)
- if keyword:
- query = f"%{keyword.strip()}%"
- statement = statement.where(
- or_(
- KnowledgeItem.title.like(query),
- KnowledgeItem.content.like(query),
- KnowledgeItem.summary.like(query),
- KnowledgeItem.code.like(query),
- )
- )
- statement = statement.order_by(KnowledgeItem.updated_at.desc())
- return paginate(db, statement, page, page_size)
- def get_knowledge(db: Session, knowledge_id: str) -> KnowledgeItem | None:
- return db.get(KnowledgeItem, knowledge_id)
|