from apps.course.models import Category, Course, Material, Lesson, Like from apps.school.models import LiveLesson from apps.content.models import ( Content, Image, Text, ImageText, Video, Gallery, GalleryImage, ImageObject, ) from .content import ( TextCreateSerializer, ImageCreateSerializer, ImageTextCreateSerializer, VideoCreateSerializer, ) class DispatchContentMixin(object): def dispatch_content(self, obj, content): for c in content: if 'type' not in c or not c['type'] or 'data' not in c or not c['data']: continue ctype = c['type'] cdata = c['data'] if isinstance(obj, Course): obj_type = 'course' elif isinstance(obj, Lesson): obj_type = 'lesson' elif isinstance(obj, LiveLesson): obj_type = 'live_lesson' cdata[obj_type] = obj.id if ctype == 'text': if 'id' in cdata and cdata['id']: t = Text.objects.get(id=cdata.pop('id')) serializer = TextCreateSerializer(t, data=cdata) serializer.save() # t.position = cdata['position'] # t.title = cdata['title'] # t.course = course # t.txt = cdata['txt'] # t.uuid = cdata['uuid'] # t.save() else: serializer = TextCreateSerializer(data=cdata) serializer.save() # t = Text.objects.create( # position=cdata['position'], # title=cdata['title'], # course=course, # txt=cdata['txt'], # uuid=cdata['uuid'], # ) elif ctype == 'image': if 'id' in cdata and cdata['id']: image = Image.objects.get(id=cdata.pop('id')) serializer = ImageCreateSerializer(image, data=cdata) serializer.save() # image.uuid = cdata['uuid'] # image.position = cdata['position'] # image.title = cdata['title'] # image.course = course try: image_object = ImageObject.objects.get(id=cdata['img']) except ImageObject.DoesNotExist: pass else: image.img = image_object image.save() # image.save() else: serializer = ImageCreateSerializer(data=cdata) image = serializer.save() # image = Image.objects.create( # position=cdata['position'], # title=cdata['title'], # course=course, # uuid=cdata['uuid'], # ) try: image_object = ImageObject.objects.get(id=cdata['img']) except ImageObject.DoesNotExist: pass else: image.img = image_object image.save() elif ctype == 'image-text': if 'id' in cdata and cdata['id']: it = ImageText.objects.get(id=cdata.pop('id')) serializer = ImageTextCreateSerializer(data=cdata) serializer.save() # it.uuid = cdata['uuid'] # it.position = cdata['position'] # it.title = cdata['title'] # it.course = course try: image_object = ImageObject.objects.get(id=cdata['img']) except ImageObject.DoesNotExist: pass else: it.img = image_object it.save() # it.txt = cdata['txt'] # it.save() else: serializer = ImageTextCreateSerializer(data=cdata) it = serializer.save() # it = ImageText.objects.create( # position=cdata['position'], # title=cdata['title'], # course=course, # txt=cdata['txt'], # uuid=cdata['uuid'], # ) try: image_object = ImageObject.objects.get(id=cdata['img']) except ImageObject.DoesNotExist: pass else: it.img = image_object it.save() elif ctype == 'video': if 'id' in cdata and cdata['id']: v = Video.objects.get(id=cdata.pop('id')) serializer = VideoCreateSerializer(v, data=cdata) serializer.save() # v.position = cdata['position'] # v.title = cdata['title'] # v.course = course # v.url = cdata['url'] # v.uuid = cdata['uuid'] # v.save() else: serializer = VideoCreateSerializer(data=cdata) serializer.save() # v = Video.objects.create( # position=cdata['position'], # title=cdata['title'], # course=course, # url=cdata['url'], # uuid=cdata['uuid'], # ) elif ctype == 'images': if 'id' in cdata and cdata['id']: g = Gallery.objects.get(id=cdata['id']) g.course = course g.position = cdata['position'] g.title = cdata['title'] g.uuid = cdata['uuid'] obj_attr = getattr(g, obj_type) obj_attr = obj g.save() if 'images' in cdata: for image in cdata['images']: if 'id' in image and image['id']: gi = GalleryImage.objects.get(id=image['id']) gi.img = ImageObject.objects.get(id=image['img']) gi.save() else: gi = GalleryImage.objects.create( gallery=g, img=ImageObject.objects.get(id=image['img']) ) else: g = Gallery( position=cdata['position'], title=cdata['title'], uuid=cdata['uuid'], ) obj_attr = getattr(g, obj_type) obj_attr = obj g.save() if 'images' in cdata: for image in cdata['images']: if 'id' in image and image['id']: gi = GalleryImage.objects.get(id=image['id']) gi.img = ImageObject.objects.get(id=image['img']) gi.save() else: gi = GalleryImage.objects.create( gallery=g, img=ImageObject.objects.get(id=image['img']) ) class DispatchMaterialMixin(object): def dispatch_materials(self, course, materials): for material in materials: if 'id' in material and material['id']: m = Material.objects.get(id=material['id']) m.title = material['title'] m.cover = ImageObject.objects.get(id=material['cover']) m.short_description = material['short_description'] m.save() else: m = Material.objects.create( title=material['title'], cover=ImageObject.objects.get(id=material['cover']), short_description=material['short_description'], ) course.materials.add(m) class DispatchGalleryMixin(object): def dispatch_gallery(self, course, gallery): if gallery: if 'id' in gallery and gallery['id']: g = Gallery.objects.get(id=gallery['id']) g.title = gallery.get('title', g.title) g.position = 0 g.save() else: g = Gallery.objects.create( title=gallery.get('title', ''), position=0, ) if 'images' in gallery: for image in gallery['images']: if 'id' in image and image['id']: gi = GalleryImage.objects.get(id=image['id']) gi.gallery = g gi.img = image['img'] gi.save() else: gi = GalleryImage.objects.create( gallery=g, img=image['img'], ) course.gallery = g course.save()