mirror of
https://github.com/283375/arcaea-offline.git
synced 2025-07-01 12:16:26 +00:00
chore(db)!: Database
methods
This commit is contained in:
@ -50,6 +50,8 @@ class Database(metaclass=Singleton):
|
|||||||
def sessionmaker(self):
|
def sessionmaker(self):
|
||||||
return self.__sessionmaker
|
return self.__sessionmaker
|
||||||
|
|
||||||
|
# region init
|
||||||
|
|
||||||
def init(self, checkfirst: bool = True):
|
def init(self, checkfirst: bool = True):
|
||||||
# create tables & views
|
# create tables & views
|
||||||
if checkfirst:
|
if checkfirst:
|
||||||
@ -80,6 +82,7 @@ class Database(metaclass=Singleton):
|
|||||||
+ list(ScoresBase.metadata.tables.keys())
|
+ list(ScoresBase.metadata.tables.keys())
|
||||||
+ list(ConfigBase.metadata.tables.keys())
|
+ list(ConfigBase.metadata.tables.keys())
|
||||||
+ [
|
+ [
|
||||||
|
Chart.__tablename__,
|
||||||
ScoreCalculated.__tablename__,
|
ScoreCalculated.__tablename__,
|
||||||
ScoreBest.__tablename__,
|
ScoreBest.__tablename__,
|
||||||
CalculatedPotential.__tablename__,
|
CalculatedPotential.__tablename__,
|
||||||
@ -87,30 +90,56 @@ class Database(metaclass=Singleton):
|
|||||||
)
|
)
|
||||||
return all(inspect(self.engine).has_table(t) for t in expect_tables)
|
return all(inspect(self.engine).has_table(t) for t in expect_tables)
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
def version(self) -> Union[int, None]:
|
def version(self) -> Union[int, None]:
|
||||||
stmt = select(Property).where(Property.key == "version")
|
stmt = select(Property).where(Property.key == "version")
|
||||||
with self.sessionmaker() as session:
|
with self.sessionmaker() as session:
|
||||||
result = session.scalar(stmt)
|
result = session.scalar(stmt)
|
||||||
return None if result is None else int(result.value)
|
return None if result is None else int(result.value)
|
||||||
|
|
||||||
|
# region Pack
|
||||||
|
|
||||||
def get_packs(self):
|
def get_packs(self):
|
||||||
stmt = select(Pack)
|
stmt = select(Pack)
|
||||||
with self.sessionmaker() as session:
|
with self.sessionmaker() as session:
|
||||||
results = list(session.scalars(stmt))
|
results = session.scalars(stmt)
|
||||||
return results
|
return list(results)
|
||||||
|
|
||||||
def get_pack_by_id(self, value: str):
|
def get_pack_by_id(self, pack_id: str):
|
||||||
stmt = select(Pack).where(Pack.id == value)
|
stmt = select(Pack).where(Pack.id == pack_id)
|
||||||
with self.sessionmaker() as session:
|
with self.sessionmaker() as session:
|
||||||
result = session.scalar(stmt)
|
result = session.scalar(stmt)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
def get_charts_in_pack(self, pack: str):
|
# endregion
|
||||||
stmt = (
|
|
||||||
select(ChartInfo)
|
# region Chart
|
||||||
.join(Song, (Song.id == ChartInfo.song_id))
|
|
||||||
.where(Song.set == pack)
|
def get_charts_by_pack_id(self, pack_id: str):
|
||||||
|
stmt = select(Chart).where(Chart.set == pack_id)
|
||||||
|
with self.sessionmaker() as session:
|
||||||
|
results = session.scalars(stmt)
|
||||||
|
return list(results)
|
||||||
|
|
||||||
|
def get_charts_by_song_id(self, song_id: str):
|
||||||
|
stmt = select(Chart).where(Chart.song_id == song_id)
|
||||||
|
with self.sessionmaker() as session:
|
||||||
|
results = session.scalars(stmt)
|
||||||
|
return list(results)
|
||||||
|
|
||||||
|
def get_chart(self, song_id: str, rating_class: int):
|
||||||
|
stmt = select(Chart).where(
|
||||||
|
(Chart.song_id == song_id) & (Chart.rating_class == rating_class)
|
||||||
)
|
)
|
||||||
with self.sessionmaker() as session:
|
with self.sessionmaker() as session:
|
||||||
results = list(session.scalars(stmt))
|
result = session.scalar(stmt)
|
||||||
return results
|
return result
|
||||||
|
|
||||||
|
# endregion
|
||||||
|
|
||||||
|
def get_b30(self):
|
||||||
|
stmt = select(CalculatedPotential.b30).select_from(CalculatedPotential)
|
||||||
|
with self.sessionmaker() as session:
|
||||||
|
result = session.scalar(stmt)
|
||||||
|
return result
|
||||||
|
Reference in New Issue
Block a user