added data

This commit is contained in:
2023-11-30 16:56:29 -05:00
parent 31f9f0dca0
commit 557ecf333c
8 changed files with 264 additions and 18 deletions

View File

@@ -9,7 +9,8 @@ services:
- ./server:/usr/src/app
environment:
- DEBUG=1
command: python manage.py runserver 0.0.0.0:8000
command: >
sh -c "python manage.py makemigrations && python manage.py migrate && python populate_data.py && python manage.py runserver 0.0.0.0:8000"
frontend:
build: ./client

106
server/populate_data.py Normal file
View File

@@ -0,0 +1,106 @@
import os
import django
from django.db import transaction
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
django.setup()
from server.models import (
Game,
Guild,
Player,
PlayerGameProfile,
WowProfile,
ValorantProfile,
PlayerGuild,
)
def populate_games():
games = ["World of Warcraft", "Valorant"]
for game in games:
g = Game.objects.get_or_create(name=game)[0]
def populate_guilds():
guilds = ["Gamers", "Epic Nerds"]
for guild in guilds:
g = Guild.objects.get_or_create(name=guild)[0]
def populate_players():
players = ["Pixel", "Zman", "Skip"]
for player in players:
p = Player.objects.get_or_create(name=player)[0]
def populate_player_guilds():
player_guilds = [
{"player": "Pixel", "guild": "Gamers"},
{"player": "Zman", "guild": "Gamers"},
{"player": "Skip", "guild": "Epic Nerds"},
]
for profile in player_guilds:
p = PlayerGuild.objects.get_or_create(
player=Player.objects.get(name=profile["player"]),
guild=Guild.objects.get(name=profile["guild"]),
)[0]
def populate_player_game_profiles():
player_game_profiles = [
{"player": "Pixel", "game": "World of Warcraft"},
{"player": "Zman", "game": "World of Warcraft"},
{"player": "Skip", "game": "Valorant"},
{"player": "Skip", "game": "World of Warcraft"},
]
for profile in player_game_profiles:
p = PlayerGameProfile.objects.get_or_create(
player=Player.objects.get(name=profile["player"]),
game=Game.objects.get(name=profile["game"]),
)[0]
def populate_wow_profiles():
wow_profiles = [
{"player": "Pixel", "level": 60, "class_name": "Mage"},
{"player": "Zman", "level": 60, "class_name": "Warrior"},
{"player": "Skip", "level": 60, "class_name": "Rogue"},
]
for profile in wow_profiles:
p = WowProfile.objects.get_or_create(
player_game_profile=PlayerGameProfile.objects.get(
player=Player.objects.get(name=profile["player"]),
game=Game.objects.get(name="World of Warcraft"),
),
level=profile["level"],
class_name=profile["class_name"],
)[0]
def populate_valorant_profiles():
valorant_profiles = [{"player": "Skip", "rank": "Diamond"}]
for profile in valorant_profiles:
p = ValorantProfile.objects.get_or_create(
player_game_profile=PlayerGameProfile.objects.get(
player=Player.objects.get(name=profile["player"]),
game=Game.objects.get(name="Valorant"),
),
rank=profile["rank"],
)[0]
def populate():
with transaction.atomic():
populate_games()
populate_guilds()
populate_players()
populate_player_game_profiles()
populate_wow_profiles()
populate_valorant_profiles()
if __name__ == "__main__":
print("Populating script!")
populate()
print("Population complete!")

View File

@@ -0,0 +1,43 @@
# Generated by Django 4.2.7 on 2023-11-30 21:50
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('server', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='game',
name='id',
field=models.AutoField(primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='guild',
name='id',
field=models.AutoField(primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='player',
name='id',
field=models.AutoField(primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='playergameprofile',
name='id',
field=models.AutoField(primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='valorantprofile',
name='id',
field=models.AutoField(primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='wowprofile',
name='id',
field=models.AutoField(primary_key=True, serialize=False),
),
]

View File

@@ -0,0 +1,31 @@
# Generated by Django 4.2.7 on 2023-11-30 21:55
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('server', '0002_alter_game_id_alter_guild_id_alter_player_id_and_more'),
]
operations = [
migrations.RemoveField(
model_name='player',
name='guild',
),
migrations.CreateModel(
name='PlayerGuild',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('creation_date', models.DateTimeField(auto_now_add=True, verbose_name='date created')),
('guild', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='players', to='server.guild')),
('player', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='guilds', to='server.player')),
],
options={
'verbose_name': 'Player Guild',
'verbose_name_plural': 'Player Guilds',
},
),
]

View File

