schema upd
This commit is contained in:
parent
d9cb852964
commit
cd89bba8ad
@ -2,6 +2,9 @@ from django.db import models
|
|||||||
|
|
||||||
|
|
||||||
class Guild(models.Model):
|
class Guild(models.Model):
|
||||||
|
"""
|
||||||
|
This model is used to store the guild data.
|
||||||
|
"""
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
name = models.CharField(max_length=200)
|
name = models.CharField(max_length=200)
|
||||||
tag = models.CharField(max_length=10)
|
tag = models.CharField(max_length=10)
|
||||||
@ -16,6 +19,9 @@ class Guild(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class Player(models.Model):
|
class Player(models.Model):
|
||||||
|
"""
|
||||||
|
This model is used to store the player data.
|
||||||
|
"""
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
name = models.CharField(max_length=200)
|
name = models.CharField(max_length=200)
|
||||||
creation_date = models.DateTimeField("date created", auto_now_add=True)
|
creation_date = models.DateTimeField("date created", auto_now_add=True)
|
||||||
@ -29,9 +35,13 @@ class Player(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class PlayerGuild(models.Model):
|
class PlayerGuild(models.Model):
|
||||||
|
"""
|
||||||
|
This model is used to store the player's guild data.
|
||||||
|
"""
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
player = models.ForeignKey(Player, on_delete=models.CASCADE, related_name="guilds")
|
player = models.ForeignKey(Player, on_delete=models.CASCADE, related_name="guilds")
|
||||||
guild = models.ForeignKey(Guild, on_delete=models.CASCADE, related_name="players")
|
guild = models.ForeignKey(Guild, on_delete=models.CASCADE, related_name="players")
|
||||||
|
role = models.CharField(max_length=200) # admin, officer, member, etc. eventually tie to permissions and account stuff
|
||||||
creation_date = models.DateTimeField("date created", auto_now_add=True)
|
creation_date = models.DateTimeField("date created", auto_now_add=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
@ -43,6 +53,9 @@ class PlayerGuild(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class Game(models.Model):
|
class Game(models.Model):
|
||||||
|
"""
|
||||||
|
This model is used to store the game data.
|
||||||
|
"""
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
name = models.CharField(max_length=200)
|
name = models.CharField(max_length=200)
|
||||||
creation_date = models.DateTimeField("date created", auto_now_add=True)
|
creation_date = models.DateTimeField("date created", auto_now_add=True)
|
||||||
@ -55,7 +68,12 @@ class Game(models.Model):
|
|||||||
verbose_name_plural = "Games"
|
verbose_name_plural = "Games"
|
||||||
|
|
||||||
|
|
||||||
class PlayerGameProfile(models.Model):
|
class PlayerGameData(models.Model):
|
||||||
|
"""
|
||||||
|
This model is used to store the game data for a player.
|
||||||
|
Anything can be stored in the data field, but it will
|
||||||
|
be validated against the schema before being stored.
|
||||||
|
"""
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
player = models.ForeignKey(
|
player = models.ForeignKey(
|
||||||
Player, on_delete=models.CASCADE, related_name="game_profiles"
|
Player, on_delete=models.CASCADE, related_name="game_profiles"
|
||||||
@ -64,43 +82,53 @@ class PlayerGameProfile(models.Model):
|
|||||||
Game, on_delete=models.CASCADE, related_name="player_profiles"
|
Game, on_delete=models.CASCADE, related_name="player_profiles"
|
||||||
)
|
)
|
||||||
creation_date = models.DateTimeField("date created", auto_now_add=True)
|
creation_date = models.DateTimeField("date created", auto_now_add=True)
|
||||||
|
data = models.JSONField()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.player} - {self.game}"
|
return f"{self.player} - {self.game}"
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "Player Game Profile"
|
verbose_name = "Player Game Data"
|
||||||
verbose_name_plural = "Player Game Profiles"
|
verbose_name_plural = "Player Game Data"
|
||||||
|
|
||||||
|
|
||||||
class WowProfile(models.Model):
|
class GuildGameDataSchema(models.Model):
|
||||||
|
"""
|
||||||
|
This model is used to store the schema for the game data.
|
||||||
|
Right now it is associated with guild until we determine
|
||||||
|
which entity should own the schema.
|
||||||
|
|
||||||
|
Player Game Data will be validated against this schema.
|
||||||
|
"""
|
||||||
id = models.AutoField(primary_key=True)
|
id = models.AutoField(primary_key=True)
|
||||||
player_game_profile = models.OneToOneField(
|
guild = models.ForeignKey(
|
||||||
PlayerGameProfile, on_delete=models.CASCADE, related_name="wow_profile"
|
Guild, on_delete=models.CASCADE, related_name="schemas"
|
||||||
)
|
)
|
||||||
level = models.IntegerField()
|
game = models.ForeignKey(
|
||||||
class_name = models.CharField(max_length=200)
|
Game, on_delete=models.CASCADE, related_name="schemas"
|
||||||
|
)
|
||||||
|
schema = models.JSONField()
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.guild} - {self.game}"
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = "Guild Game Data Schema"
|
||||||
|
verbose_name_plural = "Guild Game Data Schemas"
|
||||||
|
|
||||||
|
|
||||||
|
class WowClasses(models.Model):
|
||||||
|
"""
|
||||||
|
Example of a model that could be used to pre-populate
|
||||||
|
dropdowns in the UI.
|
||||||
|
"""
|
||||||
|
id = models.AutoField(primary_key=True)
|
||||||
|
name = models.CharField(max_length=200)
|
||||||
creation_date = models.DateTimeField("date created", auto_now_add=True)
|
creation_date = models.DateTimeField("date created", auto_now_add=True)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.player_game_profile.player} - {self.player_game_profile.game}"
|
return self.name
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
verbose_name = "WoW Profile"
|
verbose_name = "WoW Class"
|
||||||
verbose_name_plural = "WoW Profiles"
|
verbose_name_plural = "WoW Classes"
|
||||||
|
|
||||||
|
|
||||||
class ValorantProfile(models.Model):
|
|
||||||
id = models.AutoField(primary_key=True)
|
|
||||||
player_game_profile = models.OneToOneField(
|
|
||||||
PlayerGameProfile, on_delete=models.CASCADE, related_name="valorant_profile"
|
|
||||||
)
|
|
||||||
rank = models.CharField(max_length=200)
|
|
||||||
creation_date = models.DateTimeField("date created", auto_now_add=True)
|
|
||||||
|
|
||||||
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"
|
|
@ -3,10 +3,10 @@ from .models import (
|
|||||||
Guild,
|
Guild,
|
||||||
Player,
|
Player,
|
||||||
Game,
|
Game,
|
||||||
PlayerGameProfile,
|
|
||||||
WowProfile,
|
|
||||||
ValorantProfile,
|
|
||||||
PlayerGuild,
|
PlayerGuild,
|
||||||
|
PlayerGameData,
|
||||||
|
GuildGameDataSchema,
|
||||||
|
WowClasses,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ class GuildSerializer(serializers.ModelSerializer):
|
|||||||
class PlayerSerializer(serializers.ModelSerializer):
|
class PlayerSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Player
|
model = Player
|
||||||
fields = ["id", "name", "guild", "creation_date"]
|
fields = ["id", "name", "creation_date"]
|
||||||
read_only_fields = ["id", "creation_date"]
|
read_only_fields = ["id", "creation_date"]
|
||||||
|
|
||||||
|
|
||||||
@ -31,25 +31,27 @@ class GameSerializer(serializers.ModelSerializer):
|
|||||||
read_only_fields = ["id", "creation_date"]
|
read_only_fields = ["id", "creation_date"]
|
||||||
|
|
||||||
|
|
||||||
class PlayerGameProfileSerializer(serializers.ModelSerializer):
|
class PlayerGameDataSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PlayerGameProfile
|
model = PlayerGameData
|
||||||
fields = ["id", "player", "game", "creation_date"]
|
fields = ["id", "player", "game", "creation_date", "data"]
|
||||||
read_only_fields = ["id", "creation_date"]
|
read_only_fields = ["id", "creation_date"]
|
||||||
|
|
||||||
|
def validate_data(self, value):
|
||||||
|
game_id = self.initial_data["game"]
|
||||||
|
# pull schema from guildgameschema
|
||||||
|
schema = GuildGameDataSchema.objects.get(game=game_id)
|
||||||
|
# validate data against schema
|
||||||
|
# if valid, return value
|
||||||
|
# if not valid, raise serializers.ValidationError("Invalid data")
|
||||||
|
return value
|
||||||
|
|
||||||
class WowProfileSerializer(serializers.ModelSerializer):
|
|
||||||
|
class GuildGameDataSchemaSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = WowProfile
|
model = GuildGameDataSchema
|
||||||
fields = ["id", "player_game_profile", "level", "class_name", "creation_date"]
|
fields = ["id", "guild", "game", "schema"]
|
||||||
read_only_fields = ["id", "creation_date"]
|
read_only_fields = ["id"]
|
||||||
|
|
||||||
|
|
||||||
class ValorantProfileSerializer(serializers.ModelSerializer):
|
|
||||||
class Meta:
|
|
||||||
model = ValorantProfile
|
|
||||||
fields = ["id", "player_game_profile", "rank", "creation_date"]
|
|
||||||
read_only_fields = ["id", "creation_date"]
|
|
||||||
|
|
||||||
|
|
||||||
class PlayerGuildSerializer(serializers.ModelSerializer):
|
class PlayerGuildSerializer(serializers.ModelSerializer):
|
||||||
@ -57,3 +59,10 @@ class PlayerGuildSerializer(serializers.ModelSerializer):
|
|||||||
model = PlayerGuild
|
model = PlayerGuild
|
||||||
fields = ["id", "player", "guild", "creation_date"]
|
fields = ["id", "player", "guild", "creation_date"]
|
||||||
read_only_fields = ["id", "creation_date"]
|
read_only_fields = ["id", "creation_date"]
|
||||||
|
|
||||||
|
|
||||||
|
class WowClassesSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = WowClasses
|
||||||
|
fields = ["id", "name", "creation_date"]
|
||||||
|
read_only_fields = ["id", "creation_date"]
|
Loading…
x
Reference in New Issue
Block a user