forked from Hay1tsme/artemis
Merge pull request 'mai2: support unfavoriting music' (#225) from ppc/artemis:mai2_favorites into develop
Reviewed-on: Hay1tsme/artemis#225
This commit is contained in:
@ -258,9 +258,9 @@ class Mai2DX(Mai2Base):
|
||||
if kind_id is not None:
|
||||
await self.data.item.put_favorite(user_id, kind_id, fav["itemIdList"])
|
||||
|
||||
if "userFavoritemusicList" in upsert and len(upsert["userFavoritemusicList"]) > 0:
|
||||
for fav in upsert["userFavoritemusicList"]:
|
||||
await self.data.item.add_fav_music(user_id, fav["id"], fav["orderId"])
|
||||
# added in BUDDiES+
|
||||
if "isNewFavoritemusicList" in upsert and upsert["isNewFavoritemusicList"] != "" and "userFavoritemusicList" in upsert:
|
||||
await self.data.item.put_fav_music(user_id, ((fav["id"], fav["orderId"]) for fav in upsert["userFavoritemusicList"]))
|
||||
|
||||
if (
|
||||
"userFriendSeasonRankingList" in upsert
|
||||
|
@ -1,7 +1,8 @@
|
||||
from collections.abc import Iterable
|
||||
from datetime import datetime
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
from sqlalchemy import Column, Table, UniqueConstraint, and_, or_
|
||||
from sqlalchemy import Column, Table, UniqueConstraint, and_, or_, not_
|
||||
from sqlalchemy.dialects.mysql import insert
|
||||
from sqlalchemy.engine import Row
|
||||
from sqlalchemy.schema import ForeignKey
|
||||
@ -550,7 +551,11 @@ class Mai2ItemData(BaseData):
|
||||
if result:
|
||||
return result.fetchall()
|
||||
|
||||
async def add_fav_music(self, user_id: int, music_id: int, order_id: Optional[int] = None) -> Optional[int]:
|
||||
async def put_fav_music(self, user_id: int, fav_list: Iterable[tuple[int, Optional[int]]]) -> Optional[int]:
|
||||
row_count = 0
|
||||
processed_music_ids = []
|
||||
|
||||
for music_id, order_id in fav_list:
|
||||
sql = insert(fav_music).values(
|
||||
user = user_id,
|
||||
musicId = music_id,
|
||||
@ -558,17 +563,24 @@ class Mai2ItemData(BaseData):
|
||||
)
|
||||
|
||||
conflict = sql.on_duplicate_key_update(orderId = order_id)
|
||||
|
||||
result = await self.execute(conflict)
|
||||
if result:
|
||||
return result.lastrowid
|
||||
|
||||
self.logger.error(f"Failed to add music {music_id} as favorite for user {user_id}!")
|
||||
processed_music_ids.append(music_id)
|
||||
|
||||
async def remove_fav_music(self, user_id: int, music_id: int) -> None:
|
||||
result = await self.execute(fav_music.delete(and_(fav_music.c.user == user_id, fav_music.c.musicId == music_id)))
|
||||
if not result:
|
||||
self.logger.error(f"Failed to remove music {music_id} as favorite for user {user_id}!")
|
||||
self.logger.error(f"Failed to add music {music_id} as favorite for user {user_id}!")
|
||||
continue
|
||||
|
||||
row_count += result.rowcount
|
||||
|
||||
clear_stale_entries_stmt = fav_music.delete(and_(fav_music.c.user == user_id, not_(fav_music.c.musicId.in_(processed_music_ids))))
|
||||
result = await self.execute(clear_stale_entries_stmt)
|
||||
|
||||
if result is None:
|
||||
self.logger.error(f"Failed to clear stale favorite music entries for user {user_id}!")
|
||||
return None
|
||||
|
||||
return row_count + result.rowcount
|
||||
|
||||
async def put_card(
|
||||
self,
|
||||
|
Reference in New Issue
Block a user