session.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from sqlalchemy.orm import Session
  2. from app.models import AgentType
  3. from app.models.session_model import SessionModel
  4. class SessionService:
  5. def __init__(self, db: Session):
  6. self.db = db
  7. def create_session(self, session_id: str, name: str, agent_id: str, agent_type: AgentType) -> SessionModel:
  8. """
  9. 创建一个新的会话记录。
  10. 参数:
  11. session_id (str): 会话ID。
  12. name (str): 会话名称。
  13. agent_id (str): 代理ID。
  14. agent_type (AgentType): 代理类型。
  15. 返回:
  16. SessionModel: 新创建的会话模型实例,如果会话ID已存在则返回None。
  17. """
  18. existing_session = self.get_session_by_id(session_id)
  19. if existing_session:
  20. return None # 如果会话ID已存在,不进行任何操作
  21. new_session = SessionModel(
  22. id=session_id,
  23. name=name,
  24. agent_id=agent_id,
  25. agent_type=agent_type
  26. )
  27. self.db.add(new_session)
  28. self.db.commit()
  29. self.db.refresh(new_session)
  30. return new_session
  31. def get_session_by_id(self, session_id: str) -> SessionModel:
  32. """
  33. 根据会话ID获取会话记录。
  34. 参数:
  35. session_id (str): 会话ID。
  36. 返回:
  37. SessionModel: 查找到的会话模型实例,如果未找到则返回None。
  38. """
  39. return self.db.query(SessionModel).filter_by(id=session_id).first()
  40. def update_session(self, session_id: str, **kwargs) -> SessionModel:
  41. """
  42. 更新会话记录。
  43. 参数:
  44. session_id (str): 会话ID。
  45. kwargs: 需要更新的字段及其值。
  46. 返回:
  47. SessionModel: 更新后的会话模型实例。
  48. """
  49. session = self.get_session_by_id(session_id)
  50. if session:
  51. for key, value in kwargs.items():
  52. setattr(session, key, value)
  53. self.db.commit()
  54. self.db.refresh(session)
  55. return session
  56. def delete_session(self, session_id: str) -> None:
  57. """
  58. 删除会话记录。
  59. 参数:
  60. session_id (str): 会话ID。
  61. """
  62. session = self.get_session_by_id(session_id)
  63. if session:
  64. self.db.delete(session)
  65. self.db.commit()