22
22
from src .cruds .utils .funcs import remove_prefix
23
23
from src .cruds .utils .search import buildDatabaseQuery
24
24
from src .database .objects .background import Background as BackgroundSave
25
- from src .database .objects .file_map import FileMap
26
25
from src .database .objects .effect import Effect as EffectSave
27
26
from src .database .objects .engine import Engine as EngineSave
27
+ from src .database .objects .file_map import FileMap
28
28
from src .database .objects .genre import Genre as GenreSave
29
29
from src .database .objects .level import Level as LevelSave
30
30
from src .database .objects .particle import Particle as ParticleSave
@@ -57,7 +57,9 @@ class SRLConvert:
57
57
58
58
59
59
class LevelCrud (AbstractCrud ): # type: ignore
60
- async def create_dict (self , db : AsyncSession , model : LevelReqResp , exclude_unset : bool = False ) -> Dict [str , Any ]:
60
+ async def create_dict (
61
+ self , db : AsyncSession , model : LevelReqResp , exclude_unset : bool = False
62
+ ) -> Dict [str , Any ]:
61
63
"""モデルに指定されたSonolusオブジェクトをDBから取り出してIDを埋めます"""
62
64
model_import : Dict [str , Any ] = model .dict (exclude_unset = exclude_unset )
63
65
# DB側カラム名に合わせる
@@ -70,15 +72,21 @@ async def create_dict(self, db: AsyncSession, model: LevelReqResp, exclude_unset
70
72
if convert .name in model_import :
71
73
obj_req = model_import [convert .name ]
72
74
if obj_req :
73
- obj_db = await get_first_item_or_404 (db , select (convert .obj .id ).filter (convert .obj .name == obj_req ))
75
+ obj_db = await get_first_item_or_404 (
76
+ db , select (convert .obj .id ).filter (convert .obj .name == obj_req )
77
+ )
74
78
model_import [convert .name + "Id" ] = obj_db
75
79
# 存在してると変換できないフィールドを消す
76
- for key in ["artists" , "artistsEn" , "preview" ] + [s .name for s in SRLConvertDict ]:
80
+ for key in ["artists" , "artistsEn" , "preview" ] + [
81
+ s .name for s in SRLConvertDict
82
+ ]:
77
83
if key in model_import :
78
84
del model_import [key ]
79
85
return model_import
80
86
81
- async def bulk_db_to_resp (self , db : AsyncSession , level_db : LevelSave , localization : str = "ja" ) -> None :
87
+ async def bulk_db_to_resp (
88
+ self , db : AsyncSession , level_db : LevelSave , localization : str = "ja"
89
+ ) -> None :
82
90
# 各地のSRLを応答型に変換し回る
83
91
for db_obj in [
84
92
level_db ,
@@ -104,9 +112,13 @@ async def get_named_item_or_404(self, db: AsyncSession, name: str) -> LevelReqRe
104
112
stmt .options (
105
113
joinedload (LevelSave .engine ).options (
106
114
joinedload (EngineSave .user ),
107
- joinedload (EngineSave .background ).options (joinedload (BackgroundSave .user )),
115
+ joinedload (EngineSave .background ).options (
116
+ joinedload (BackgroundSave .user )
117
+ ),
108
118
joinedload (EngineSave .skin ).options (joinedload (SkinSave .user )),
109
- joinedload (EngineSave .particle ).options (joinedload (ParticleSave .user )),
119
+ joinedload (EngineSave .particle ).options (
120
+ joinedload (ParticleSave .user )
121
+ ),
110
122
joinedload (EngineSave .effect ).options (joinedload (EffectSave .user )),
111
123
),
112
124
joinedload (LevelSave .genre ),
@@ -148,7 +160,9 @@ async def add(
148
160
)
149
161
return resp
150
162
151
- async def get (self , db : AsyncSession , name : str , localization : str ) -> GetLevelResponse :
163
+ async def get (
164
+ self , db : AsyncSession , name : str , localization : str
165
+ ) -> GetLevelResponse :
152
166
"""レベルを取得します"""
153
167
level_db = await self .get_named_item_or_404 (db , remove_prefix (name ))
154
168
await self .bulk_db_to_resp (db , level_db , localization )
@@ -192,17 +206,23 @@ async def delete(
192
206
await super ().delete (db , name , auth )
193
207
return None
194
208
195
- async def list (self , db : AsyncSession , page : int , queries : SearchQueries ) -> GetLevelListResponse :
209
+ async def list (
210
+ self , db : AsyncSession , page : int , queries : SearchQueries
211
+ ) -> GetLevelListResponse :
196
212
"""レベル一覧を取得します"""
197
213
select_query = buildDatabaseQuery (LevelSave , queries , False )
198
214
userPage : Page [LevelSave ] = await paginate (
199
215
db ,
200
216
select_query .options (
201
217
selectinload (LevelSave .engine ).options (
202
218
joinedload (EngineSave .user ),
203
- joinedload (EngineSave .background ).options (joinedload (BackgroundSave .user )),
219
+ joinedload (EngineSave .background ).options (
220
+ joinedload (BackgroundSave .user )
221
+ ),
204
222
joinedload (EngineSave .skin ).options (joinedload (SkinSave .user )),
205
- joinedload (EngineSave .particle ).options (joinedload (ParticleSave .user )),
223
+ joinedload (EngineSave .particle ).options (
224
+ joinedload (ParticleSave .user )
225
+ ),
206
226
joinedload (EngineSave .effect ).options (joinedload (EffectSave .user )),
207
227
),
208
228
joinedload (LevelSave .genre ),
@@ -213,7 +233,9 @@ async def list(self, db: AsyncSession, page: int, queries: SearchQueries) -> Get
213
233
Params (page = page + 1 , size = 20 ),
214
234
) # type: ignore
215
235
resp : SonolusPage = toSonolusPage (userPage )
216
- await asyncio .gather (* [self .bulk_db_to_resp (db , r , queries .localization ) for r in resp .items ])
236
+ await asyncio .gather (
237
+ * [self .bulk_db_to_resp (db , r , queries .localization ) for r in resp .items ]
238
+ )
217
239
resp .items = [r .toItem () for r in resp .items ]
218
240
return GetLevelListResponse (
219
241
pageCount = resp .pageCount if resp .pageCount > 0 else 1 ,
0 commit comments