diff --git a/db/migrations/0001_initial.py b/db/migrations/0001_initial.py new file mode 100644 index 000000000..982ea21a1 --- /dev/null +++ b/db/migrations/0001_initial.py @@ -0,0 +1,100 @@ +# Generated by Django 6.0.5 on 2026-05-11 12:38 + +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)), + ("description", models.TextField(null=True)), + ], + ), + migrations.CreateModel( + name="Race", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=255, unique=True)), + ("description", 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)), + ("bio", models.CharField(max_length=255)), + ("created_at", models.DateTimeField(auto_now_add=True)), + ( + "guild", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="db.guild", + ), + ), + ( + "race", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="db.race" + ), + ), + ], + ), + 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.race" + ), + ), + ], + ), + ] diff --git a/db/migrations/0002_alter_player_guild_alter_player_race_and_more.py b/db/migrations/0002_alter_player_guild_alter_player_race_and_more.py new file mode 100644 index 000000000..f610d8fdc --- /dev/null +++ b/db/migrations/0002_alter_player_guild_alter_player_race_and_more.py @@ -0,0 +1,42 @@ +# Generated by Django 6.0.5 on 2026-05-11 14:44 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("db", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="player", + name="guild", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="members", + 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..d9e4fb81d 100644 --- a/db/models.py +++ b/db/models.py @@ -1 +1,39 @@ 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="members" + ) + created_at = models.DateTimeField(auto_now_add=True) diff --git a/main.py b/main.py index e71f55d89..c9fda8e4a 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,39 @@ +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_info = json.load(file) + + for nickname, user_info in players_info.items(): + race_obj, _ = Race.objects.get_or_create( + name=user_info["race"]["name"], + defaults={"description": user_info["race"]["description"]} + ) + for skill_data in user_info["race"].get("skills", []): + Skill.objects.get_or_create( + name=skill_data["name"], + defaults={ + "bonus": skill_data["bonus"], + "race": race_obj + } + ) + guild_obj = None + if user_info.get("guild"): + guild_obj, _ = Guild.objects.get_or_create( + name=user_info["guild"]["name"], + defaults={"description": user_info["guild"]["description"]} + ) + Player.objects.create( + nickname=nickname, + email=user_info["email"], + bio=user_info["bio"], + race=race_obj, + guild=guild_obj + ) if __name__ == "__main__":