asr.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import enum
  2. from datetime import datetime
  3. from sqlalchemy.orm import Mapped
  4. from app.models.db import Base
  5. from sqlalchemy import Column, Integer, String, DateTime, Enum, text
  6. from pydantic import BaseModel
  7. from app.errors.base import ParamsError
  8. class AsrRecordStatus(enum.Enum):
  9. UNKNOW = 0
  10. CREATED = 1
  11. PROCESSING = 2
  12. FINISHED = 3
  13. class AsrRecordTypes(enum.Enum):
  14. UNKNOW = 0
  15. OFFLINE = 1
  16. REALTIME = 2
  17. class AsrRecord(Base):
  18. __tablename__ = "asr_record"
  19. id = Column("id", String(36), primary_key=True)
  20. task_id = Column("task_id", String(36), nullable=False, default="", index=True)
  21. meeting_id = Column("meeting_id", String(36), nullable=False, default="", index=True)
  22. file_url = Column("file_url", String(255), nullable=False, default="")
  23. type = Column("type", Enum(AsrRecordTypes), nullable=False, default=AsrRecordTypes.UNKNOW)
  24. status = Column("status", Enum(AsrRecordStatus), nullable=False, default=AsrRecordStatus.UNKNOW)
  25. result_url = Column("result_url", String(255), nullable=False, default="")
  26. created_at = Column(
  27. "created_at",
  28. DateTime(timezone=True),
  29. nullable=False,
  30. default=datetime.now,
  31. server_default=text("CURRENT_TIMESTAMP"),
  32. )
  33. updated_at = Column(
  34. "updated_at",
  35. DateTime(timezone=True),
  36. nullable=False,
  37. default=datetime.now,
  38. server_default=text("CURRENT_TIMESTAMP"),
  39. onupdate=datetime.now,
  40. server_onupdate=text("CURRENT_TIMESTAMP"),
  41. )
  42. class AsrRecordModel(BaseModel):
  43. id: int = 0
  44. task_id: str = ""
  45. file_url: str = ""
  46. meeting_id: str = ""
  47. type: AsrRecordTypes = 0
  48. status: AsrRecordStatus = 0
  49. result_url: str = ""
  50. hotwords: str = ""
  51. def get_create(self):
  52. if self.task_id and self.file_url:
  53. return self
  54. else:
  55. raise ParamsError(message="Task ID and file URL can't be empty")
  56. def get_update(self):
  57. if self.id and (self.task_id or self.file_url or self.type or self.status or self.result_url):
  58. return self
  59. else:
  60. raise ParamsError(message="ID and at least one of task ID, file URL, type, status, or result URL can't be empty")
  61. def get_delete(self):
  62. if self.id:
  63. return self
  64. else:
  65. raise ParamsError(message="ID can't be empty")