Make Owner optional; use dateparser to parse dates; use json-repair to read JSON
This commit is contained in:
parent
ebd3633356
commit
6d5f014134
12 changed files with 858 additions and 453 deletions
|
|
@ -0,0 +1,272 @@
|
|||
# Generated by Django 5.2.5 on 2025-09-01 17:01
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('twitch', '0005_alter_timebaseddrop_end_at_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='dropbenefit',
|
||||
options={'ordering': ['-created_at']},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='dropcampaign',
|
||||
options={'ordering': ['-start_at']},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='game',
|
||||
options={'ordering': ['display_name']},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='organization',
|
||||
options={'ordering': ['name']},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='timebaseddrop',
|
||||
options={'ordering': ['start_at']},
|
||||
),
|
||||
migrations.RemoveIndex(
|
||||
model_name='dropbenefit',
|
||||
name='twitch_drop_game_id_a9209e_idx',
|
||||
),
|
||||
migrations.RemoveIndex(
|
||||
model_name='dropbenefit',
|
||||
name='twitch_drop_owner_o_45b4cc_idx',
|
||||
),
|
||||
migrations.RemoveIndex(
|
||||
model_name='dropcampaign',
|
||||
name='twitch_drop_game_id_868e70_idx',
|
||||
),
|
||||
migrations.RemoveIndex(
|
||||
model_name='dropcampaign',
|
||||
name='twitch_drop_owner_i_37241d_idx',
|
||||
),
|
||||
migrations.RemoveIndex(
|
||||
model_name='game',
|
||||
name='twitch_game_box_art_498a89_idx',
|
||||
),
|
||||
migrations.RemoveIndex(
|
||||
model_name='timebaseddrop',
|
||||
name='twitch_time_campaig_bbe349_idx',
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='dropbenefitedge',
|
||||
unique_together=set(),
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='dropbenefit',
|
||||
name='game',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='dropbenefit',
|
||||
name='owner_organization',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='dropcampaign',
|
||||
name='owner',
|
||||
),
|
||||
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.AlterField(
|
||||
model_name='dropbenefit',
|
||||
name='created_at',
|
||||
field=models.DateTimeField(db_index=True, help_text='Timestamp when the benefit was created. This is from Twitch API and not auto-generated.', null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropbenefit',
|
||||
name='distribution_type',
|
||||
field=models.CharField(blank=True, db_index=True, default='', help_text='Type of distribution for this benefit.', max_length=50),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropbenefit',
|
||||
name='entitlement_limit',
|
||||
field=models.PositiveIntegerField(default=1, help_text='Maximum number of times this benefit can be earned.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropbenefit',
|
||||
name='id',
|
||||
field=models.CharField(help_text='Unique Twitch identifier for the benefit.', max_length=64, primary_key=True, serialize=False),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropbenefit',
|
||||
name='image_asset_url',
|
||||
field=models.URLField(blank=True, default='', help_text="URL to the benefit's image asset.", max_length=500),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropbenefit',
|
||||
name='is_ios_available',
|
||||
field=models.BooleanField(default=False, help_text='Whether the benefit is available on iOS.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropbenefit',
|
||||
name='name',
|
||||
field=models.CharField(blank=True, db_index=True, default='N/A', help_text='Name of the drop benefit.', max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropbenefitedge',
|
||||
name='benefit',
|
||||
field=models.ForeignKey(help_text='The benefit in this relationship.', on_delete=django.db.models.deletion.CASCADE, to='twitch.dropbenefit'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
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.AlterField(
|
||||
model_name='dropbenefitedge',
|
||||
name='entitlement_limit',
|
||||
field=models.PositiveIntegerField(default=1, help_text='Max times this benefit can be claimed for this drop.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropcampaign',
|
||||
name='account_link_url',
|
||||
field=models.URLField(blank=True, default='', help_text='URL to link a Twitch account for the campaign.', max_length=500),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropcampaign',
|
||||
name='created_at',
|
||||
field=models.DateTimeField(auto_now_add=True, db_index=True, help_text='Timestamp when this campaign record was created.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropcampaign',
|
||||
name='description',
|
||||
field=models.TextField(blank=True, help_text='Detailed description of the campaign.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropcampaign',
|
||||
name='details_url',
|
||||
field=models.URLField(blank=True, default='', help_text='URL with campaign details.', max_length=500),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropcampaign',
|
||||
name='end_at',
|
||||
field=models.DateTimeField(blank=True, db_index=True, help_text='Datetime when the campaign ends.', null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropcampaign',
|
||||
name='game',
|
||||
field=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'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropcampaign',
|
||||
name='id',
|
||||
field=models.CharField(help_text='Unique Twitch identifier for the campaign.', max_length=255, primary_key=True, serialize=False),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropcampaign',
|
||||
name='image_url',
|
||||
field=models.URLField(blank=True, default='', help_text='URL to an image representing the campaign.', max_length=500),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropcampaign',
|
||||
name='is_account_connected',
|
||||
field=models.BooleanField(default=False, help_text='Indicates if the user account is linked.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropcampaign',
|
||||
name='name',
|
||||
field=models.CharField(db_index=True, help_text='Name of the drop campaign.', max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropcampaign',
|
||||
name='start_at',
|
||||
field=models.DateTimeField(blank=True, db_index=True, help_text='Datetime when the campaign starts.', null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dropcampaign',
|
||||
name='updated_at',
|
||||
field=models.DateTimeField(auto_now=True, help_text='Timestamp when this campaign record was last updated.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='game',
|
||||
name='box_art',
|
||||
field=models.URLField(blank=True, default='', max_length=500, verbose_name='Box art URL'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='game',
|
||||
name='display_name',
|
||||
field=models.CharField(blank=True, db_index=True, default='', max_length=255, verbose_name='Display name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='game',
|
||||
name='id',
|
||||
field=models.CharField(max_length=64, primary_key=True, serialize=False, verbose_name='Game ID'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='game',
|
||||
name='name',
|
||||
field=models.CharField(blank=True, db_index=True, default='', max_length=255, verbose_name='Name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='game',
|
||||
name='slug',
|
||||
field=models.CharField(blank=True, db_index=True, default='', help_text='Short unique identifier for the game.', max_length=200, verbose_name='Slug'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='organization',
|
||||
name='id',
|
||||
field=models.CharField(help_text='The unique Twitch identifier for the organization.', max_length=255, primary_key=True, serialize=False, verbose_name='Organization ID'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='organization',
|
||||
name='name',
|
||||
field=models.CharField(db_index=True, help_text='Display name of the organization.', max_length=255, unique=True, verbose_name='Name'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='timebaseddrop',
|
||||
name='benefits',
|
||||
field=models.ManyToManyField(help_text='Benefits unlocked by this drop.', related_name='drops', through='twitch.DropBenefitEdge', to='twitch.dropbenefit'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='timebaseddrop',
|
||||
name='campaign',
|
||||
field=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'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='timebaseddrop',
|
||||
name='end_at',
|
||||
field=models.DateTimeField(blank=True, db_index=True, help_text='Datetime when this drop expires.', null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='timebaseddrop',
|
||||
name='id',
|
||||
field=models.CharField(help_text='Unique Twitch identifier for the time-based drop.', max_length=64, primary_key=True, serialize=False),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='timebaseddrop',
|
||||
name='name',
|
||||
field=models.CharField(db_index=True, help_text='Name of the time-based drop.', max_length=255),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='timebaseddrop',
|
||||
name='required_minutes_watched',
|
||||
field=models.PositiveIntegerField(blank=True, db_index=True, help_text='Minutes required to watch before earning this drop.', null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='timebaseddrop',
|
||||
name='required_subs',
|
||||
field=models.PositiveIntegerField(default=0, help_text='Number of subscriptions required to unlock this drop.'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='timebaseddrop',
|
||||
name='start_at',
|
||||
field=models.DateTimeField(blank=True, db_index=True, help_text='Datetime when this drop becomes available.', null=True),
|
||||
),
|
||||
migrations.AddConstraint(
|
||||
model_name='dropbenefitedge',
|
||||
constraint=models.UniqueConstraint(fields=('drop', 'benefit'), name='unique_drop_benefit'),
|
||||
),
|
||||
migrations.AddConstraint(
|
||||
model_name='game',
|
||||
constraint=models.UniqueConstraint(fields=('slug',), name='unique_game_slug'),
|
||||
),
|
||||
]
|
||||
17
twitch/migrations/0007_remove_game_unique_game_slug.py
Normal file
17
twitch/migrations/0007_remove_game_unique_game_slug.py
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# Generated by Django 5.2.5 on 2025-09-01 17:06
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('twitch', '0006_alter_dropbenefit_options_alter_dropcampaign_options_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveConstraint(
|
||||
model_name='game',
|
||||
name='unique_game_slug',
|
||||
),
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue