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.

116 lines
2.3 KiB

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