# Generated by Django 5.1.8 on 2025-04-03 00:05 import apps.course.models.course import apps.course.models.lesson import django.db.models.deletion import filer.fields.image import utils.schema from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ('account', '0001_initial'), migrations.swappable_dependency(settings.FILER_IMAGE_MODEL), ] operations = [ migrations.CreateModel( name='CourseCategory', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=255, verbose_name='Category Name')), ('slug', models.SlugField(max_length=255, unique=True)), ], ), migrations.CreateModel( name='Course', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=255, verbose_name='Course Title')), ('slug', models.SlugField(allow_unicode=True, unique=True)), ('video_type', models.CharField(choices=[('video_file', 'Video File'), ('video_link', 'Video Link')], max_length=20, verbose_name='Vedio Type')), ('video_file', models.FileField(blank=True, null=True, upload_to=apps.course.models.course.course_file_upload_to)), ('video_link', models.CharField(blank=True, max_length=500, null=True, verbose_name='Video Link')), ('is_online', models.BooleanField(default=True, verbose_name='Is Online Course')), ('online_link', models.CharField(blank=True, max_length=500, null=True, verbose_name='Online Class Link')), ('level', models.CharField(choices=[('beginner', 'Beginner'), ('mid', 'Mid Level'), ('advanced', 'Advanced')], max_length=10, verbose_name='Course Level')), ('duration', models.PositiveIntegerField(verbose_name='Duration (in hours)')), ('lessons_count', models.PositiveIntegerField(verbose_name='Number of Lessons')), ('description', models.TextField(verbose_name='Course Description')), ('short_description', models.CharField(blank=True, max_length=500, null=True, verbose_name='Short Description')), ('status', models.CharField(choices=[('inactive', 'Inactive'), ('upcoming', 'Upcoming'), ('registering', 'Registering'), ('ongoing', 'Ongoing'), ('finished', 'Finished')], default='inactive', max_length=15, verbose_name='Course Status')), ('is_free', models.BooleanField(default=True, verbose_name='Is Free')), ('price', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='Course Price')), ('discount_percentage', models.PositiveIntegerField(default=0, verbose_name='Discount Percentage')), ('final_price', models.DecimalField(blank=True, decimal_places=2, default=0.0, help_text='This field is automatically calculated based on the discount percentage.', max_digits=10, verbose_name='Course Final Price')), ('timing', models.JSONField(blank=True, default=utils.schema.default_timing, help_text='The Timing information in JSON format.', null=True, verbose_name='Timing')), ('features', models.JSONField(blank=True, default=dict, null=True, verbose_name='Course features')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), ('professor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='courses', to='account.professoruser')), ('thumbnail', filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to=settings.FILER_IMAGE_MODEL, verbose_name='thumbnail')), ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='courses', to='course.coursecategory', verbose_name='Category')), ], options={ 'verbose_name': 'Course', 'verbose_name_plural': 'Courses', }, ), migrations.CreateModel( name='Attachment', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=255, verbose_name='Attachment Title')), ('file', models.FileField(upload_to=apps.course.models.course.attachment_file_upload_to, verbose_name='Attachment File')), ('file_size', models.PositiveIntegerField(blank=True, null=True, verbose_name='File Size (in bytes)')), ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='attachments', to='course.course', verbose_name='Course')), ], options={ 'verbose_name': 'Attachment', 'verbose_name_plural': 'Attachments', 'ordering': ('-id',), }, ), migrations.CreateModel( name='Glossary', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=555, verbose_name='Glossary Title')), ('description', models.TextField(verbose_name='Description')), ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='glossaries', to='course.course', verbose_name='Course')), ], options={ 'verbose_name': 'Glossary', 'verbose_name_plural': 'Glossary', 'ordering': ('-id',), }, ), migrations.CreateModel( name='Lesson', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=255, verbose_name='Lesson Title')), ('priority', models.IntegerField(blank=True, null=True, verbose_name='Priority')), ('is_active', models.BooleanField(default=True, verbose_name='Is Active')), ('duration', models.PositiveIntegerField(verbose_name='Duration (in minutes)')), ('content_type', models.CharField(choices=[('youtube_link', 'Youtube Link'), ('video_file', 'Video File'), ('audio_file', 'Audio File')], max_length=50, verbose_name='Content Type')), ('content_file', models.FileField(blank=True, null=True, upload_to=apps.course.models.lesson.lesson_file_upload_to)), ('video_link', models.CharField(blank=True, max_length=500, null=True, verbose_name='Link')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='Updated At')), ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lessons', to='course.course', verbose_name='Course')), ], ), migrations.CreateModel( name='LessonCompletion', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('completed_at', models.DateTimeField(auto_now_add=True)), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Created at')), ('lesson', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='completions', to='course.lesson')), ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='lesson_completions', to='account.studentuser')), ], options={ 'unique_together': {('student', 'lesson')}, }, ), migrations.CreateModel( name='Participant', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('joined_date', models.DateTimeField(auto_now_add=True)), ('unread_messages_count', models.IntegerField(default=0)), ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='participants', to='course.course')), ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='participated_courses', to='account.studentuser')), ], options={ 'unique_together': {('student', 'course')}, }, ), ]