更新最后使用时间,如果创建时间为空则同时设置创建时间 会更新所有具有相同 uid 和 cookie 的记录
(
cls,
session: AsyncSession,
uid: str,
user_id: str,
bot_id: str,
game_id: Optional[int] = None,
)
| 207 | @with_lock |
| 208 | @with_session |
| 209 | async def update_last_used_time( |
| 210 | cls, |
| 211 | session: AsyncSession, |
| 212 | uid: str, |
| 213 | user_id: str, |
| 214 | bot_id: str, |
| 215 | game_id: Optional[int] = None, |
| 216 | ): |
| 217 | """更新最后使用时间,如果创建时间为空则同时设置创建时间 |
| 218 | |
| 219 | 会更新所有具有相同 uid 和 cookie 的记录 |
| 220 | """ |
| 221 | import time |
| 222 | |
| 223 | current_time = int(time.time()) |
| 224 | |
| 225 | # 先查询当前用户获取 cookie |
| 226 | filters = [ |
| 227 | cls.user_id == user_id, |
| 228 | cls.uid == uid, |
| 229 | cls.bot_id == bot_id, |
| 230 | ] |
| 231 | if game_id is not None: |
| 232 | filters.append(cls.game_id == game_id) |
| 233 | |
| 234 | result = await session.execute(select(cls).where(*filters)) |
| 235 | user = result.scalars().first() |
| 236 | |
| 237 | if user and user.cookie: |
| 238 | # 更新所有具有相同 user_id 和 cookie 的记录 |
| 239 | all_users_result = await session.execute( |
| 240 | select(cls).where( |
| 241 | cls.user_id == user_id, |
| 242 | cls.cookie == user.cookie, |
| 243 | ) |
| 244 | ) |
| 245 | all_users = all_users_result.scalars().all() |
| 246 | |
| 247 | # 批量更新 |
| 248 | for u in all_users: |
| 249 | u.last_used_time = current_time |
| 250 | if u.created_time is None: |
| 251 | u.created_time = current_time |
| 252 | |
| 253 | return True |
| 254 | return False |
| 255 | |
| 256 | |
| 257 | class RoverSignData(PydanticBaseModel): |
no outgoing calls
no test coverage detected