Spaces:
Sleeping
Sleeping
| # Generated by Django 6.0.4 on 2026-04-20 17:36 | |
| import django.core.validators | |
| import django.db.models.deletion | |
| from django.db import migrations, models | |
| class Migration(migrations.Migration): | |
| initial = True | |
| dependencies = [ | |
| ('skills', '0001_initial'), | |
| ] | |
| operations = [ | |
| migrations.CreateModel( | |
| name='Resource', | |
| fields=[ | |
| ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | |
| ('title', models.CharField(max_length=300)), | |
| ('provider', models.CharField(max_length=100)), | |
| ('url', models.URLField(max_length=500, unique=True)), | |
| ('difficulty_level', models.CharField(choices=[('BEGINNER', 'Beginner'), ('INTERMEDIATE', 'Intermediate'), ('ADVANCED', 'Advanced')], max_length=20)), | |
| ('duration', models.IntegerField(help_text='Total duration in minutes.', validators=[django.core.validators.MinValueValidator(0)])), | |
| ('type', models.CharField(choices=[('VIDEO', 'Video'), ('COURSE', 'Course'), ('ARTICLE', 'Article'), ('DOCS', 'Docs')], max_length=20)), | |
| ('rating', models.FloatField(default=3.5, help_text='Curator-assigned 0.0-5.0 rating used by recommendation ranking.', validators=[django.core.validators.MinValueValidator(0.0), django.core.validators.MaxValueValidator(5.0)])), | |
| ('created_at', models.DateTimeField(auto_now_add=True)), | |
| ], | |
| options={ | |
| 'ordering': ['title'], | |
| }, | |
| ), | |
| migrations.CreateModel( | |
| name='SkillResource', | |
| fields=[ | |
| ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | |
| ('relevance_score', models.FloatField(default=1.0, help_text='0.0-1.0 how relevant this resource is to the skill.', validators=[django.core.validators.MinValueValidator(0.0), django.core.validators.MaxValueValidator(1.0)])), | |
| ('resource', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='resources.resource')), | |
| ('skill', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='skills.skill')), | |
| ], | |
| options={ | |
| 'unique_together': {('skill', 'resource')}, | |
| }, | |
| ), | |
| migrations.AddField( | |
| model_name='resource', | |
| name='skills', | |
| field=models.ManyToManyField(related_name='resources', through='resources.SkillResource', to='skills.skill'), | |
| ), | |
| migrations.CreateModel( | |
| name='ResourceCheckpoint', | |
| fields=[ | |
| ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | |
| ('order_index', models.IntegerField(help_text='1-based position within the resource.', validators=[django.core.validators.MinValueValidator(1)])), | |
| ('title', models.CharField(max_length=500)), | |
| ('url_fragment', models.CharField(blank=True, default='', help_text='Optional anchor/path suffix linking to this module.', max_length=500)), | |
| ('estimated_minutes', models.IntegerField(blank=True, null=True)), | |
| ('source', models.CharField(choices=[('manual', 'Manual'), ('playwright', 'Playwright'), ('youtube_api', 'YouTube API'), ('fcc_github', 'freeCodeCamp GitHub')], default='manual', max_length=20)), | |
| ('extracted_at', models.DateTimeField(blank=True, null=True)), | |
| ('resource', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='checkpoints', to='resources.resource')), | |
| ], | |
| options={ | |
| 'ordering': ['resource', 'order_index'], | |
| 'unique_together': {('resource', 'order_index')}, | |
| }, | |
| ), | |
| ] | |