diff --git a/apps/chat/migrations/0003_auto_20241125_1737.py b/apps/chat/migrations/0003_auto_20241125_1737.py new file mode 100644 index 0000000..3b09247 --- /dev/null +++ b/apps/chat/migrations/0003_auto_20241125_1737.py @@ -0,0 +1,34 @@ +# Generated by Django 3.2.4 on 2024-11-25 17:37 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('chat', '0002_auto_20241125_1219'), + ] + + operations = [ + migrations.AddField( + model_name='chatmessage', + name='is_read', + field=models.BooleanField(default=False, verbose_name='Is Read'), + ), + migrations.CreateModel( + name='MessageReadStatus', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('is_read', models.BooleanField(default=False, verbose_name='Is Read')), + ('read_at', models.DateTimeField(blank=True, null=True, verbose_name='Read At')), + ('message', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='read_statuses', to='chat.chatmessage', verbose_name='Message')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='read_statuses', to=settings.AUTH_USER_MODEL, verbose_name='User')), + ], + options={ + 'unique_together': {('user', 'message')}, + }, + ), + ] diff --git a/apps/chat/models.py b/apps/chat/models.py index 07e7b92..ecd8d89 100644 --- a/apps/chat/models.py +++ b/apps/chat/models.py @@ -1,7 +1,7 @@ from django.db import models -from apps.account.models import User, ProfessorUser +from apps.account.models import User, User from apps.course.models import Course @@ -85,6 +85,7 @@ class ChatMessage(models.Model): blank=True, null=True ) + is_read = models.BooleanField(default=False, verbose_name="Is Read") sent_at = models.DateTimeField(auto_now_add=True, verbose_name="Sent At") updated_at = models.DateTimeField(auto_now=True, verbose_name="Updated At") @@ -95,4 +96,25 @@ class ChatMessage(models.Model): return f"Message from {self.sender} in {self.room}" +class MessageReadStatus(models.Model): + user = models.ForeignKey( + User, + on_delete=models.CASCADE, + related_name="read_statuses", + verbose_name="User" + ) + message = models.ForeignKey( + ChatMessage, + on_delete=models.CASCADE, + related_name="read_statuses", + verbose_name="Message" + ) + is_read = models.BooleanField(default=False, verbose_name="Is Read") + read_at = models.DateTimeField(null=True, blank=True, verbose_name="Read At") + + class Meta: + unique_together = ("user", "message") # جلوگیری از ثبت تکراری + + def __str__(self): + return f"User {self.user.fullname} read Message {self.message.id}: {self.is_read}" \ No newline at end of file