7 changed files with 176 additions and 17 deletions
-
2apps/account/models/user.py
-
51apps/chat/admin.py
-
49apps/chat/migrations/0002_auto_20241125_1219.py
-
68apps/chat/models.py
-
3apps/course/apps.py
-
19apps/course/signals.py
-
1config/urls.py
@ -1,3 +1,52 @@ |
|||
from django.contrib import admin |
|||
|
|||
# Register your models here. |
|||
from apps.chat.models import RoomMessage, ChatMessage |
|||
|
|||
|
|||
|
|||
|
|||
@admin.register(RoomMessage) |
|||
class RoomMessageAdmin(admin.ModelAdmin): |
|||
list_display = ( |
|||
'name', 'room_type', 'course', 'initiator', 'recipient', 'created_at', |
|||
) |
|||
list_filter = ('room_type', 'created_at', 'updated_at', 'course') |
|||
search_fields = ('name', 'description', 'course__title', 'initiator__username', 'recipient__username') |
|||
ordering = ('-created_at',) |
|||
readonly_fields = ('created_at', 'updated_at') |
|||
fieldsets = ( |
|||
(None, { |
|||
'fields': ('name', 'description', 'room_type') |
|||
}), |
|||
('Relations', { |
|||
'fields': ('course', 'initiator', 'recipient') |
|||
}), |
|||
('Timestamps', { |
|||
'fields': ('created_at', 'updated_at') |
|||
}), |
|||
) |
|||
|
|||
|
|||
@admin.register(ChatMessage) |
|||
class ChatMessageAdmin(admin.ModelAdmin): |
|||
list_display = ( |
|||
'room', 'sender', 'content_type', 'content_size', 'sent_at', 'is_deleted' |
|||
) |
|||
list_filter = ('content_type', 'is_deleted', 'sent_at', 'updated_at') |
|||
search_fields = ('room__name', 'sender__username', 'content') |
|||
ordering = ('-sent_at',) |
|||
readonly_fields = ('sent_at', 'updated_at') |
|||
fieldsets = ( |
|||
(None, { |
|||
'fields': ('room', 'sender', 'content', 'content_type') |
|||
}), |
|||
('Additional Info', { |
|||
'fields': ('content_size',) |
|||
}), |
|||
('Status', { |
|||
'fields': ('is_deleted', 'deleted_at') |
|||
}), |
|||
('Timestamps', { |
|||
'fields': ('sent_at', 'updated_at') |
|||
}), |
|||
) |
|||
@ -0,0 +1,49 @@ |
|||
# Generated by Django 3.2.4 on 2024-11-25 12:19 |
|||
|
|||
from django.conf import settings |
|||
from django.db import migrations, models |
|||
import django.db.models.deletion |
|||
|
|||
|
|||
class Migration(migrations.Migration): |
|||
|
|||
dependencies = [ |
|||
('course', '0004_auto_20241122_1913'), |
|||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
|||
('chat', '0001_initial'), |
|||
] |
|||
|
|||
operations = [ |
|||
migrations.RemoveField( |
|||
model_name='chatmessage', |
|||
name='course', |
|||
), |
|||
migrations.RemoveField( |
|||
model_name='chatmessage', |
|||
name='is_to_professor', |
|||
), |
|||
migrations.RemoveField( |
|||
model_name='chatmessage', |
|||
name='recipient', |
|||
), |
|||
migrations.CreateModel( |
|||
name='RoomMessage', |
|||
fields=[ |
|||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
|||
('name', models.CharField(max_length=255, verbose_name='Room Name')), |
|||
('description', models.TextField(blank=True, null=True, verbose_name='Description')), |
|||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created At')), |
|||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), |
|||
('room_type', models.CharField(choices=[('group', 'Group'), ('private', 'Private')], default='group', max_length=10, verbose_name='Room Type')), |
|||
('course', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='room_messages', to='course.course', verbose_name='Course')), |
|||
('initiator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='initiated_rooms', to=settings.AUTH_USER_MODEL, verbose_name='Initiator')), |
|||
('recipient', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='messages_received', to=settings.AUTH_USER_MODEL, verbose_name='Recipient')), |
|||
], |
|||
), |
|||
migrations.AddField( |
|||
model_name='chatmessage', |
|||
name='room', |
|||
field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='messages', to='chat.roommessage', verbose_name='Room'), |
|||
preserve_default=False, |
|||
), |
|||
] |
|||
@ -0,0 +1,19 @@ |
|||
|
|||
from django.db.models.signals import post_save |
|||
from django.dispatch import receiver |
|||
from apps.course.models import Course |
|||
from apps.chat.models import RoomMessage |
|||
|
|||
|
|||
@receiver(post_save, sender=Course) |
|||
def create_room_message_for_course(sender, instance, created, **kwargs): |
|||
if created: # فقط برای موارد جدید اجرا شود |
|||
RoomMessage.objects.create( |
|||
name=f"{instance.title} - Group", |
|||
description=f"Group chat for course: {instance.title}", |
|||
initiator=instance.professor, # استاد بهعنوان سازنده اتاق |
|||
course=instance, |
|||
room_type=RoomMessage.RoomTypeChoices.GROUP |
|||
) |
|||
|
|||
|
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue