AI ニジカ綜合
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
2.1 KiB

  1. from __future__ import annotations
  2. from datetime import datetime
  3. from eloquent import Model # type: ignore
  4. from .config import DB
  5. class AnsweredFlag (Model):
  6. id: int
  7. answer_id: int
  8. platform: int
  9. answered: bool
  10. __timestamps__ = False
  11. @property
  12. def answer (
  13. self,
  14. ) -> Answer:
  15. return self.belongs_to (Answer)
  16. class Answer (Model):
  17. id: int
  18. query_id: int
  19. character: int
  20. content: str
  21. sent_at: datetime
  22. __timestamps__ = False
  23. @property
  24. def query (
  25. self,
  26. ) -> Query:
  27. return self.belongs_to (Query)
  28. def answered (
  29. self,
  30. platform: int,
  31. ) -> bool | None:
  32. answered_flag = (AnsweredFlag.where ('answer_id', self.id)
  33. .where ('platform', platform)
  34. .first ())
  35. if answered_flag is None:
  36. return None
  37. return answered_flag.answered
  38. class Query (Model):
  39. id: int
  40. user_id: int | None
  41. target_character: int
  42. content: str
  43. image_url: str | None
  44. query_type: int
  45. model: int
  46. sent_at: datetime
  47. answered: bool
  48. transfer_data: dict[str, str] | None
  49. __casts__ = { 'transfer_data': 'json' }
  50. __timestamps__ = False
  51. @property
  52. def user (
  53. self,
  54. ) -> User:
  55. return self.belongs_to (User)
  56. @property
  57. def answer_histories (
  58. self,
  59. ) -> list[Answer]:
  60. return [x.answer for x in self.has_many (QueryAnswerHistory).get ()]
  61. class QueryAnswerHistory (Model):
  62. id: int
  63. query_id: int
  64. answer_id: int
  65. __timestamps__ = False
  66. @property
  67. def query (
  68. self,
  69. ) -> Query:
  70. return self.belongs_to (Query)
  71. @property
  72. def answer (
  73. self,
  74. ) -> Answer:
  75. return self.belongs_to (Answer)
  76. class User (Model):
  77. id: int
  78. platform: int
  79. code: str
  80. name: str
  81. icon: bytes
  82. __timestamps__ = False