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.

115 lines
2.3 KiB

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