knowledge.py 1.1 KB

123456789101112131415161718192021222324252627282930
  1. from app.models import KnowledgeModel, group_knowledge_table
  2. from app.models.user_model import UserModel
  3. from Log import logger
  4. async def get_knowledge_list(db, user_id, keyword, page_size, page_index):
  5. user = db.query(UserModel).filter(UserModel.id == user_id).first()
  6. if user is None:
  7. return {"rows": []}
  8. if user.permission == "admin":
  9. query = db.query(KnowledgeModel)
  10. else:
  11. group_list = [i.id for i in user.groups]
  12. query = db.query(KnowledgeModel)
  13. query = query.filter(KnowledgeModel.tenant_id == user_id)
  14. query = query.union(
  15. db.query(KnowledgeModel).join(
  16. group_knowledge_table,
  17. KnowledgeModel.id == group_knowledge_table.c.knowledge_id
  18. ).filter(
  19. group_knowledge_table.c.group_id.in_(group_list)
  20. )
  21. )
  22. if keyword:
  23. query = query.filter(KnowledgeModel.name.like('%{}%'.format(keyword)))
  24. total = query.count()
  25. if page_size:
  26. query = query.limit(page_size).offset((page_index - 1) * page_size)
  27. return {"total": total, "rows": [kld.to_json() for kld in query.all()]}