lib.itmens/catalog/game/models.py

158 lines
4.2 KiB
Python
Raw Normal View History

2023-02-15 15:45:57 -05:00
from datetime import date
2022-12-16 01:08:10 -05:00
from django.db import models
from django.utils.translation import gettext_lazy as _
2023-08-11 01:43:19 -04:00
from catalog.common import (
BaseSchema,
IdType,
Item,
ItemCategory,
ItemInSchema,
PrimaryLookupIdDescriptor,
jsondata,
)
2024-07-27 00:40:15 -04:00
class GameReleaseType(models.TextChoices):
# Unspecified = "", _("Unspecified") # type:ignore[reportCallIssue]
GAME = "game", _("Main Game") # type:ignore[reportCallIssue]
EXPANSION = "expansion", _("Expansion") # type:ignore[reportCallIssue]
DLC = "dlc", _("Downloadable Content") # type:ignore[reportCallIssue]
MOD = "mod", _("Mod") # type:ignore[reportCallIssue]
BUNDLE = "bundle", _("Bundle") # type:ignore[reportCallIssue]
REMASTER = "remaster", _("Remaster") # type:ignore[reportCallIssue]
REMAKE = "remake", _("Remake") # type:ignore[reportCallIssue]
SPECIAL = "special", _("Special Edition") # type:ignore[reportCallIssue]
OTHER = "other", _("Other") # type:ignore[reportCallIssue]
2023-02-15 15:45:57 -05:00
class GameInSchema(ItemInSchema):
genre: list[str]
developer: list[str]
publisher: list[str]
platform: list[str]
2024-07-27 00:40:15 -04:00
release_type: str | None = None
2023-02-15 15:45:57 -05:00
release_date: date | None = None
official_site: str | None = None
class GameSchema(GameInSchema, BaseSchema):
pass
class Game(Item):
2025-01-28 21:38:02 -05:00
schema = GameSchema
2022-12-11 23:20:28 +00:00
category = ItemCategory.Game
2022-12-29 23:57:02 -05:00
url_path = "game"
2022-12-08 23:58:44 +00:00
igdb = PrimaryLookupIdDescriptor(IdType.IGDB)
steam = PrimaryLookupIdDescriptor(IdType.Steam)
douban_game = PrimaryLookupIdDescriptor(IdType.DoubanGame)
2022-12-16 01:08:10 -05:00
METADATA_COPY_LIST = [
2024-07-13 00:16:47 -04:00
# "title",
# "brief",
# "other_title",
"localized_title",
2024-01-07 17:30:37 -05:00
"designer",
"artist",
2022-12-29 23:57:02 -05:00
"developer",
"publisher",
2024-01-07 17:30:37 -05:00
"release_year",
2022-12-29 23:57:02 -05:00
"release_date",
2024-07-27 00:40:15 -04:00
"release_type",
2022-12-29 23:57:02 -05:00
"genre",
"platform",
"official_site",
"localized_description",
2022-12-16 01:08:10 -05:00
]
other_title = jsondata.ArrayField(
2023-01-05 03:06:13 -05:00
base_field=models.CharField(blank=True, default="", max_length=500),
2024-03-10 20:55:50 -04:00
verbose_name=_("other title"),
2022-12-16 01:08:10 -05:00
null=True,
blank=True,
default=list,
)
2024-01-07 17:30:37 -05:00
designer = jsondata.ArrayField(
base_field=models.CharField(blank=True, default="", max_length=500),
2024-03-10 20:55:50 -04:00
verbose_name=_("designer"),
2024-01-07 17:30:37 -05:00
null=True,
blank=True,
default=list,
)
artist = jsondata.ArrayField(
base_field=models.CharField(blank=True, default="", max_length=500),
2024-03-10 20:55:50 -04:00
verbose_name=_("artist"),
2024-01-07 17:30:37 -05:00
null=True,
blank=True,
default=list,
)
2022-12-16 01:08:10 -05:00
developer = jsondata.ArrayField(
2023-01-05 03:06:13 -05:00
base_field=models.CharField(blank=True, default="", max_length=500),
2024-03-10 20:55:50 -04:00
verbose_name=_("developer"),
2022-12-16 01:08:10 -05:00
null=True,
blank=True,
default=list,
)
publisher = jsondata.ArrayField(
2023-01-05 03:06:13 -05:00
base_field=models.CharField(blank=True, default="", max_length=500),
2024-03-10 20:55:50 -04:00
verbose_name=_("publisher"),
2022-12-16 01:08:10 -05:00
null=True,
blank=True,
default=list,
)
2024-03-10 20:55:50 -04:00
release_year = jsondata.IntegerField(
verbose_name=_("year of publication"), null=True, blank=True
)
2024-01-07 17:30:37 -05:00
2022-12-16 01:08:10 -05:00
release_date = jsondata.DateField(
2024-03-10 20:55:50 -04:00
verbose_name=_("date of publication"),
2023-01-05 03:06:13 -05:00
auto_now=False,
auto_now_add=False,
null=True,
blank=True,
2024-01-20 23:40:47 -05:00
help_text=_("YYYY-MM-DD"),
2022-12-16 01:08:10 -05:00
)
2024-07-27 00:40:15 -04:00
release_type = jsondata.CharField(
verbose_name=_("release type"),
max_length=100,
blank=True,
choices=GameReleaseType.choices,
)
2022-12-16 01:08:10 -05:00
genre = jsondata.ArrayField(
2024-03-10 20:55:50 -04:00
verbose_name=_("genre"),
2023-01-05 03:06:13 -05:00
base_field=models.CharField(blank=True, default="", max_length=200),
2022-12-16 01:08:10 -05:00
null=True,
blank=True,
default=list,
)
platform = jsondata.ArrayField(
2024-03-10 20:55:50 -04:00
verbose_name=_("platform"),
2023-01-05 03:06:13 -05:00
base_field=models.CharField(blank=True, default="", max_length=200),
2022-12-16 01:08:10 -05:00
default=list,
)
official_site = jsondata.CharField(
2024-03-10 20:55:50 -04:00
verbose_name=_("website"), max_length=1000, null=True, blank=True
)
2023-01-05 03:06:13 -05:00
@classmethod
def lookup_id_type_choices(cls):
id_types = [
IdType.IGDB,
IdType.Steam,
2024-01-07 17:30:37 -05:00
IdType.BGG,
2023-01-05 03:06:13 -05:00
IdType.DoubanGame,
IdType.Bangumi,
]
return [(i.value, i.label) for i in id_types]