Browse Source
V2 lesson list swagger docs updated + script added for courses without message rooms
master
V2 lesson list swagger docs updated + script added for courses without message rooms
master
3 changed files with 188 additions and 2 deletions
-
50apps/course/doc.py
-
63apps/course/management/commands/ensure_course_rooms.py
-
77apps/course/views/lesson.py
@ -0,0 +1,63 @@ |
|||
from django.core.management.base import BaseCommand |
|||
from django.db import transaction |
|||
from django.db.models import Exists, OuterRef |
|||
from django.utils.translation import gettext_lazy as _ |
|||
|
|||
from apps.chat.models import RoomMessage |
|||
from apps.course.models import Course |
|||
|
|||
|
|||
class Command(BaseCommand): |
|||
help = _('Ensure every course has a group chat room') |
|||
|
|||
def add_arguments(self, parser): |
|||
parser.add_argument( |
|||
'--dry-run', |
|||
action='store_true', |
|||
dest='dry_run', |
|||
help=_('Show courses missing group rooms without creating them'), |
|||
) |
|||
|
|||
def handle(self, *args, **options): |
|||
dry_run = options['dry_run'] |
|||
|
|||
group_room_exists = RoomMessage.objects.filter( |
|||
course=OuterRef('pk'), |
|||
room_type=RoomMessage.RoomTypeChoices.GROUP, |
|||
) |
|||
|
|||
courses_without_group_room = Course.objects.select_related('professor').annotate( |
|||
has_group_room=Exists(group_room_exists) |
|||
).filter( |
|||
has_group_room=False |
|||
) |
|||
|
|||
missing_count = courses_without_group_room.count() |
|||
|
|||
if missing_count == 0: |
|||
self.stdout.write(self.style.SUCCESS(_('All courses already have a group room.'))) |
|||
return |
|||
|
|||
self.stdout.write(self.style.WARNING(_(f'Found {missing_count} course(s) without a group room.'))) |
|||
|
|||
for course in courses_without_group_room: |
|||
self.stdout.write(f'- Course #{course.id}: {course.title}') |
|||
|
|||
if dry_run: |
|||
self.stdout.write(self.style.WARNING(_('Dry run completed. No rooms were created.'))) |
|||
return |
|||
|
|||
created_count = 0 |
|||
with transaction.atomic(): |
|||
for course in courses_without_group_room: |
|||
RoomMessage.objects.create( |
|||
name=f"{course.title} - Group", |
|||
description=f"Group chat for course: {course.title}", |
|||
initiator=course.professor, |
|||
course=course, |
|||
room_type=RoomMessage.RoomTypeChoices.GROUP, |
|||
is_locked=course.is_group_chat_locked, |
|||
) |
|||
created_count += 1 |
|||
|
|||
self.stdout.write(self.style.SUCCESS(_(f'Created {created_count} missing group room(s).'))) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue