Files
offline-db/content/migrations/0011_jikan_api_fields.py
2026-01-23 23:38:57 +03:00

157 lines
6.8 KiB
Python

# Generated by Django 5.1.6 on 2026-01-23 18:41
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('content', '0010_watchparty_max_participants'),
]
operations = [
migrations.CreateModel(
name='Character',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('mal_id', models.PositiveIntegerField(unique=True, verbose_name='MyAnimeList Character ID')),
('name', models.CharField(max_length=255)),
('name_kanji', models.CharField(blank=True, max_length=255)),
('image_url', models.URLField(blank=True, null=True)),
('about', models.TextField(blank=True)),
],
options={
'verbose_name': 'Character',
'verbose_name_plural': 'Characters',
'ordering': ['name'],
},
),
migrations.AlterModelOptions(
name='anime',
options={'ordering': ['-created_at'], 'verbose_name': 'Anime', 'verbose_name_plural': 'Animes'},
),
migrations.AddField(
model_name='anime',
name='aired_from',
field=models.DateField(blank=True, null=True),
),
migrations.AddField(
model_name='anime',
name='aired_to',
field=models.DateField(blank=True, null=True),
),
migrations.AddField(
model_name='anime',
name='banner_image',
field=models.URLField(blank=True, null=True, verbose_name='Banner Image'),
),
migrations.AddField(
model_name='anime',
name='duration',
field=models.CharField(blank=True, help_text="e.g., '24 min per ep'", max_length=50),
),
migrations.AddField(
model_name='anime',
name='english_title',
field=models.CharField(blank=True, max_length=255, verbose_name='English Title'),
),
migrations.AddField(
model_name='anime',
name='japanese_title',
field=models.CharField(blank=True, max_length=255, verbose_name='Japanese Title'),
),
migrations.AddField(
model_name='anime',
name='mal_id',
field=models.PositiveIntegerField(blank=True, null=True, unique=True, verbose_name='MyAnimeList ID'),
),
migrations.AddField(
model_name='anime',
name='members',
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='MAL Members'),
),
migrations.AddField(
model_name='anime',
name='popularity',
field=models.PositiveIntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='anime',
name='rank',
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='MAL Rank'),
),
migrations.AddField(
model_name='anime',
name='rating',
field=models.CharField(blank=True, help_text="e.g., 'PG-13', 'R'", max_length=50),
),
migrations.AddField(
model_name='anime',
name='score',
field=models.DecimalField(blank=True, decimal_places=2, max_digits=4, null=True, verbose_name='MAL Score'),
),
migrations.AddField(
model_name='anime',
name='source',
field=models.CharField(blank=True, help_text='Manga, Light Novel, Original, etc.', max_length=100),
),
migrations.AddField(
model_name='anime',
name='status',
field=models.CharField(blank=True, choices=[('Currently Airing', 'Currently Airing'), ('Finished Airing', 'Finished Airing'), ('Not yet aired', 'Not yet aired')], max_length=50),
),
migrations.AddField(
model_name='anime',
name='studio',
field=models.CharField(blank=True, max_length=255),
),
migrations.AddField(
model_name='anime',
name='total_episodes',
field=models.PositiveIntegerField(blank=True, null=True),
),
migrations.AddField(
model_name='anime',
name='updated_at',
field=models.DateTimeField(auto_now=True),
),
migrations.CreateModel(
name='ExternalSource',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('source_type', models.CharField(choices=[('hianime', 'HiAnime'), ('zoro', 'Zoro'), ('gogoanime', 'GogoAnime'), ('other', 'Other')], max_length=50)),
('embed_url', models.URLField(help_text='Embed/iframe URL')),
('quality', models.CharField(blank=True, max_length=20)),
('language', models.CharField(default='sub', help_text='sub or dub', max_length=10)),
('is_working', models.BooleanField(default=True)),
('last_checked', models.DateTimeField(auto_now=True)),
('created_at', models.DateTimeField(auto_now_add=True)),
('episode', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='external_sources', to='content.episode')),
],
options={
'verbose_name': 'External Source',
'verbose_name_plural': 'External Sources',
'ordering': ['-created_at'],
},
),
migrations.CreateModel(
name='AnimeCharacter',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('role', models.CharField(choices=[('Main', 'Main'), ('Supporting', 'Supporting')], default='Supporting', max_length=20)),
('voice_actor_name', models.CharField(blank=True, max_length=255)),
('voice_actor_language', models.CharField(blank=True, default='Japanese', max_length=50)),
('voice_actor_image', models.URLField(blank=True, null=True)),
('anime', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='anime_characters', to='content.anime')),
('character', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='anime_appearances', to='content.character')),
],
options={
'verbose_name': 'Anime Character',
'verbose_name_plural': 'Anime Characters',
'ordering': ['role', 'character__name'],
'unique_together': {('anime', 'character')},
},
),
]