feat(event): 添加百次播放事件记录功能
- 在 beatmap_playcounts 模块中增加了事件记录功能 - 当用户播放次数达到百的倍数时,创建并记录 Event 对象 - 事件类型为 EventType.BEATMAP_PLAYCOUNT
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
|
from datetime import UTC, datetime
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
from app.database.events import Event, EventType
|
||||||
|
|
||||||
from pydantic import BaseModel
|
from pydantic import BaseModel
|
||||||
from sqlalchemy.ext.asyncio import AsyncAttrs
|
from sqlalchemy.ext.asyncio import AsyncAttrs
|
||||||
from sqlmodel import (
|
from sqlmodel import (
|
||||||
@@ -70,6 +73,21 @@ async def process_beatmap_playcount(
|
|||||||
|
|
||||||
if existing_playcount:
|
if existing_playcount:
|
||||||
existing_playcount.playcount += 1
|
existing_playcount.playcount += 1
|
||||||
|
if existing_playcount.playcount % 100 == 0:
|
||||||
|
playcount_event = Event(
|
||||||
|
created_at=datetime.now(UTC),
|
||||||
|
type=EventType.BEATMAP_PLAYCOUNT,
|
||||||
|
user_id=user_id,
|
||||||
|
)
|
||||||
|
await existing_playcount.awaitable_attrs.beatmap
|
||||||
|
playcount_event.event_payload = {
|
||||||
|
"count": existing_playcount.playcount,
|
||||||
|
"beatmap": {
|
||||||
|
"title": existing_playcount.beatmap.version,
|
||||||
|
"url": existing_playcount.beatmap.url,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
session.add(playcount_event)
|
||||||
else:
|
else:
|
||||||
new_playcount = BeatmapPlaycounts(
|
new_playcount = BeatmapPlaycounts(
|
||||||
user_id=user_id, beatmap_id=beatmap_id, playcount=1
|
user_id=user_id, beatmap_id=beatmap_id, playcount=1
|
||||||
|
|||||||
Reference in New Issue
Block a user