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