chore: 将后端移动到 api/ 目录,准备合并为单仓库

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-26 16:01:25 +08:00
1 parent e172ffc0b3
commit 0591eda56f
244 files changed

No files matched your search

+58
View File
@@ -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='通过分数线'),
),
]
+29
View File
@@ -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',),
),
]
View File
Whitespace-only changes.