[mai2] add buddies plus support (#177)

Adds favorite music support (there's an option in the results screen to star a song), handlers for new methods and fixes upsert failures for `userFavoriteList`.
The `UserIntimateApi` has been added but didn't seem to add any data during testing, and `CreateTokenApi`/`RemoveTokenApi` have also been added but I think they're only used during guest play.

---
Tested on 1.45 with no errors/game crashes (see logs). Card Maker hasn't been tested as I don't have a setup to play with.

Reviewed-on: https://gitea.tendokyu.moe/Hay1tsme/artemis/pulls/177
Co-authored-by: ppc <albie@ppc.moe>
Co-committed-by: ppc <albie@ppc.moe>
This commit is contained in:
ppc
2024-09-23 17:21:29 +00:00
committed by Hay1tsme
parent e85728f33c
commit f47175a144
13 changed files with 246 additions and 11 deletions

View File

@@ -144,6 +144,7 @@ fav_music = Table(
nullable=False,
),
Column("musicId", Integer, nullable=False),
Column("orderId", Integer, nullable=True),
UniqueConstraint("user", "musicId", name="mai2_item_favorite_music_uk"),
mysql_charset="utf8mb4",
)
@@ -453,10 +454,10 @@ class Mai2ItemData(BaseData):
self, user_id: int, kind: int, item_id_list: List[int]
) -> Optional[int]:
sql = insert(favorite).values(
user=user_id, kind=kind, item_id_list=item_id_list
user=user_id, itemKind=kind, itemIdList=item_id_list
)
conflict = sql.on_duplicate_key_update(item_id_list=item_id_list)
conflict = sql.on_duplicate_key_update(itemIdList=item_id_list)
result = await self.execute(conflict)
if result is None:
@@ -484,13 +485,14 @@ class Mai2ItemData(BaseData):
if result:
return result.fetchall()
async def add_fav_music(self, user_id: int, music_id: int) -> Optional[int]:
async def add_fav_music(self, user_id: int, music_id: int, order_id: Optional[int] = None) -> Optional[int]:
sql = insert(fav_music).values(
user = user_id,
musicId = music_id
musicId = music_id,
orderId = order_id
)
conflict = sql.on_duplicate_key_update(musicId = music_id)
conflict = sql.on_duplicate_key_update(orderId = order_id)
result = await self.execute(conflict)
if result: