saved_message_service.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. from typing import Optional
  2. from libs.infinite_scroll_pagination import InfiniteScrollPagination
  3. from extensions.ext_database import db
  4. from models.model import App, EndUser
  5. from models.web import SavedMessage
  6. from services.message_service import MessageService
  7. class SavedMessageService:
  8. @classmethod
  9. def pagination_by_last_id(cls, app_model: App, end_user: Optional[EndUser],
  10. last_id: Optional[str], limit: int) -> InfiniteScrollPagination:
  11. saved_messages = db.session.query(SavedMessage).filter(
  12. SavedMessage.app_id == app_model.id,
  13. SavedMessage.created_by == end_user.id
  14. ).order_by(SavedMessage.created_at.desc()).all()
  15. message_ids = [sm.message_id for sm in saved_messages]
  16. return MessageService.pagination_by_last_id(
  17. app_model=app_model,
  18. user=end_user,
  19. last_id=last_id,
  20. limit=limit,
  21. include_ids=message_ids
  22. )
  23. @classmethod
  24. def save(cls, app_model: App, user: Optional[EndUser], message_id: str):
  25. saved_message = db.session.query(SavedMessage).filter(
  26. SavedMessage.app_id == app_model.id,
  27. SavedMessage.message_id == message_id,
  28. SavedMessage.created_by == user.id
  29. ).first()
  30. if saved_message:
  31. return
  32. message = MessageService.get_message(
  33. app_model=app_model,
  34. user=user,
  35. message_id=message_id
  36. )
  37. saved_message = SavedMessage(
  38. app_id=app_model.id,
  39. message_id=message.id,
  40. created_by=user.id
  41. )
  42. db.session.add(saved_message)
  43. db.session.commit()
  44. @classmethod
  45. def delete(cls, app_model: App, user: Optional[EndUser], message_id: str):
  46. saved_message = db.session.query(SavedMessage).filter(
  47. SavedMessage.app_id == app_model.id,
  48. SavedMessage.message_id == message_id,
  49. SavedMessage.created_by == user.id
  50. ).first()
  51. if not saved_message:
  52. return
  53. db.session.delete(saved_message)
  54. db.session.commit()