@@ -2,32 +2,48 @@ from django.db import models
class Guild(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200)
tag = models.CharField(max_length=10)
creation_date = models.DateTimeField("date created", auto_now_add=True)
def __str__(self):
return f"{self.name} [{self.tag}]"
class Meta:
verbose_name = "Guild"
verbose_name_plural = "Guilds"
class Player(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200)
guild = models.ForeignKey(Guild, on_delete=models.CASCADE, related_name="players")
creation_date = models.DateTimeField("date created", auto_now_add=True)
def __str__(self):
return self.name
class Meta:
verbose_name = "Player"
verbose_name_plural = "Players"
class PlayerGuild(models.Model):
id = models.AutoField(primary_key=True)
player = models.ForeignKey(Player, on_delete=models.CASCADE, related_name="guilds")
guild = models.ForeignKey(Guild, on_delete=models.CASCADE, related_name="players")
creation_date = models.DateTimeField("date created", auto_now_add=True)
def __str__(self):
return f"{self.player} - {self.guild}"
class Meta:
verbose_name = "Player Guild"
verbose_name_plural = "Player Guilds"
class Game(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200)
creation_date = models.DateTimeField("date created", auto_now_add=True)
@@ -40,6 +56,7 @@ class Game(models.Model):
class PlayerGameProfile(models.Model):
id = models.AutoField(primary_key=True)
player = models.ForeignKey(
Player, on_delete=models.CASCADE, related_name="game_profiles"
)
@@ -57,6 +74,7 @@ class PlayerGameProfile(models.Model):
class WowProfile(models.Model):
id = models.AutoField(primary_key=True)
player_game_profile = models.OneToOneField(
PlayerGameProfile, on_delete=models.CASCADE, related_name="wow_profile"
)
@@ -66,13 +84,14 @@ class WowProfile(models.Model):
def __str__(self):
return f"{self.player_game_profile.player} - {self.player_game_profile.game}"
class Meta:
verbose_name = "WoW Profile"
verbose_name_plural = "WoW Profiles"
class ValorantProfile(models.Model):
id = models.AutoField(primary_key=True)
player_game_profile = models.OneToOneField(
PlayerGameProfile, on_delete=models.CASCADE, related_name="valorant_profile"
)
@@ -81,7 +100,7 @@ class ValorantProfile(models.Model):
def __str__(self):
return f"{self.player_game_profile.player} - {self.player_game_profile.game}"
class Meta:
verbose_name = "Valorant Profile"
verbose_name_plural = "Valorant Profiles"

View File

@@ -1,5 +1,13 @@
from rest_framework import serializers
from .models import Guild, Player, Game, PlayerGameProfile, WowProfile, ValorantProfile
from .models import (
Guild,
Player,
Game,
PlayerGameProfile,
WowProfile,
ValorantProfile,
PlayerGuild,
)
class GuildSerializer(serializers.ModelSerializer):
@@ -42,3 +50,10 @@ class ValorantProfileSerializer(serializers.ModelSerializer):
model = ValorantProfile
fields = ["id", "player_game_profile", "rank", "creation_date"]
read_only_fields = ["id", "creation_date"]
class PlayerGuildSerializer(serializers.ModelSerializer):
class Meta:
model = PlayerGuild
fields = ["id", "player", "guild", "creation_date"]
read_only_fields = ["id", "creation_date"]

View File

@@ -1,16 +1,26 @@
from django.urls import path, include
from django.contrib import admin
from rest_framework.routers import DefaultRouter
from .views import GameViewSet, GuildViewSet, PlayerViewSet, PlayerGameProfileViewSet, WowProfileViewSet, ValorantProfileViewSet, hello_world
from .views import (
GameViewSet,
GuildViewSet,
PlayerViewSet,
PlayerGameProfileViewSet,
WowProfileViewSet,
ValorantProfileViewSet,
hello_world,
)
router = DefaultRouter()
router.register(r'games', GameViewSet)
router.register(r'guilds', GuildViewSet)
router.register(r'players', PlayerViewSet)
router.register(r'player-game-profiles', PlayerGameProfileViewSet)
router.register(r'wow-profiles', WowProfileViewSet)
router.register(r'valorant-profiles', ValorantProfileViewSet)
router.register(r"games", GameViewSet)
router.register(r"guilds", GuildViewSet)
router.register(r"players", PlayerViewSet)
router.register(r"player-game-profiles", PlayerGameProfileViewSet)
router.register(r"wow-profiles", WowProfileViewSet)
router.register(r"valorant-profiles", ValorantProfileViewSet)
urlpatterns = [
path('', hello_world, name='index'),
path('', include(router.urls)),
path("", hello_world, name="index"),
path("", include(router.urls)),
path("admin/", admin.site.urls),
]

View File

@@ -1,7 +1,23 @@
from django.http import HttpResponse
from rest_framework import viewsets
from .models import Game, Guild, Player, PlayerGameProfile, WowProfile, ValorantProfile
from .serializers import GameSerializer, GuildSerializer, PlayerSerializer, PlayerGameProfileSerializer, WowProfileSerializer, ValorantProfileSerializer
from .models import (
Game,
Guild,
Player,
PlayerGameProfile,
WowProfile,
ValorantProfile,
PlayerGuild,
)
from .serializers import (
GameSerializer,
GuildSerializer,
PlayerSerializer,
PlayerGameProfileSerializer,
WowProfileSerializer,
ValorantProfileSerializer,
PlayerGuildSerializer,
)
def hello_world(request):
@@ -36,3 +52,8 @@ class WowProfileViewSet(viewsets.ModelViewSet):
class ValorantProfileViewSet(viewsets.ModelViewSet):
queryset = ValorantProfile.objects.all()
serializer_class = ValorantProfileSerializer
class PlayerGuildViewSet(viewsets.ModelViewSet):
queryset = PlayerGuild.objects.all()
serializer_class = PlayerGuildSerializer