diff --git a/db/migrations/0001_initial.py b/db/migrations/0001_initial.py new file mode 100644 index 000000000..3afe08d3b --- /dev/null +++ b/db/migrations/0001_initial.py @@ -0,0 +1,52 @@ +# Generated by Django 6.0.5 on 2026-05-09 12:00 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Guild', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, unique=True)), + ('descriptions', models.TextField(null=True)), + ], + ), + migrations.CreateModel( + name='Raise', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, unique=True)), + ('descriptions', models.TextField(blank=True)), + ], + ), + migrations.CreateModel( + name='Player', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('nickname', models.CharField(max_length=255, unique=True)), + ('email', models.EmailField(max_length=255, unique=True)), + ('bio', models.CharField(max_length=255)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('guild', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='db.guild')), + ('race', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='db.raise')), + ], + ), + migrations.CreateModel( + name='Skill', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=255, unique=True)), + ('bonus', models.CharField(max_length=255)), + ('race', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='db.raise')), + ], + ), + ] diff --git a/db/migrations/0002_rename_raise_race_and_more.py b/db/migrations/0002_rename_raise_race_and_more.py new file mode 100644 index 000000000..d9aacafcb --- /dev/null +++ b/db/migrations/0002_rename_raise_race_and_more.py @@ -0,0 +1,38 @@ +# Generated by Django 6.0.5 on 2026-05-09 13:25 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('db', '0001_initial'), + ] + + operations = [ + migrations.RenameModel( + old_name='Raise', + new_name='Race', + ), + migrations.RenameField( + model_name='guild', + old_name='descriptions', + new_name='description', + ), + migrations.RenameField( + model_name='race', + old_name='descriptions', + new_name='description', + ), + migrations.AlterField( + model_name='player', + name='email', + field=models.EmailField(max_length=255), + ), + migrations.AlterField( + model_name='player', + name='guild', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='db.guild'), + ), + ] diff --git a/db/migrations/0003_alter_player_guild_alter_player_race_and_more.py b/db/migrations/0003_alter_player_guild_alter_player_race_and_more.py new file mode 100644 index 000000000..a4e3eb4f7 --- /dev/null +++ b/db/migrations/0003_alter_player_guild_alter_player_race_and_more.py @@ -0,0 +1,29 @@ +# Generated by Django 6.0.5 on 2026-05-09 13:41 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('db', '0002_rename_raise_race_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='player', + name='guild', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='players', to='db.guild'), + ), + migrations.AlterField( + model_name='player', + name='race', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='players', to='db.race'), + ), + migrations.AlterField( + model_name='skill', + name='race', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='skills', to='db.race'), + ), + ] diff --git a/db/models.py b/db/models.py index 137941ffa..dc601fa97 100644 --- a/db/models.py +++ b/db/models.py @@ -1 +1,42 @@ from django.db import models + + +class Race(models.Model): + name = models.CharField(max_length=255, unique=True) + description = models.TextField(blank=True) + + +class Skill(models.Model): + name = models.CharField(max_length=255, unique=True) + bonus = models.CharField(max_length=255) + race = models.ForeignKey( + Race, + on_delete=models.CASCADE, + related_name="skills" + ) + + +class Guild(models.Model): + name = models.CharField(max_length=255, unique=True) + description = models.TextField(null=True) + + +class Player(models.Model): + nickname = models.CharField(max_length=255, unique=True) + email = models.EmailField(max_length=255) + bio = models.CharField(max_length=255) + + race = models.ForeignKey( + Race, + on_delete=models.CASCADE, + related_name="players" + ) + + guild = models.ForeignKey( + Guild, + on_delete=models.SET_NULL, + null=True, + related_name="players" + ) + + created_at = models.DateTimeField(auto_now_add=True) diff --git a/main.py b/main.py index e71f55d89..b0018d412 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,54 @@ +import json + import init_django_orm # noqa: F401 from db.models import Race, Skill, Player, Guild def main() -> None: - pass + with open("players.json", "r") as file: + players = json.load(file) + + for nickname, player_data in players.items(): + + race_data = player_data["race"] + + race, _ = Race.objects.get_or_create( + name=race_data["name"], + defaults={ + "description": race_data.get("description", "") + } + ) + + for skill_data in race_data.get("skills", []): + Skill.objects.get_or_create( + name=skill_data["name"], + defaults={ + "bonus": skill_data["bonus"], + "race": race + } + ) + + guild_data = player_data.get("guild") + + guild = None + if guild_data: + guild, _ = Guild.objects.get_or_create( + name=guild_data["name"], + defaults={ + "description": guild_data.get("description") + } + ) + + Player.objects.get_or_create( + nickname=nickname, + defaults={ + "email": player_data["email"], + "bio": player_data["bio"], + "race": race, + "guild": guild, + } + ) if __name__ == "__main__":