chore: 将后端移动到 api/ 目录,准备合并为单仓库
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e172ffc0b3
commit
0591eda56f
244 files changed
No files matched your search
@@ -0,0 +1,58 @@
|
||||
# Generated by Django 5.1.6 on 2025-03-06 16:03
|
||||
|
||||
import django.db.models.deletion
|
||||
import django_extensions.db.fields
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Task',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')),
|
||||
('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')),
|
||||
('display', models.IntegerField(unique=True)),
|
||||
('title', models.CharField(max_length=100)),
|
||||
('content', models.TextField()),
|
||||
('task_type', models.CharField(choices=[('challenge', 'Challenge'), ('tutorial', 'Tutorial')], editable=False, max_length=20)),
|
||||
('is_public', models.BooleanField(default=False)),
|
||||
],
|
||||
options={
|
||||
'get_latest_by': 'modified',
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Challenge',
|
||||
fields=[
|
||||
('task_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='task.task')),
|
||||
('score', models.IntegerField(default=0)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '挑战',
|
||||
'verbose_name_plural': '挑战',
|
||||
'ordering': ('display',),
|
||||
},
|
||||
bases=('task.task',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Tutorial',
|
||||
fields=[
|
||||
('task_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='task.task')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '教程',
|
||||
'verbose_name_plural': '教程',
|
||||
'ordering': ('display',),
|
||||
},
|
||||
bases=('task.task',),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.1.6 on 2025-03-10 10:38
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='task',
|
||||
name='display',
|
||||
field=models.IntegerField(db_index=True, unique=True),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,38 @@
|
||||
# Generated by Django 5.1.6 on 2025-03-10 12:23
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task', '0002_alter_task_display'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='task',
|
||||
name='content',
|
||||
field=models.TextField(verbose_name='内容'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='task',
|
||||
name='display',
|
||||
field=models.IntegerField(db_index=True, unique=True, verbose_name='序号'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='task',
|
||||
name='is_public',
|
||||
field=models.BooleanField(default=False, verbose_name='是否公开'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='task',
|
||||
name='task_type',
|
||||
field=models.CharField(choices=[('challenge', 'Challenge'), ('tutorial', 'Tutorial')], editable=False, max_length=20, verbose_name='类型'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='task',
|
||||
name='title',
|
||||
field=models.CharField(max_length=100, verbose_name='标题'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.1.6 on 2025-03-18 06:37
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task', '0003_alter_task_content_alter_task_display_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='task',
|
||||
name='task_type',
|
||||
field=models.CharField(choices=[('challenge', '挑战'), ('tutorial', '教程')], editable=False, max_length=20, verbose_name='类型'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,26 @@
|
||||
# Generated by Django 6.0.1 on 2026-03-03 14:59
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task', '0004_alter_task_task_type'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='task',
|
||||
options={},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='task',
|
||||
name='display',
|
||||
field=models.IntegerField(db_index=True, verbose_name='序号'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='task',
|
||||
unique_together={('display', 'task_type')},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 6.0.1 on 2026-03-09 11:47
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task', '0005_alter_task_options_alter_task_display_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='challenge',
|
||||
name='pass_score',
|
||||
field=models.FloatField(blank=True, null=True, verbose_name='通过分数线'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,29 @@
|
||||
# Generated by Django 6.0.1 on 2026-04-13 09:33
|
||||
|
||||
import django.db.models.deletion
|
||||
import task.models
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task', '0006_challenge_pass_score'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='TaskAsset',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=100, verbose_name='文件名')),
|
||||
('file', models.FileField(upload_to=task.models.task_asset_upload_to, verbose_name='文件')),
|
||||
('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='assets', to='task.task')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '任务素材',
|
||||
'verbose_name_plural': '任务素材',
|
||||
'unique_together': {('task', 'name')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,28 @@
|
||||
# Generated by Codex on 2026-05-06
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
("task", "0007_taskasset"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="challenge",
|
||||
name="author",
|
||||
field=models.ForeignKey(
|
||||
blank=True,
|
||||
null=True,
|
||||
on_delete=django.db.models.deletion.SET_NULL,
|
||||
related_name="authored_challenges",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
verbose_name="出题人",
|
||||
),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,28 @@
|
||||
# Generated by Django 6.0.1 on 2026-06-07 11:17
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task', '0008_challenge_author'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='task',
|
||||
name='example_css',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='示例CSS'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='task',
|
||||
name='example_html',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='示例HTML'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='task',
|
||||
name='example_js',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='示例JS'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,37 @@
|
||||
# Generated by Django 6.0.1 on 2026-08-14 15:13
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('task', '0009_task_example_css_task_example_html_task_example_js'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='task',
|
||||
name='task_type',
|
||||
field=models.CharField(choices=[('challenge', '挑战'), ('tutorial', '教程'), ('creation', '创作')], editable=False, max_length=20, verbose_name='类型'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Creation',
|
||||
fields=[
|
||||
('task_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='task.task')),
|
||||
('html', models.TextField(blank=True, default='', verbose_name='HTML代码')),
|
||||
('css', models.TextField(blank=True, default='', verbose_name='CSS代码')),
|
||||
('js', models.TextField(blank=True, default='', verbose_name='JS代码')),
|
||||
('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='creations', to=settings.AUTH_USER_MODEL, verbose_name='创作者')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '创作',
|
||||
'verbose_name_plural': '创作',
|
||||
'ordering': ('-created',),
|
||||
},
|
||||
bases=('task.task',),
|
||||
),
|
||||
]
|
||||
Whitespace-only changes.
Reference in new issue
Block a user