import uuid from django.contrib.contenttypes.models import ContentType from django.core import serializers from django.db import models class BaseModel(models.Model): id = models.UUIDField(default=uuid.uuid4, editable=False) created = models.DateTimeField(auto_now_add=True) updated = models.DateTimeField(auto_now=True) objects = models.Manager() class Meta: abstract = True def get_content_type(self): return ContentType.objects.get_for_model(self) def model_name(self): try: return self._meta.verbose_name except AttributeError: return "" def to_json(self): return serializers.serialize('json', [self, ]) class Account(BaseModel): class Meta: verbose_name = "account" verbose_name_plural = "accounts" username = models.CharField(max_length=100) password = models.CharField(max_length=100) email = models.CharField(max_length=100) last_login = models.DateTimeField() def __str__(self): return f"" class Planet(BaseModel): class Meta: verbose_name = "planet" verbose_name_plural = "planets" name = models.CharField(max_length=100) def __str__(self): return f"" class Player(BaseModel): class Meta: verbose_name = "player" verbose_name_plural = "players" account = models.ForeignKey(Account, on_delete=models.PROTECT, verbose_name="Account") planet = models.ForeignKey(Planet, on_delete=models.PROTECT, verbose_name="Planet") def __str__(self): return f"" class Dome(BaseModel): class Meta: verbose_name = "dome" verbose_name_plural = "domes" name = models.CharField(max_length=100) player = models.ForeignKey(Player, on_delete=models.PROTECT, verbose_name="Player") population = models.IntegerField(default=0) def __str__(self): return f"" class DomeBuilding(BaseModel): class Meta: verbose_name = "dome_building" verbose_name_plural = "dome_buildings" name = models.CharField(max_length=255) def __str__(self): return f"" class DomeBuildingInstance(BaseModel): class Meta: verbose_name = "dome_building_instance" verbose_name_plural = "dome_building_instances" dome = models.ForeignKey(Dome, on_delete=models.PROTECT, verbose_name="Dome") dome_building = models.ForeignKey(DomeBuilding, on_delete=models.PROTECT, verbose_name="DomeBuilding") level = models.IntegerField(default=1) def __str__(self): return f"" class LocalisedBaseModel(BaseModel): x = models.IntegerField() y = models.IntegerField() class Colony(LocalisedBaseModel): class Meta: verbose_name = "colony" verbose_name_plural = "colonies" player = models.ForeignKey(Player, on_delete=models.PROTECT, verbose_name="Player") name = models.CharField(max_length=100) def __str__(self): return f"" class ColonyBuilding(BaseModel): class Meta: verbose_name = "colony_building" verbose_name_plural = "colony_buildings" name = models.CharField(max_length=100) def __str__(self): return f"" class ColonyBuildingInstance(LocalisedBaseModel): class Meta: verbose_name = "colony_building_instance" verbose_name_plural = "colony_building_instances" colony = models.ForeignKey(Colony, on_delete=models.PROTECT, verbose_name="Colony") colony_building = models.ForeignKey(ColonyBuilding, on_delete=models.PROTECT, verbose_name="ColonyBuilding") def __str__(self): return f"" class Transport(BaseModel): class Meta: verbose_name = "transport" verbose_name_plural = "transports" name = models.CharField(max_length=100) max_distance = models.IntegerField() required_building = models.IntegerField(null=True) def __str__(self): return f"" class Route(BaseModel): class Meta: verbose_name = "route" verbose_name_plural = "routes" origin = models.ForeignKey(Colony, on_delete=models.PROTECT, verbose_name="OriginColony") target = models.ForeignKey(Colony, on_delete=models.PROTECT, verbose_name="TargetColony") transport = models.ForeignKey(Transport, on_delete=models.PROTECT, verbose_name="Transport") def __str__(self): return f"{self.target.name} ({self.id})>"