MCPcopy Create free account
hub / github.com/Loping151/RoverSign / RoverSign

Class RoverSign

RoverSign/utils/database/models.py:295–401  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

293
294
295class RoverSign(BaseIDModel, table=True):
296 __table_args__: Dict[str, Any] = {"extend_existing": True}
297 uid: str = Field(title="鸣潮UID")
298 pgr_uid: Optional[str] = Field(default=None, title="战双UID")
299 game_sign: int = Field(default=0, title="游戏签到(鸣潮)")
300 pgr_game_sign: int = Field(default=0, title="游戏签到(战双)")
301 bbs_sign: int = Field(default=0, title="社区签到")
302 bbs_detail: int = Field(default=0, title="社区浏览")
303 bbs_like: int = Field(default=0, title="社区点赞")
304 bbs_share: int = Field(default=0, title="社区分享")
305 date: str = Field(default=get_today_date(), title="签到日期")
306
307 @classmethod
308 async def _find_sign_record(
309 cls: Type[T_RoverSign],
310 session: AsyncSession,
311 uid: str,
312 date: str,
313 ) -> Optional[T_RoverSign]:
314 """查找指定UID和日期的签到记录(内部方法)"""
315 query = select(cls).where(cls.uid == uid).where(cls.date == date)
316 result = await session.execute(query)
317 return result.scalars().first()
318
319 @classmethod
320 @with_lock
321 @with_session
322 async def upsert_rover_sign(
323 cls: Type[T_RoverSign],
324 session: AsyncSession,
325 rover_sign_data: RoverSignData,
326 ) -> Optional[T_RoverSign]:
327 """
328 插入或更新签到数据
329 返回更新后的记录或新插入的记录
330 """
331 if not rover_sign_data.uid:
332 return None
333
334 # 确保日期有值
335 rover_sign_data.date = rover_sign_data.date or get_today_date()
336
337 # 查询是否存在记录
338 record = await cls._find_sign_record(
339 session, rover_sign_data.uid, rover_sign_data.date
340 )
341
342 if record:
343 # 更新已有记录
344 for field in [
345 "game_sign",
346 "pgr_game_sign",
347 "bbs_sign",
348 "bbs_detail",
349 "bbs_like",
350 "bbs_share",
351 ]:
352 value = getattr(rover_sign_data, field)

Callers

nothing calls this directly

Calls 1

get_today_dateFunction · 0.85

Tested by

no test coverage detected