2023-02-15 15:45:57 -05:00
|
|
|
from datetime import date
|
2023-08-10 11:27:31 -04:00
|
|
|
|
2022-12-16 01:08:10 -05:00
|
|
|
from django.db import models
|
2023-08-10 11:27:31 -04:00
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
|
2023-08-11 01:43:19 -04:00
|
|
|
from catalog.common import (
|
|
|
|
BaseSchema,
|
|
|
|
ExternalResource,
|
|
|
|
IdType,
|
|
|
|
Item,
|
|
|
|
ItemCategory,
|
|
|
|
ItemInSchema,
|
|
|
|
ItemSchema,
|
|
|
|
ItemType,
|
|
|
|
PrimaryLookupIdDescriptor,
|
|
|
|
jsondata,
|
|
|
|
)
|
2022-12-07 19:09:05 -05:00
|
|
|
|
|
|
|
|
2023-02-15 15:45:57 -05:00
|
|
|
class GameInSchema(ItemInSchema):
|
|
|
|
genre: list[str]
|
|
|
|
developer: list[str]
|
|
|
|
publisher: list[str]
|
|
|
|
platform: list[str]
|
|
|
|
release_date: date | None = None
|
|
|
|
official_site: str | None = None
|
|
|
|
|
|
|
|
|
|
|
|
class GameSchema(GameInSchema, BaseSchema):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
2022-12-07 19:09:05 -05:00
|
|
|
class Game(Item):
|
2023-06-05 02:04:52 -04:00
|
|
|
type = ItemType.Game
|
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",
|
|
|
|
"genre",
|
|
|
|
"platform",
|
|
|
|
"official_site",
|
2024-07-13 16:19:45 -04:00
|
|
|
"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
|
|
|
)
|
|
|
|
|
|
|
|
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,
|
|
|
|
)
|
2022-12-17 02:04:12 -05:00
|
|
|
|
|
|
|
official_site = jsondata.CharField(
|
2024-03-10 20:55:50 -04:00
|
|
|
verbose_name=_("website"), max_length=1000, null=True, blank=True
|
2022-12-17 02:04:12 -05:00
|
|
|
)
|
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]
|