From b18097628431af85239397e28bd967c7e0fada96 Mon Sep 17 00:00:00 2001 From: 283375 Date: Mon, 28 Aug 2023 00:15:34 +0800 Subject: [PATCH] feat: handy methods under `Database` --- src/arcaea_offline/database.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/arcaea_offline/database.py b/src/arcaea_offline/database.py index 701b523..54561c1 100644 --- a/src/arcaea_offline/database.py +++ b/src/arcaea_offline/database.py @@ -1,5 +1,5 @@ import logging -from typing import Optional +from typing import Optional, Union from sqlalchemy import Engine, inspect, select from sqlalchemy.orm import sessionmaker @@ -84,3 +84,25 @@ class Database(metaclass=Singleton): ] ) return all(inspect(self.engine).has_table(t) for t in expect_tables) + + def version(self) -> Union[int, None]: + stmt = select(Property).where(Property.key == "version") + with self.sessionmaker() as session: + result = session.scalar(stmt) + return None if result is None else int(result.value) + + def get_packs(self): + stmt = select(Pack) + with self.sessionmaker() as session: + results = list(session.scalars(stmt)) + return results + + def get_charts_in_pack(self, pack: str): + stmt = ( + select(ChartInfo) + .join(Song, (Song.id == ChartInfo.song_id)) + .where(Song.set == pack) + ) + with self.sessionmaker() as session: + results = list(session.scalars(stmt)) + return results