# Generated by Django 5.2 on 2025-05-01 00:45 from __future__ import annotations import django.contrib.auth.models import django.contrib.auth.validators import django.db.models.deletion import django.utils.timezone from django.db import migrations, models class Migration(migrations.Migration): """Initial migration for the core app.""" initial = True dependencies = [ ("auth", "0012_alter_user_first_name_max_length"), ] operations = [ migrations.CreateModel( name="Game", fields=[ ( "game_id", models.TextField(help_text="The Twitch ID of the game.", primary_key=True, serialize=False), ), ("game_url", models.URLField(blank=True, help_text="The URL to the game on Twitch.")), ("display_name", models.TextField(blank=True, help_text="The display name of the game.")), ("box_art_url", models.URLField(blank=True, help_text="URL to the box art of the game.")), ("slug", models.SlugField(blank=True, help_text="The slug for the game.")), ( "created_at", models.DateTimeField(auto_now_add=True, help_text="When the game was first added to the database."), ), ("modified_at", models.DateTimeField(auto_now=True, help_text="When the game was last modified.")), ], options={ "ordering": ["display_name"], }, ), migrations.CreateModel( name="Organization", fields=[ ( "org_id", models.TextField( help_text="The Twitch ID of the owner.", primary_key=True, serialize=False, unique=True, ), ), ("name", models.TextField(blank=True, help_text="The name of the owner.")), ("created_at", models.DateTimeField(auto_now_add=True)), ("modified_at", models.DateTimeField(auto_now=True)), ], options={ "ordering": ["name"], }, ), migrations.CreateModel( name="ScrapedJson", fields=[ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), ("json_data", models.JSONField(help_text="The JSON data from the Twitch API.", unique=True)), ("created_at", models.DateTimeField(auto_now_add=True)), ("modified_at", models.DateTimeField(auto_now=True)), ("imported_at", models.DateTimeField(null=True)), ], options={ "ordering": ["-created_at"], }, ), migrations.CreateModel( name="User", fields=[ ("id", models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), ("password", models.CharField(max_length=128, verbose_name="password")), ("last_login", models.DateTimeField(blank=True, null=True, verbose_name="last login")), ( "is_superuser", models.BooleanField( default=False, help_text="Designates that this user has all permissions without explicitly assigning them.", verbose_name="superuser status", ), ), ( "username", models.CharField( error_messages={"unique": "A user with that username already exists."}, help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name="username", ), ), ("first_name", models.CharField(blank=True, max_length=150, verbose_name="first name")), ("last_name", models.CharField(blank=True, max_length=150, verbose_name="last name")), ("email", models.EmailField(blank=True, max_length=254, verbose_name="email address")), ( "is_staff", models.BooleanField( default=False, help_text="Designates whether the user can log into this admin site.", verbose_name="staff status", ), ), ( "is_active", models.BooleanField( default=True, help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.", # noqa: E501 verbose_name="active", ), ), ("date_joined", models.DateTimeField(default=django.utils.timezone.now, verbose_name="date joined")), ( "groups", models.ManyToManyField( blank=True, help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.", # noqa: E501 related_name="user_set", related_query_name="user", to="auth.group", verbose_name="groups", ), ), ( "user_permissions", models.ManyToManyField( blank=True, help_text="Specific permissions for this user.", related_name="user_set", related_query_name="user", to="auth.permission", verbose_name="user permissions", ), ), ], options={ "ordering": ["username"], }, managers=[ ("objects", django.contrib.auth.models.UserManager()), ], ), migrations.CreateModel( name="DropCampaign", fields=[ ( "campaign_id", models.TextField( help_text="The Twitch ID of the drop campaign.", primary_key=True, serialize=False, unique=True, ), ), ( "account_link_url", models.URLField(blank=True, help_text="The URL to link accounts for the drop campaign."), ), ("description", models.TextField(blank=True, help_text="The description of the drop campaign.")), ("details_url", models.URLField(blank=True, help_text="The URL to the details of the drop campaign.")), ("end_at", models.DateTimeField(help_text="When the drop campaign ends.", null=True)), ("start_at", models.DateTimeField(help_text="When the drop campaign starts.", null=True)), ("image_url", models.URLField(blank=True, help_text="The URL to the image for the drop campaign.")), ("name", models.TextField(blank=True, help_text="The name of the drop campaign.")), ("status", models.TextField(blank=True, help_text="The status of the drop campaign.")), ( "created_at", models.DateTimeField( auto_now_add=True, help_text="When the drop campaign was first added to the database.", ), ), ( "modified_at", models.DateTimeField(auto_now=True, help_text="When the drop campaign was last modified."), ), ( "game", models.ForeignKey( help_text="The game associated with this campaign", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="drop_campaigns", to="core.game", ), ), ( "owner", models.ForeignKey( help_text="The organization running this campaign", null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="drop_campaigns", to="core.organization", ), ), ], options={ "ordering": ["end_at"], }, ), migrations.CreateModel( name="Benefit", fields=[ ( "benefit_id", models.TextField( help_text="Twitch's unique ID for the benefit", primary_key=True, serialize=False, unique=True, ), ), ( "twitch_created_at", models.DateTimeField(help_text="When the benefit was created on Twitch.", null=True), ), ( "entitlement_limit", models.PositiveBigIntegerField( default=1, help_text="How many times this benefit can be claimed per user", ), ), ("image_asset_url", models.URLField(blank=True, help_text="The URL to the image for the benefit.")), ("is_ios_available", models.BooleanField(help_text="If the benefit is farmable on iOS.", null=True)), ("name", models.TextField(blank=True, help_text="Name of the benefit/reward")), ("distribution_type", models.TextField(blank=True, help_text="The distribution type of the benefit.")), ("created_at", models.DateTimeField(auto_now_add=True)), ("modified_at", models.DateTimeField(auto_now=True)), ( "game", models.ForeignKey( null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="benefits", to="core.game", ), ), ( "owner_organization", models.ForeignKey( null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="benefits", to="core.organization", ), ), ], options={ "ordering": ["-twitch_created_at"], }, ), migrations.CreateModel( name="TimeBasedDrop", fields=[ ( "drop_id", models.TextField( help_text="The Twitch ID of the drop.", primary_key=True, serialize=False, unique=True, ), ), ( "required_subs", models.PositiveBigIntegerField(help_text="The number of subs required for the drop.", null=True), ), ("ends_at", models.DateTimeField(help_text="When the drop ends.", null=True)), ("name", models.TextField(blank=True, help_text="Name of the time-based drop")), ( "required_minutes_watched", models.PositiveBigIntegerField(help_text="The number of minutes watched required.", null=True), ), ("start_at", models.DateTimeField(help_text="Drop start time")), ("end_at", models.DateTimeField(help_text="Drop end time")), ( "created_at", models.DateTimeField(auto_now_add=True, help_text="When the drop was first added to the database."), ), ("modified_at", models.DateTimeField(auto_now=True, help_text="When the drop was last modified.")), ( "benefits", models.ManyToManyField( help_text="Benefits awarded by this drop", related_name="time_based_drops", to="core.benefit", ), ), ( "campaign", models.ForeignKey( help_text="The campaign this drop belongs to", on_delete=django.db.models.deletion.CASCADE, related_name="time_based_drops", to="core.dropcampaign", ), ), ], options={ "ordering": ["required_minutes_watched"], }, ), ]