idac: battle gift event, tips, QoL improvements added
This commit is contained in:
@@ -321,6 +321,23 @@ timetrial_event = Table(
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
battle_gift = Table(
|
||||
"idac_user_battle_gift",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("battle_gift_event_id", Integer),
|
||||
Column("gift_id", Integer),
|
||||
Column("gift_status", Integer),
|
||||
Column("received_date", TIMESTAMP, server_default=func.now()),
|
||||
UniqueConstraint("user", "battle_gift_event_id", "gift_id", name="idac_user_battle_gift_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
|
||||
class IDACItemData(BaseData):
|
||||
async def get_random_user_car(self, aime_id: int, version: int) -> Optional[List[Row]]:
|
||||
@@ -843,6 +860,19 @@ class IDACItemData(BaseData):
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
async def get_battle_gifts(self, aime_id: int, battle_gift_event_id: int) -> Optional[Row]:
|
||||
sql = select(battle_gift).where(
|
||||
and_(
|
||||
battle_gift.c.user == aime_id,
|
||||
battle_gift.c.battle_gift_event_id == battle_gift_event_id,
|
||||
)
|
||||
)
|
||||
|
||||
result = await self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
async def put_car(self, aime_id: int, version: int, car_data: Dict) -> Optional[int]:
|
||||
car_data["user"] = aime_id
|
||||
@@ -1074,3 +1104,19 @@ class IDACItemData(BaseData):
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
async def put_battle_gift(
|
||||
self, aime_id: int, battle_gift_data: Dict
|
||||
) -> Optional[int]:
|
||||
battle_gift_data["user"] = aime_id
|
||||
|
||||
sql = insert(battle_gift).values(**battle_gift_data)
|
||||
conflict = sql.on_duplicate_key_update(**battle_gift_data)
|
||||
result = await self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"put_battle_gift: Failed to update! aime_id: {aime_id}"
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
@@ -244,6 +244,28 @@ theory = Table(
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
tips = Table(
|
||||
"idac_profile_tips",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("version", Integer, nullable=False),
|
||||
Column("tips_list", String(16), server_default="QAAAAAAAAAAAAAAA"),
|
||||
Column("timetrial_play_count", Integer, server_default="0"),
|
||||
Column("story_play_count", Integer, server_default="0"),
|
||||
Column("store_battle_play_count", Integer, server_default="0"),
|
||||
Column("online_battle_play_count", Integer, server_default="0"),
|
||||
Column("special_play_count", Integer, server_default="0"),
|
||||
Column("challenge_play_count", Integer, server_default="0"),
|
||||
Column("theory_play_count", Integer, server_default="0"),
|
||||
UniqueConstraint("user", "version", name="idac_profile_tips_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
|
||||
class IDACProfileData(BaseData):
|
||||
def __init__(self, cfg: CoreConfig, conn: Connection) -> None:
|
||||
@@ -348,6 +370,19 @@ class IDACProfileData(BaseData):
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
async def get_profile_tips(self, aime_id: int, version: int) -> Optional[Row]:
|
||||
sql = select(tips).where(
|
||||
and_(
|
||||
tips.c.user == aime_id,
|
||||
tips.c.version == version,
|
||||
)
|
||||
)
|
||||
|
||||
result = await self.execute(sql)
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchone()
|
||||
|
||||
async def put_profile(
|
||||
self, aime_id: int, version: int, profile_data: Dict
|
||||
@@ -438,3 +473,20 @@ class IDACProfileData(BaseData):
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
|
||||
async def put_profile_tips(
|
||||
self, aime_id: int, version: int, tips_data: Dict
|
||||
) -> Optional[int]:
|
||||
tips_data["user"] = aime_id
|
||||
tips_data["version"] = version
|
||||
|
||||
sql = insert(tips).values(**tips_data)
|
||||
conflict = sql.on_duplicate_key_update(**tips_data)
|
||||
result = await self.execute(conflict)
|
||||
|
||||
if result is None:
|
||||
self.logger.warn(
|
||||
f"put_profile_tips: Failed to update! aime_id: {aime_id}"
|
||||
)
|
||||
return None
|
||||
return result.lastrowid
|
||||
Reference in New Issue
Block a user