chuni: add opt to reader

This commit is contained in:
2025-04-08 00:41:49 -04:00
parent a7077fb41c
commit e16bfc713a
3 changed files with 102 additions and 33 deletions

View File

@ -13,6 +13,7 @@ from sqlalchemy.schema import ForeignKey
from sqlalchemy.sql import func, select
from sqlalchemy.dialects.mysql import insert
from datetime import datetime
from sqlalchemy.sql.functions import coalesce
from core.data.schema import BaseData, metadata
@ -107,6 +108,7 @@ nameplate = Table(
Column("isEnabled", Boolean, server_default="1"),
Column("defaultHave", Boolean, server_default="0"),
Column("sortName", String(255)),
Column("opt", ForeignKey("chuni_static_opt.id", ondelete="SET NULL", onupdate="cascade")),
UniqueConstraint("version", "nameplateId", name="chuni_static_nameplate_uk"),
mysql_charset="utf8mb4",
)
@ -299,6 +301,7 @@ class ChuniStaticData(BaseData):
item_num: int,
need_login_day_count: int,
login_bonus_category_type: int,
opt_id: int = None
) -> Optional[int]:
sql = insert(login_bonus).values(
version=version,
@ -310,6 +313,7 @@ class ChuniStaticData(BaseData):
itemNum=item_num,
needLoginDayCount=need_login_day_count,
loginBonusCategoryType=login_bonus_category_type,
opt=coalesce(login_bonus.c.opt, opt_id)
)
conflict = sql.on_duplicate_key_update(
@ -318,6 +322,7 @@ class ChuniStaticData(BaseData):
itemNum=item_num,
needLoginDayCount=need_login_day_count,
loginBonusCategoryType=login_bonus_category_type,
opt=coalesce(login_bonus.c.opt, opt_id)
)
result = await self.execute(conflict)
@ -359,17 +364,19 @@ class ChuniStaticData(BaseData):
return result.fetchone()
async def put_login_bonus_preset(
self, version: int, preset_id: int, preset_name: str, isEnabled: bool
self, version: int, preset_id: int, preset_name: str, isEnabled: bool, opt_id: int = None
) -> Optional[int]:
sql = insert(login_bonus_preset).values(
presetId=preset_id,
version=version,
presetName=preset_name,
isEnabled=isEnabled,
opt=coalesce(login_bonus_preset.c.opt, opt_id)
)
conflict = sql.on_duplicate_key_update(
presetName=preset_name, isEnabled=isEnabled
# Chuni has a habbit of including duplicates in it's opt files, so only update opt if it's null
conflict = sql.on_duplicate_key_update(
presetName=preset_name, isEnabled=isEnabled, opt=coalesce(login_bonus_preset.c.opt, opt_id)
)
result = await self.execute(conflict)
@ -393,13 +400,13 @@ class ChuniStaticData(BaseData):
return result.fetchall()
async def put_event(
self, version: int, event_id: int, type: int, name: str
self, version: int, event_id: int, type: int, name: str, opt_id: int = None
) -> Optional[int]:
sql = insert(events).values(
version=version, eventId=event_id, type=type, name=name
version=version, eventId=event_id, type=type, name=name, opt=coalesce(events.c.opt, opt_id)
)
conflict = sql.on_duplicate_key_update(name=name)
conflict = sql.on_duplicate_key_update(name=name, opt=coalesce(events.c.opt, opt_id))
result = await self.execute(conflict)
if result is None:
@ -467,6 +474,7 @@ class ChuniStaticData(BaseData):
genre: str,
jacketPath: str,
we_tag: str,
opt_id: int = None
) -> Optional[int]:
sql = insert(music).values(
version=version,
@ -478,6 +486,7 @@ class ChuniStaticData(BaseData):
genre=genre,
jacketPath=jacketPath,
worldsEndTag=we_tag,
opt=coalesce(music.c.opt, opt_id)
)
conflict = sql.on_duplicate_key_update(
@ -487,6 +496,7 @@ class ChuniStaticData(BaseData):
genre=genre,
jacketPath=jacketPath,
worldsEndTag=we_tag,
opt=coalesce(music.c.opt, opt_id)
)
result = await self.execute(conflict)
@ -502,6 +512,7 @@ class ChuniStaticData(BaseData):
expiration_days: int,
consume_type: int,
selling_appeal: bool,
opt_id: int = None
) -> Optional[int]:
sql = insert(charge).values(
version=version,
@ -510,6 +521,7 @@ class ChuniStaticData(BaseData):
expirationDays=expiration_days,
consumeType=consume_type,
sellingAppeal=selling_appeal,
opt=coalesce(charge.c.opt, opt_id)
)
conflict = sql.on_duplicate_key_update(
@ -517,6 +529,7 @@ class ChuniStaticData(BaseData):
expirationDays=expiration_days,
consumeType=consume_type,
sellingAppeal=selling_appeal,
opt=coalesce(charge.c.opt, opt_id)
)
result = await self.execute(conflict)
@ -584,7 +597,8 @@ class ChuniStaticData(BaseData):
texturePath: str,
isEnabled: int,
defaultHave: int,
sortName: str
sortName: str,
opt_id: int = None
) -> Optional[int]:
sql = insert(avatar).values(
version=version,
@ -595,7 +609,8 @@ class ChuniStaticData(BaseData):
texturePath=texturePath,
isEnabled=isEnabled,
defaultHave=defaultHave,
sortName=sortName
sortName=sortName,
opt=coalesce(avatar.c.opt, opt_id)
)
conflict = sql.on_duplicate_key_update(
@ -605,7 +620,8 @@ class ChuniStaticData(BaseData):
texturePath=texturePath,
isEnabled=isEnabled,
defaultHave=defaultHave,
sortName=sortName
sortName=sortName,
opt=coalesce(avatar.c.opt, opt_id)
)
result = await self.execute(conflict)
@ -632,7 +648,8 @@ class ChuniStaticData(BaseData):
texturePath: str,
isEnabled: int,
defaultHave: int,
sortName: str
sortName: str,
opt_id: int = None
) -> Optional[int]:
sql = insert(nameplate).values(
version=version,
@ -641,7 +658,8 @@ class ChuniStaticData(BaseData):
texturePath=texturePath,
isEnabled=isEnabled,
defaultHave=defaultHave,
sortName=sortName
sortName=sortName,
opt=coalesce(nameplate.c.opt, opt_id)
)
conflict = sql.on_duplicate_key_update(
@ -649,7 +667,8 @@ class ChuniStaticData(BaseData):
texturePath=texturePath,
isEnabled=isEnabled,
defaultHave=defaultHave,
sortName=sortName
sortName=sortName,
opt=coalesce(nameplate.c.opt, opt_id)
)
result = await self.execute(conflict)
@ -676,6 +695,7 @@ class ChuniStaticData(BaseData):
rareType: int,
isEnabled: int,
defaultHave: int,
opt_id: int = None
) -> Optional[int]:
sql = insert(trophy).values(
version=version,
@ -683,14 +703,16 @@ class ChuniStaticData(BaseData):
name=name,
rareType=rareType,
isEnabled=isEnabled,
defaultHave=defaultHave
defaultHave=defaultHave,
opt=coalesce(trophy.c.opt, opt_id)
)
conflict = sql.on_duplicate_key_update(
name=name,
rareType=rareType,
isEnabled=isEnabled,
defaultHave=defaultHave
defaultHave=defaultHave,
opt=coalesce(trophy.c.opt, opt_id)
)
result = await self.execute(conflict)
@ -718,6 +740,7 @@ class ChuniStaticData(BaseData):
iconPath: str,
isEnabled: int,
defaultHave: int,
opt_id: int = None
) -> Optional[int]:
sql = insert(map_icon).values(
version=version,
@ -726,7 +749,8 @@ class ChuniStaticData(BaseData):
sortName=sortName,
iconPath=iconPath,
isEnabled=isEnabled,
defaultHave=defaultHave
defaultHave=defaultHave,
opt=coalesce(map_icon.c.opt, opt_id)
)
conflict = sql.on_duplicate_key_update(
@ -734,7 +758,8 @@ class ChuniStaticData(BaseData):
sortName=sortName,
iconPath=iconPath,
isEnabled=isEnabled,
defaultHave=defaultHave
defaultHave=defaultHave,
opt=coalesce(map_icon.c.opt, opt_id)
)
result = await self.execute(conflict)
@ -762,6 +787,7 @@ class ChuniStaticData(BaseData):
imagePath: str,
isEnabled: int,
defaultHave: int,
opt_id: int = None
) -> Optional[int]:
sql = insert(system_voice).values(
version=version,
@ -770,7 +796,8 @@ class ChuniStaticData(BaseData):
sortName=sortName,
imagePath=imagePath,
isEnabled=isEnabled,
defaultHave=defaultHave
defaultHave=defaultHave,
opt=coalesce(system_voice.c.opt, opt_id)
)
conflict = sql.on_duplicate_key_update(
@ -778,7 +805,8 @@ class ChuniStaticData(BaseData):
sortName=sortName,
imagePath=imagePath,
isEnabled=isEnabled,
defaultHave=defaultHave
defaultHave=defaultHave,
opt=coalesce(system_voice.c.opt, opt_id)
)
result = await self.execute(conflict)
@ -809,7 +837,8 @@ class ChuniStaticData(BaseData):
imagePath2: str,
imagePath3: str,
isEnabled: int,
defaultHave: int
defaultHave: int,
opt_id: int = None
) -> Optional[int]:
sql = insert(character).values(
version=version,
@ -822,7 +851,8 @@ class ChuniStaticData(BaseData):
imagePath2=imagePath2,
imagePath3=imagePath3,
isEnabled=isEnabled,
defaultHave=defaultHave
defaultHave=defaultHave,
opt=coalesce(character.c.opt, opt_id)
)
conflict = sql.on_duplicate_key_update(
@ -834,7 +864,8 @@ class ChuniStaticData(BaseData):
imagePath2=imagePath2,
imagePath3=imagePath3,
isEnabled=isEnabled,
defaultHave=defaultHave
defaultHave=defaultHave,
opt=coalesce(character.c.opt, opt_id)
)
result = await self.execute(conflict)
@ -858,12 +889,14 @@ class ChuniStaticData(BaseData):
version: int,
gacha_id: int,
gacha_name: int,
opt_id: int = None,
**gacha_data,
) -> Optional[int]:
sql = insert(gachas).values(
version=version,
gachaId=gacha_id,
gachaName=gacha_name,
opt=coalesce(gachas.c.opt, opt_id),
**gacha_data,
)
@ -871,6 +904,7 @@ class ChuniStaticData(BaseData):
version=version,
gachaId=gacha_id,
gachaName=gacha_name,
opt=coalesce(gachas.c.opt, opt_id),
**gacha_data,
)
@ -940,10 +974,10 @@ class ChuniStaticData(BaseData):
return None
return result.fetchone()
async def put_card(self, version: int, card_id: int, **card_data) -> Optional[int]:
sql = insert(cards).values(version=version, cardId=card_id, **card_data)
async def put_card(self, version: int, card_id: int, opt_id: int = None,**card_data) -> Optional[int]:
sql = insert(cards).values(version=version, cardId=card_id, opt=coalesce(cards.c.opt, opt_id), **card_data)
conflict = sql.on_duplicate_key_update(**card_data)
conflict = sql.on_duplicate_key_update(opt=coalesce(cards.c.opt, opt_id), **card_data)
result = await self.execute(conflict)
if result is None: