mirror of
https://gitea.tendokyu.moe/Hay1tsme/artemis.git
synced 2026-02-11 18:27:29 +08:00
CHUNITHM X-VERSE support (#238)
Reviewed-on: https://gitea.tendokyu.moe/Hay1tsme/artemis/pulls/238 Co-authored-by: beerpsi <beerpsi@duck.com> Co-committed-by: beerpsi <beerpsi@duck.com>
This commit is contained in:
@@ -314,6 +314,37 @@ unlock_challenge = Table(
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
linked_verse: Table = Table(
|
||||
"chuni_item_linked_verse",
|
||||
metadata,
|
||||
Column("id", Integer, primary_key=True, nullable=False),
|
||||
Column(
|
||||
"user",
|
||||
Integer,
|
||||
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
|
||||
nullable=False,
|
||||
),
|
||||
Column("linkedVerseId", Integer, nullable=False),
|
||||
Column("progress", String(255)),
|
||||
Column("statusOpen", Integer),
|
||||
Column("statusUnlock", Integer),
|
||||
Column("isFirstClear", Integer),
|
||||
Column("numClear", Integer),
|
||||
Column("clearCourseId", Integer),
|
||||
Column("clearCourseLevel", Integer),
|
||||
Column("clearScore", Integer),
|
||||
Column("clearDate", String(25)),
|
||||
Column("clearUserId1", Integer),
|
||||
Column("clearUserId2", Integer),
|
||||
Column("clearUserId3", Integer),
|
||||
Column("clearUserName0", String(20)),
|
||||
Column("clearUserName1", String(20)),
|
||||
Column("clearUserName2", String(20)),
|
||||
Column("clearUserName3", String(20)),
|
||||
UniqueConstraint("user", "linkedVerseId", name="chuni_item_linked_verse_uk"),
|
||||
mysql_charset="utf8mb4",
|
||||
)
|
||||
|
||||
|
||||
class ChuniItemData(BaseData):
|
||||
async def get_oldest_free_matching(self, version: int) -> Optional[Row]:
|
||||
@@ -394,7 +425,6 @@ class ChuniItemData(BaseData):
|
||||
async def is_favorite(
|
||||
self, user_id: int, version: int, fav_id: int, fav_kind: int = 1
|
||||
) -> bool:
|
||||
|
||||
sql = favorite.select(
|
||||
and_(
|
||||
favorite.c.version == version,
|
||||
@@ -849,3 +879,22 @@ class ChuniItemData(BaseData):
|
||||
if result is None:
|
||||
return None
|
||||
return result.fetchall()
|
||||
|
||||
async def get_linked_verse(self, aime_id: int) -> Optional[List[Row]]:
|
||||
result = await self.execute(
|
||||
linked_verse.select().where(linked_verse.c.user == aime_id)
|
||||
)
|
||||
|
||||
if result:
|
||||
return result.fetchall()
|
||||
|
||||
async def put_linked_verse(self, aime_id: int, linked_verse_data: Dict):
|
||||
linked_verse_data = self.fix_bools(linked_verse_data)
|
||||
sql = insert(linked_verse).values(user=aime_id, **linked_verse_data)
|
||||
conflict = sql.on_duplicate_key_update(**linked_verse_data)
|
||||
result = await self.execute(conflict)
|
||||
|
||||
if result:
|
||||
return result.inserted_primary_key["id"]
|
||||
|
||||
self.logger.error("Failed to put Linked Verse data for user %s", aime_id)
|
||||
|
||||
Reference in New Issue
Block a user