ai_meeting_minutes.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import enum
  2. from datetime import datetime
  3. from app.models.db import Base
  4. from sqlalchemy import Column, Integer, String, DateTime, Enum, text, Text
  5. from pydantic import BaseModel
  6. from app.errors.base import ParamsError
  7. class AIMeetingSpeecher(enum.Enum):
  8. UNKNOW = 0
  9. USER = 1
  10. AI = 2
  11. class AIMeetingConversation(Base):
  12. __tablename__ = "ai_meeting_conversation"
  13. id = Column("id", String(36), primary_key=True)
  14. meeting_id = Column("meeting_id", String(36), nullable=False, default=0)
  15. title = Column("title", String(255), nullable=False, default="")
  16. minutes_id = Column("minutes_id", Integer, nullable=False, default=0)
  17. created_at = Column(
  18. "created_at",
  19. DateTime(timezone=True),
  20. nullable=False,
  21. default=datetime.now,
  22. server_default=text("CURRENT_TIMESTAMP"),
  23. )
  24. updated_at = Column(
  25. "updated_at",
  26. DateTime(timezone=True),
  27. nullable=False,
  28. default=datetime.now,
  29. server_default=text("CURRENT_TIMESTAMP"),
  30. onupdate=datetime.now,
  31. server_onupdate=text("CURRENT_TIMESTAMP"),
  32. )
  33. class AIMeetingMinutesRecord(Base):
  34. __tablename__ = "ai_meeting_minutes_record"
  35. id = Column("id", String(36), primary_key=True)
  36. meeting_id = Column("meeting_id", String(36), nullable=False, default="")
  37. conversation_id = Column("conversation_id", String(36), nullable=False, default="")
  38. content = Column("content", Text, nullable=False, default="")
  39. speecher = Column("speecher", Enum(AIMeetingSpeecher), nullable=False, default=AIMeetingSpeecher.UNKNOW)
  40. download_url = Column("download_url", String(255))
  41. created_at = Column(
  42. "created_at",
  43. DateTime(timezone=True),
  44. nullable=False,
  45. default=datetime.now,
  46. server_default=text("CURRENT_TIMESTAMP"),
  47. index=True
  48. )
  49. updated_at = Column(
  50. "updated_at",
  51. DateTime(timezone=True),
  52. nullable=False,
  53. default=datetime.now,
  54. server_default=text("CURRENT_TIMESTAMP"),
  55. onupdate=datetime.now,
  56. server_onupdate=text("CURRENT_TIMESTAMP"),
  57. )
  58. def to_dict(self):
  59. return {
  60. 'id': self.id,
  61. 'meeting_id': self.meeting_id,
  62. 'speecher': self.speecher,
  63. 'content': self.content,
  64. 'created_at': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
  65. 'updated_at': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
  66. }
  67. class AIMeetingConversationModel(BaseModel):
  68. id: int = 0
  69. meeting_id: str = ""
  70. title: str = ""
  71. minutes_id: int = 0
  72. def get_create(self):
  73. if self.meeting_id and self.minutes_id:
  74. return self
  75. else:
  76. raise ParamsError(message="Meeting ID, title, and minutes ID can't be empty")
  77. def get_update(self):
  78. if self.id and (self.meeting_id or self.title or self.minutes_id):
  79. return self
  80. else:
  81. raise ParamsError(message="ID and at least one of meeting ID, title, or minutes ID can't be empty")
  82. def get_delete(self):
  83. if self.id:
  84. return self
  85. else:
  86. raise ParamsError(message="ID can't be empty")
  87. class AIMeetingMinutesRecordModel(BaseModel):
  88. id: str = ""
  89. meeting_id: str = ""
  90. # conversation_id: s = 0
  91. content: str = ""
  92. speecher: AIMeetingSpeecher = 0
  93. view_content: list = []
  94. message: str = ""
  95. def get_create(self):
  96. if self.meeting_id and self.conversation_id and self.content and self.speecher:
  97. return self
  98. else:
  99. raise ParamsError(message="Meeting ID, conversation ID, content, and speecher can't be empty")
  100. def get_update(self):
  101. if self.id and self.message:
  102. return self
  103. else:
  104. raise ParamsError(message="ID and at least one of content or speecher can't be empty")
  105. def get_delete(self):
  106. if self.id:
  107. return self
  108. else:
  109. raise ParamsError(message="ID can't be empty")
  110. def get_conversation(self):
  111. if self.meeting_id and self.content and self.message:
  112. return self
  113. else:
  114. raise ParamsError(message="message,content and meeting_id can't be empty")
  115. def get_regenerate(self):
  116. if self.content and self.message and self.id:
  117. return self
  118. else:
  119. raise ParamsError(message="message,content and id can't be empty")