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:
beerpsi
2026-01-01 21:35:23 +00:00
committed by Dniel97
parent 29a52d2712
commit 2cbf34dc28
13 changed files with 628 additions and 9 deletions

View File

@@ -310,6 +310,27 @@ unlock_challenge = Table(
)
linked_verse: Table = Table(
"chuni_static_linked_verse",
metadata,
Column("id", Integer, primary_key=True, nullable=False),
Column("version", Integer, nullable=False),
Column("linkedVerseId", Integer, nullable=False),
Column("name", String(255)),
Column("isEnabled", Boolean, server_default="1", nullable=False),
Column("startDate", TIMESTAMP, server_default=func.now()),
Column("courseId1", Integer),
Column("courseId2", Integer),
Column("courseId3", Integer),
Column("courseId4", Integer),
Column("courseId5", Integer),
UniqueConstraint(
"version", "linkedVerseId", name="chuni_static_linked_verse_pk"
),
mysql_charset="utf8mb4",
)
class ChuniStaticData(BaseData):
async def put_login_bonus(
self,
@@ -1232,3 +1253,57 @@ class ChuniStaticData(BaseData):
if result is None:
return None
return result.fetchall()
async def put_linked_verse(
self,
version: int,
linked_verse_id: int,
name: str,
course_id1: Optional[int] = None,
course_id2: Optional[int] = None,
course_id3: Optional[int] = None,
course_id4: Optional[int] = None,
course_id5: Optional[int] = None,
) -> Optional[int]:
sql = insert(linked_verse).values(
version=version,
linkedVerseId=linked_verse_id,
name=name,
courseId1=course_id1,
courseId2=course_id2,
courseId3=course_id3,
courseId4=course_id4,
courseId5=course_id5,
)
conflict = sql.on_duplicate_key_update(
name=name,
courseId1=course_id1,
courseId2=course_id2,
courseId3=course_id3,
courseId4=course_id4,
courseId5=course_id5,
)
result = await self.execute(conflict)
if result is None:
return None
return result.lastrowid
async def get_linked_verses(self, version: int) -> Optional[List[Dict]]:
sql = linked_verse.select(
and_(
linked_verse.c.version == version,
linked_verse.c.isEnabled == True,
)
).order_by(linked_verse.c.startDate.asc())
result = await self.execute(sql)
if result is None:
return None
return result.fetchall()