Eliminates explicit index definitions and db_index usage from Django models and migrations, relying on default indexes and constraints. This simplifies model definitions and migration files, reducing maintenance overhead and potential redundancy.
245 lines
13 KiB
Python
245 lines
13 KiB
Python
# Generated by Django 5.2.7 on 2025-10-13 00:36
|
|
from __future__ import annotations
|
|
|
|
import django.db.models.deletion
|
|
from django.db import migrations, models
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
"""Initial migration.
|
|
|
|
Args:
|
|
migrations (migrations.Migration): The base class for all migrations.
|
|
"""
|
|
|
|
initial = True
|
|
|
|
dependencies = []
|
|
|
|
operations = [
|
|
migrations.CreateModel(
|
|
name="Channel",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.TextField(help_text="The unique Twitch identifier for the channel.", primary_key=True, serialize=False, verbose_name="Channel ID"),
|
|
),
|
|
("name", models.TextField(help_text="The lowercase username of the channel.", verbose_name="Username")),
|
|
("display_name", models.TextField(help_text="The display name of the channel (with proper capitalization).", verbose_name="Display Name")),
|
|
("added_at", models.DateTimeField(auto_now_add=True, help_text="Timestamp when this channel record was created.")),
|
|
("updated_at", models.DateTimeField(auto_now=True, help_text="Timestamp when this channel record was last updated.")),
|
|
],
|
|
options={
|
|
"ordering": ["display_name"],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="DropBenefit",
|
|
fields=[
|
|
("id", models.TextField(help_text="Unique Twitch identifier for the benefit.", primary_key=True, serialize=False)),
|
|
("name", models.TextField(blank=True, default="N/A", help_text="Name of the drop benefit.")),
|
|
("image_asset_url", models.URLField(blank=True, default="", help_text="URL to the benefit's image asset.", max_length=500)),
|
|
(
|
|
"image_file",
|
|
models.FileField(blank=True, help_text="Locally cached benefit image served from this site.", null=True, upload_to="benefits/images/"),
|
|
),
|
|
(
|
|
"created_at",
|
|
models.DateTimeField(help_text="Timestamp when the benefit was created. This is from Twitch API and not auto-generated.", null=True),
|
|
),
|
|
("entitlement_limit", models.PositiveIntegerField(default=1, help_text="Maximum number of times this benefit can be earned.")),
|
|
("is_ios_available", models.BooleanField(default=False, help_text="Whether the benefit is available on iOS.")),
|
|
("distribution_type", models.TextField(blank=True, default="", help_text="Type of distribution for this benefit.", max_length=50)),
|
|
("added_at", models.DateTimeField(auto_now_add=True, help_text="Timestamp when this benefit record was created.")),
|
|
("updated_at", models.DateTimeField(auto_now=True, help_text="Timestamp when this benefit record was last updated.")),
|
|
],
|
|
options={
|
|
"ordering": ["-created_at"],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="Game",
|
|
fields=[
|
|
("id", models.TextField(primary_key=True, serialize=False, verbose_name="Game ID")),
|
|
("slug", models.TextField(blank=True, default="", help_text="Short unique identifier for the game.", max_length=200, verbose_name="Slug")),
|
|
("name", models.TextField(blank=True, default="", verbose_name="Name")),
|
|
("display_name", models.TextField(blank=True, default="", verbose_name="Display name")),
|
|
("box_art", models.URLField(blank=True, default="", max_length=500, verbose_name="Box art URL")),
|
|
(
|
|
"box_art_file",
|
|
models.FileField(blank=True, help_text="Locally cached box art image served from this site.", null=True, upload_to="games/box_art/"),
|
|
),
|
|
("added_at", models.DateTimeField(auto_now_add=True, help_text="Timestamp when this game record was created.")),
|
|
("updated_at", models.DateTimeField(auto_now=True, help_text="Timestamp when this game record was last updated.")),
|
|
],
|
|
options={
|
|
"ordering": ["display_name"],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="Organization",
|
|
fields=[
|
|
(
|
|
"id",
|
|
models.TextField(
|
|
help_text="The unique Twitch identifier for the organization.", primary_key=True, serialize=False, verbose_name="Organization ID"
|
|
),
|
|
),
|
|
("name", models.TextField(help_text="Display name of the organization.", unique=True, verbose_name="Name")),
|
|
("added_at", models.DateTimeField(auto_now_add=True, help_text="Timestamp when this organization record was created.")),
|
|
("updated_at", models.DateTimeField(auto_now=True, help_text="Timestamp when this organization record was last updated.")),
|
|
],
|
|
options={
|
|
"ordering": ["name"],
|
|
},
|
|
),
|
|
migrations.CreateModel(
|
|
name="DropBenefitEdge",
|
|
fields=[
|
|
("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
|
|
("entitlement_limit", models.PositiveIntegerField(default=1, help_text="Max times this benefit can be claimed for this drop.")),
|
|
("added_at", models.DateTimeField(auto_now_add=True, help_text="Timestamp when this drop-benefit edge was created.")),
|
|
("updated_at", models.DateTimeField(auto_now=True, help_text="Timestamp when this drop-benefit edge was last updated.")),
|
|
(
|
|
"benefit",
|
|
models.ForeignKey(help_text="The benefit in this relationship.", on_delete=django.db.models.deletion.CASCADE, to="twitch.dropbenefit"),
|
|
),
|
|
],
|
|
),
|
|
migrations.CreateModel(
|
|
name="DropCampaign",
|
|
fields=[
|
|
("id", models.TextField(help_text="Unique Twitch identifier for the campaign.", primary_key=True, serialize=False)),
|
|
("name", models.TextField(help_text="Name of the drop campaign.")),
|
|
("description", models.TextField(blank=True, help_text="Detailed description of the campaign.")),
|
|
("details_url", models.URLField(blank=True, default="", help_text="URL with campaign details.", max_length=500)),
|
|
("account_link_url", models.URLField(blank=True, default="", help_text="URL to link a Twitch account for the campaign.", max_length=500)),
|
|
("image_url", models.URLField(blank=True, default="", help_text="URL to an image representing the campaign.", max_length=500)),
|
|
(
|
|
"image_file",
|
|
models.FileField(blank=True, help_text="Locally cached campaign image served from this site.", null=True, upload_to="campaigns/images/"),
|
|
),
|
|
("start_at", models.DateTimeField(blank=True, help_text="Datetime when the campaign starts.", null=True)),
|
|
("end_at", models.DateTimeField(blank=True, help_text="Datetime when the campaign ends.", null=True)),
|
|
("is_account_connected", models.BooleanField(default=False, help_text="Indicates if the user account is linked.")),
|
|
("allow_is_enabled", models.BooleanField(default=True, help_text="Whether the campaign allows participation.")),
|
|
("added_at", models.DateTimeField(auto_now_add=True, help_text="Timestamp when this campaign record was created.")),
|
|
("updated_at", models.DateTimeField(auto_now=True, help_text="Timestamp when this campaign record was last updated.")),
|
|
(
|
|
"allow_channels",
|
|
models.ManyToManyField(
|
|
blank=True,
|
|
help_text="Channels that are allowed to participate in this campaign.",
|
|
related_name="allowed_campaigns",
|
|
to="twitch.channel",
|
|
),
|
|
),
|
|
(
|
|
"game",
|
|
models.ForeignKey(
|
|
help_text="Game associated with this campaign.",
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="drop_campaigns",
|
|
to="twitch.game",
|
|
verbose_name="Game",
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"ordering": ["-start_at"],
|
|
},
|
|
),
|
|
migrations.AddField(
|
|
model_name="game",
|
|
name="owner",
|
|
field=models.ForeignKey(
|
|
blank=True,
|
|
help_text="The organization that owns this game.",
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="games",
|
|
to="twitch.organization",
|
|
verbose_name="Organization",
|
|
),
|
|
),
|
|
migrations.CreateModel(
|
|
name="TimeBasedDrop",
|
|
fields=[
|
|
("id", models.TextField(help_text="Unique Twitch identifier for the time-based drop.", primary_key=True, serialize=False)),
|
|
("name", models.TextField(help_text="Name of the time-based drop.")),
|
|
(
|
|
"required_minutes_watched",
|
|
models.PositiveIntegerField(blank=True, help_text="Minutes required to watch before earning this drop.", null=True),
|
|
),
|
|
("required_subs", models.PositiveIntegerField(default=0, help_text="Number of subscriptions required to unlock this drop.")),
|
|
("start_at", models.DateTimeField(blank=True, help_text="Datetime when this drop becomes available.", null=True)),
|
|
("end_at", models.DateTimeField(blank=True, help_text="Datetime when this drop expires.", null=True)),
|
|
("added_at", models.DateTimeField(auto_now_add=True, help_text="Timestamp when this time-based drop record was created.")),
|
|
("updated_at", models.DateTimeField(auto_now=True, help_text="Timestamp when this time-based drop record was last updated.")),
|
|
(
|
|
"benefits",
|
|
models.ManyToManyField(
|
|
help_text="Benefits unlocked by this drop.", related_name="drops", through="twitch.DropBenefitEdge", to="twitch.dropbenefit"
|
|
),
|
|
),
|
|
(
|
|
"campaign",
|
|
models.ForeignKey(
|
|
help_text="The campaign this drop belongs to.",
|
|
on_delete=django.db.models.deletion.CASCADE,
|
|
related_name="time_based_drops",
|
|
to="twitch.dropcampaign",
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"ordering": ["start_at"],
|
|
},
|
|
),
|
|
migrations.AddField(
|
|
model_name="dropbenefitedge",
|
|
name="drop",
|
|
field=models.ForeignKey(
|
|
help_text="The time-based drop in this relationship.", on_delete=django.db.models.deletion.CASCADE, to="twitch.timebaseddrop"
|
|
),
|
|
),
|
|
migrations.CreateModel(
|
|
name="TwitchGameData",
|
|
fields=[
|
|
("id", models.TextField(primary_key=True, serialize=False, verbose_name="Twitch Game ID")),
|
|
("name", models.TextField(blank=True, default="", verbose_name="Name")),
|
|
(
|
|
"box_art_url",
|
|
models.URLField(
|
|
blank=True,
|
|
default="",
|
|
help_text="URL template with {width}x{height} placeholders for the box art image.",
|
|
max_length=500,
|
|
verbose_name="Box art URL",
|
|
),
|
|
),
|
|
("igdb_id", models.TextField(blank=True, default="", verbose_name="IGDB ID")),
|
|
("added_at", models.DateTimeField(auto_now_add=True, help_text="Record creation time.")),
|
|
("updated_at", models.DateTimeField(auto_now=True, help_text="Record last update time.")),
|
|
(
|
|
"game",
|
|
models.ForeignKey(
|
|
blank=True,
|
|
help_text="Optional link to the local Game record for this Twitch game.",
|
|
null=True,
|
|
on_delete=django.db.models.deletion.SET_NULL,
|
|
related_name="twitch_game_data",
|
|
to="twitch.game",
|
|
verbose_name="Game",
|
|
),
|
|
),
|
|
],
|
|
options={
|
|
"ordering": ["name"],
|
|
},
|
|
),
|
|
migrations.AddConstraint(
|
|
model_name="dropbenefitedge",
|
|
constraint=models.UniqueConstraint(fields=("drop", "benefit"), name="unique_drop_benefit"),
|
|
),
|
|
]
|