mirror of
https://github.com/283375/arcaea-offline.git
synced 2025-04-17 21:30:18 +00:00
feat(db): DEF v2 scores export supporting
This commit is contained in:
parent
36364d6e3d
commit
54749c8df2
@ -6,7 +6,7 @@ from sqlalchemy import Engine, func, inspect, select
|
|||||||
from sqlalchemy.orm import DeclarativeBase, InstrumentedAttribute, sessionmaker
|
from sqlalchemy.orm import DeclarativeBase, InstrumentedAttribute, sessionmaker
|
||||||
|
|
||||||
from .external.arcsong.arcsong_json import ArcSongJsonBuilder
|
from .external.arcsong.arcsong_json import ArcSongJsonBuilder
|
||||||
from .external.exports import ScoreExport, exporters
|
from .external.exports import ArcaeaOfflineDEFV2_Score, ScoreExport, exporters
|
||||||
from .models.config import ConfigBase, Property
|
from .models.config import ConfigBase, Property
|
||||||
from .models.scores import (
|
from .models.scores import (
|
||||||
CalculatedPotential,
|
CalculatedPotential,
|
||||||
@ -410,6 +410,15 @@ class Database(metaclass=Singleton):
|
|||||||
scores = self.get_scores()
|
scores = self.get_scores()
|
||||||
return [exporters.score(score) for score in scores]
|
return [exporters.score(score) for score in scores]
|
||||||
|
|
||||||
|
def export_scores_def_v2(self) -> ArcaeaOfflineDEFV2_Score:
|
||||||
|
scores = self.get_scores()
|
||||||
|
return {
|
||||||
|
"$schema": "https://arcaeaoffline.sevive.xyz/schemas/def/v2/score.schema.json",
|
||||||
|
"type": "score",
|
||||||
|
"version": 2,
|
||||||
|
"scores": [exporters.score_def_v2(score) for score in scores],
|
||||||
|
}
|
||||||
|
|
||||||
def generate_arcsong(self):
|
def generate_arcsong(self):
|
||||||
with self.sessionmaker() as session:
|
with self.sessionmaker() as session:
|
||||||
arcsong = ArcSongJsonBuilder(session).generate_arcsong_json()
|
arcsong = ArcSongJsonBuilder(session).generate_arcsong_json()
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
from . import exporters
|
from . import exporters
|
||||||
from .types import ScoreExport
|
from .types import ArcaeaOfflineDEFV2_Score, ScoreExport
|
||||||
|
20
src/arcaea_offline/external/exports/exporters.py
vendored
20
src/arcaea_offline/external/exports/exporters.py
vendored
@ -1,5 +1,5 @@
|
|||||||
from ...models import Score
|
from ...models import Score
|
||||||
from .types import ScoreExport
|
from .types import ArcaeaOfflineDEFV2_ScoreItem, ScoreExport
|
||||||
|
|
||||||
|
|
||||||
def score(score: Score) -> ScoreExport:
|
def score(score: Score) -> ScoreExport:
|
||||||
@ -17,3 +17,21 @@ def score(score: Score) -> ScoreExport:
|
|||||||
"clear_type": score.clear_type,
|
"clear_type": score.clear_type,
|
||||||
"comment": score.comment,
|
"comment": score.comment,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def score_def_v2(score: Score) -> ArcaeaOfflineDEFV2_ScoreItem:
|
||||||
|
return {
|
||||||
|
"id": score.id,
|
||||||
|
"songId": score.song_id,
|
||||||
|
"ratingClass": score.rating_class,
|
||||||
|
"score": score.score,
|
||||||
|
"pure": score.pure,
|
||||||
|
"far": score.far,
|
||||||
|
"lost": score.lost,
|
||||||
|
"date": score.date,
|
||||||
|
"maxRecall": score.max_recall,
|
||||||
|
"modifier": score.modifier,
|
||||||
|
"clearType": score.clear_type,
|
||||||
|
"source": None,
|
||||||
|
"comment": score.comment,
|
||||||
|
}
|
||||||
|
31
src/arcaea_offline/external/exports/types.py
vendored
31
src/arcaea_offline/external/exports/types.py
vendored
@ -1,4 +1,4 @@
|
|||||||
from typing import Optional, TypedDict
|
from typing import List, Literal, Optional, TypedDict
|
||||||
|
|
||||||
|
|
||||||
class ScoreExport(TypedDict):
|
class ScoreExport(TypedDict):
|
||||||
@ -14,3 +14,32 @@ class ScoreExport(TypedDict):
|
|||||||
modifier: Optional[int]
|
modifier: Optional[int]
|
||||||
clear_type: Optional[int]
|
clear_type: Optional[int]
|
||||||
comment: Optional[str]
|
comment: Optional[str]
|
||||||
|
|
||||||
|
|
||||||
|
class ArcaeaOfflineDEFV2_ScoreItem(TypedDict, total=False):
|
||||||
|
id: Optional[int]
|
||||||
|
songId: str
|
||||||
|
ratingClass: int
|
||||||
|
score: int
|
||||||
|
pure: Optional[int]
|
||||||
|
far: Optional[int]
|
||||||
|
lost: Optional[int]
|
||||||
|
date: Optional[int]
|
||||||
|
maxRecall: Optional[int]
|
||||||
|
modifier: Optional[int]
|
||||||
|
clearType: Optional[int]
|
||||||
|
source: Optional[str]
|
||||||
|
comment: Optional[str]
|
||||||
|
|
||||||
|
|
||||||
|
ArcaeaOfflineDEFV2_Score = TypedDict(
|
||||||
|
"ArcaeaOfflineDEFV2_Score",
|
||||||
|
{
|
||||||
|
"$schema": Literal[
|
||||||
|
"https://arcaeaoffline.sevive.xyz/schemas/def/v2/score.schema.json"
|
||||||
|
],
|
||||||
|
"type": Literal["score"],
|
||||||
|
"version": Literal[2],
|
||||||
|
"scores": List[ArcaeaOfflineDEFV2_ScoreItem],
|
||||||
|
},
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user