fix(db.models): use ArcaeaLanguage enum for localized objects

This commit is contained in:
283375 2024-10-01 00:34:22 +08:00
parent f10c3648a7
commit d270636862
Signed by: 283375
SSH Key Fingerprint: SHA256:UcX0qg6ZOSDOeieKPGokA5h7soykG61nz2uxuQgVLSk

View File

@ -1,10 +1,14 @@
from typing import List, Optional from typing import List, Optional
from sqlalchemy import ForeignKey, and_, func, select from sqlalchemy import Enum, ForeignKey, and_, func, select
from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy.orm import Mapped, mapped_column, relationship
from sqlalchemy_utils import create_view from sqlalchemy_utils import create_view
from arcaea_offline.constants.enums import ArcaeaRatingClass, ArcaeaSongSide from arcaea_offline.constants.enums.arcaea import (
ArcaeaLanguage,
ArcaeaRatingClass,
ArcaeaSongSide,
)
from .base import ModelsV5Base, ModelsV5ViewBase, ReprHelper from .base import ModelsV5Base, ModelsV5ViewBase, ReprHelper
@ -20,6 +24,11 @@ __all__ = [
] ]
_ArcaeaLanguageEnumType = Enum(
ArcaeaLanguage, native_enum=False, values_callable=lambda e: [x.value for x in e]
)
class Pack(ModelsV5Base, ReprHelper): class Pack(ModelsV5Base, ReprHelper):
__tablename__ = "packs" __tablename__ = "packs"
@ -40,7 +49,7 @@ class PackLocalized(ModelsV5Base, ReprHelper):
id: Mapped[str] = mapped_column( id: Mapped[str] = mapped_column(
ForeignKey(Pack.id, onupdate="CASCADE", ondelete="NO ACTION") ForeignKey(Pack.id, onupdate="CASCADE", ondelete="NO ACTION")
) )
lang: Mapped[str] lang: Mapped[ArcaeaLanguage] = mapped_column(_ArcaeaLanguageEnumType)
name: Mapped[Optional[str]] name: Mapped[Optional[str]]
description: Mapped[Optional[str]] description: Mapped[Optional[str]]
@ -91,7 +100,7 @@ class SongLocalized(ModelsV5Base, ReprHelper):
id: Mapped[str] = mapped_column( id: Mapped[str] = mapped_column(
ForeignKey(Song.id, onupdate="CASCADE", ondelete="NO ACTION") ForeignKey(Song.id, onupdate="CASCADE", ondelete="NO ACTION")
) )
lang: Mapped[str] lang: Mapped[ArcaeaLanguage] = mapped_column(_ArcaeaLanguageEnumType)
title: Mapped[Optional[str]] title: Mapped[Optional[str]]
source: Mapped[Optional[str]] source: Mapped[Optional[str]]
@ -107,7 +116,7 @@ class SongSearchWord(ModelsV5Base, ReprHelper):
id: Mapped[str] = mapped_column( id: Mapped[str] = mapped_column(
ForeignKey(Song.id, onupdate="CASCADE", ondelete="NO ACTION") ForeignKey(Song.id, onupdate="CASCADE", ondelete="NO ACTION")
) )
lang: Mapped[str] lang: Mapped[ArcaeaLanguage] = mapped_column(_ArcaeaLanguageEnumType)
type: Mapped[int] = mapped_column(comment="1: title, 2: artist") type: Mapped[int] = mapped_column(comment="1: title, 2: artist")
value: Mapped[str] value: Mapped[str]
@ -163,7 +172,7 @@ class DifficultyLocalized(ModelsV5Base, ReprHelper):
rating_class: Mapped[ArcaeaRatingClass] = mapped_column( rating_class: Mapped[ArcaeaRatingClass] = mapped_column(
ForeignKey(Difficulty.rating_class, onupdate="CASCADE", ondelete="NO ACTION") ForeignKey(Difficulty.rating_class, onupdate="CASCADE", ondelete="NO ACTION")
) )
lang: Mapped[str] lang: Mapped[ArcaeaLanguage] = mapped_column(_ArcaeaLanguageEnumType)
title: Mapped[Optional[str]] title: Mapped[Optional[str]]
artist: Mapped[Optional[str]] artist: Mapped[Optional[str]]