Update project
This commit is contained in:
@@ -34,3 +34,35 @@ class MessageFeedback(models.Model):
|
||||
|
||||
def __str__(self):
|
||||
return f"feedback-msg{self.message_id}"
|
||||
|
||||
|
||||
class AskIdempotency(models.Model):
|
||||
"""
|
||||
⚛️🔒 اصلاح idempotency برای POST /api/ai/ask (همون الگویی که
|
||||
UserAnswer.idempotency_key/UserLessonCompletion.idempotency_key در
|
||||
content و Order.idempotency_key در payment دارن): چون نتیجهی هر
|
||||
«سوال» شاملِ دو ردیفِ Message (کاربر + دستیار) و مصرفِ یک اسلاتِ
|
||||
کوتای روزانهست (نه یک ردیفِ تکی مثلِ UserAnswer)، این رکورد پل بین
|
||||
(user, Idempotency-Key) و نتیجهی از قبل ساختهشده رو نگه میداره تا
|
||||
رتری/دابلکلیکِ همون کلید، دوباره پیام یا کوتای تکراری نسازه و بهجاش
|
||||
نتیجهی همون درخواستِ قبلی برگردونده بشه. UniqueConstraint سطح DB روی
|
||||
(user_id, idempotency_key) هم دفاع در عمق در برابر دو submit همزمانِ
|
||||
دقیقاً با همون کلیده (مشابه uniq_user_answer_idempotency_key).
|
||||
"""
|
||||
user_id = models.IntegerField(db_index=True)
|
||||
idempotency_key = models.CharField(max_length=100)
|
||||
conversation = models.ForeignKey(Conversation, on_delete=models.CASCADE, related_name='+')
|
||||
user_message = models.ForeignKey(Message, on_delete=models.CASCADE, related_name='+')
|
||||
assistant_message = models.ForeignKey(Message, on_delete=models.CASCADE, related_name='+')
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
class Meta:
|
||||
constraints = [
|
||||
models.UniqueConstraint(
|
||||
fields=['user_id', 'idempotency_key'],
|
||||
name='uniq_ask_idempotency_key',
|
||||
),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return f"ask-idem-user{self.user_id}-{self.idempotency_key}"
|
||||
|
||||
Reference in New Issue
Block a user