refactor(project): use unified utcnow

This commit is contained in:
MingxuanGame
2025-08-22 11:27:45 +00:00
parent da66420eaa
commit 9b00dbda28
49 changed files with 201 additions and 167 deletions

View File

@@ -1,6 +1,6 @@
from __future__ import annotations
from datetime import UTC, datetime, timedelta
from datetime import timedelta
import re
from typing import Literal
@@ -36,6 +36,7 @@ from app.service.email_verification_service import (
)
from app.service.login_log_service import LoginLogService
from app.service.password_reset_service import password_reset_service
from app.utils import utcnow
from fastapi import APIRouter, Depends, Form, Request
from fastapi.responses import JSONResponse
@@ -156,8 +157,8 @@ async def register_user(
pw_bcrypt=get_password_hash(user_password),
priv=1, # 普通用户权限
country_code=country_code, # 根据 IP 地理位置设置国家
join_date=datetime.now(UTC),
last_visit=datetime.now(UTC),
join_date=utcnow(),
last_visit=utcnow(),
is_supporter=settings.enable_supporter_for_all_users,
support_level=int(settings.enable_supporter_for_all_users),
)

View File

@@ -1,7 +1,5 @@
from __future__ import annotations
from datetime import UTC, datetime
from app.config import settings
from app.database.lazer_user import User
from app.database.notification import Notification, UserNotification
@@ -9,6 +7,7 @@ from app.dependencies.database import Database
from app.dependencies.user import get_client_user
from app.models.chat import ChatEvent
from app.router.v2 import api_v2_router as router
from app.utils import utcnow
from . import channel, message # noqa: F401
from .server import (
@@ -135,7 +134,7 @@ async def mark_notifications_as_read(
data={
"notifications": [i.model_dump() for i in identities],
"read_count": len(user_notifications),
"timestamp": datetime.now(UTC).isoformat(),
"timestamp": utcnow().isoformat(),
},
),
)

View File

@@ -7,7 +7,7 @@ import json
from app.dependencies.database import get_redis, get_redis_message
from app.log import logger
from app.utils import bg_tasks
from app.utils import bg_tasks, utcnow
from .router import router
@@ -74,7 +74,7 @@ async def get_server_stats() -> ServerStats:
registered_users=registered_count,
online_users=online_count,
playing_users=playing_count,
timestamp=datetime.utcnow(),
timestamp=utcnow(),
)
except Exception as e:
logger.error(f"Error getting server stats: {e}")
@@ -83,7 +83,7 @@ async def get_server_stats() -> ServerStats:
registered_users=0,
online_users=0,
playing_users=0,
timestamp=datetime.utcnow(),
timestamp=utcnow(),
)
@@ -158,7 +158,7 @@ async def get_stats_debug_info():
try:
from app.service.enhanced_interval_stats import EnhancedIntervalStatsManager
current_time = datetime.utcnow()
current_time = utcnow()
current_interval = await EnhancedIntervalStatsManager.get_current_interval_info()
interval_stats = await EnhancedIntervalStatsManager.get_current_interval_stats()
@@ -334,7 +334,7 @@ async def record_hourly_stats() -> None:
online_count = await _get_online_users_count(redis_async)
playing_count = await _get_playing_users_count(redis_async)
current_time = datetime.utcnow()
current_time = utcnow()
history_point = {
"timestamp": current_time.isoformat(),
"online_count": online_count,

View File

@@ -1,6 +1,5 @@
from __future__ import annotations
from datetime import UTC, datetime
import hashlib
from app.database.lazer_user import BASE_INCLUDES, User, UserResp
@@ -15,7 +14,7 @@ from app.models.notification import (
)
from app.router.notification import server
from app.storage.base import StorageService
from app.utils import check_image
from app.utils import check_image, utcnow
from .router import router
@@ -53,7 +52,7 @@ async def create_team(
check_image(flag, 2 * 1024 * 1024, 240, 120)
check_image(cover, 10 * 1024 * 1024, 3000, 2000)
now = datetime.now(UTC)
now = utcnow()
team = Team(name=name, short_name=short_name, leader_id=user_id, created_at=now)
session.add(team)
await session.commit()
@@ -196,7 +195,7 @@ async def request_join_team(
)
).first():
raise HTTPException(status_code=409, detail="Join request already exists")
team_request = TeamRequest(user_id=current_user.id, team_id=team_id, requested_at=datetime.now(UTC))
team_request = TeamRequest(user_id=current_user.id, team_id=team_id, requested_at=utcnow())
session.add(team_request)
await session.commit()
await session.refresh(team_request)
@@ -233,7 +232,7 @@ async def handle_request(
if (await session.exec(select(exists()).where(TeamMember.user_id == user_id))).first():
raise HTTPException(status_code=409, detail="User is already a member of the team")
session.add(TeamMember(user_id=user_id, team_id=team_id, joined_at=datetime.now(UTC)))
session.add(TeamMember(user_id=user_id, team_id=team_id, joined_at=utcnow()))
await server.new_private_notification(TeamApplicationAccept.init(team_request))
else:

View File

@@ -1,13 +1,12 @@
from __future__ import annotations
from datetime import UTC, datetime
from app.auth import validate_username
from app.config import settings
from app.database.events import Event, EventType
from app.database.lazer_user import User
from app.dependencies.database import Database
from app.dependencies.user import get_client_user
from app.utils import utcnow
from .router import router
@@ -47,7 +46,7 @@ async def user_rename(
current_user.username = new_name
current_user.previous_usernames = previous_username
rename_event = Event(
created_at=datetime.now(UTC),
created_at=utcnow(),
type=EventType.USERNAME_CHANGE,
user_id=current_user.id,
user=current_user,

View File

@@ -1,6 +1,6 @@
from __future__ import annotations
from datetime import UTC, datetime, timedelta
from datetime import datetime, timedelta
from typing import Literal
from app.database.pp_best_score import PPBestScore
@@ -8,6 +8,7 @@ from app.database.score import Score, get_leaderboard
from app.dependencies.database import Database
from app.models.mods import int_to_mods, mod_to_save, mods_to_int
from app.models.score import GameMode, LeaderboardType
from app.utils import utcnow
from .router import AllStrModel, router
@@ -112,7 +113,7 @@ async def get_user_recent(
.where(
Score.user_id == user if type == "id" or user.isdigit() else col(Score.user).has(username=user),
Score.gamemode == GameMode.from_int_extra(ruleset_id),
Score.ended_at > datetime.now(UTC) - timedelta(hours=24),
Score.ended_at > utcnow() - timedelta(hours=24),
)
.order_by(col(Score.pp).desc())
.options(joinedload(Score.beatmap))

View File

@@ -1,6 +1,6 @@
from __future__ import annotations
from datetime import UTC, datetime
from datetime import UTC
from typing import Literal
from app.database.beatmap import Beatmap, BeatmapResp
@@ -17,6 +17,7 @@ from app.dependencies.user import get_client_user, get_current_user
from app.models.room import RoomCategory, RoomStatus
from app.service.room import create_playlist_room_from_api
from app.signalr.hub import MultiplayerHubs
from app.utils import utcnow
from .router import router
@@ -50,7 +51,7 @@ async def get_all_rooms(
):
resp_list: list[RoomResp] = []
where_clauses: list[ColumnElement[bool]] = [col(Room.category) == category]
now = datetime.now(UTC)
now = utcnow()
if status is not None:
where_clauses.append(col(Room.status) == status)
if mode == "open":
@@ -112,12 +113,12 @@ async def _participate_room(room_id: int, user_id: int, db_room: Room, session:
participated_user = RoomParticipatedUser(
room_id=room_id,
user_id=user_id,
joined_at=datetime.now(UTC),
joined_at=utcnow(),
)
session.add(participated_user)
else:
participated_user.left_at = None
participated_user.joined_at = datetime.now(UTC)
participated_user.joined_at = utcnow()
db_room.participant_count += 1
await redis.publish("chat:room:joined", f"{db_room.channel_id}:{user_id}")
@@ -185,7 +186,7 @@ async def delete_room(
if db_room is None:
raise HTTPException(404, "Room not found")
else:
db_room.ends_at = datetime.now(UTC)
db_room.ends_at = utcnow()
await db.commit()
return None
@@ -238,7 +239,7 @@ async def remove_user_from_room(
)
).first()
if participated_user is not None:
participated_user.left_at = datetime.now(UTC)
participated_user.left_at = utcnow()
if db_room.participant_count > 0:
db_room.participant_count -= 1
await redis.publish("chat:room:left", f"{db_room.channel_id}:{user_id}")

View File

@@ -1,6 +1,6 @@
from __future__ import annotations
from datetime import UTC, date, datetime
from datetime import UTC, date
import math
import time
@@ -50,6 +50,7 @@ from app.models.score import (
from app.service.user_cache_service import get_user_cache_service
from app.storage.base import StorageService
from app.storage.local import LocalStorageService
from app.utils import utcnow
from .router import router
@@ -166,7 +167,7 @@ async def submit_score(
total_users = (await db.exec(select(func.count()).select_from(User))).one()
if resp.rank_global is not None and resp.rank_global <= min(math.ceil(float(total_users) * 0.01), 50):
rank_event = Event(
created_at=datetime.now(UTC),
created_at=utcnow(),
type=EventType.RANK,
user_id=score.user_id,
user=score.user,
@@ -451,7 +452,7 @@ async def create_playlist_score(
if not room:
raise HTTPException(status_code=404, detail="Room not found")
db_room_time = room.ends_at.replace(tzinfo=UTC) if room.ends_at else None
if db_room_time and db_room_time < datetime.now(UTC).replace(tzinfo=UTC):
if db_room_time and db_room_time < utcnow().replace(tzinfo=UTC):
raise HTTPException(status_code=400, detail="Room has ended")
item = (await session.exec(select(Playlist).where(Playlist.id == playlist_id, Playlist.room_id == room_id))).first()
if not item:

View File

@@ -1,6 +1,6 @@
from __future__ import annotations
from datetime import UTC, datetime, timedelta
from datetime import timedelta
from typing import Literal
from app.config import settings
@@ -22,6 +22,7 @@ from app.log import logger
from app.models.score import GameMode
from app.models.user import BeatmapsetType
from app.service.user_cache_service import get_user_cache_service
from app.utils import utcnow
from .router import router
@@ -338,7 +339,7 @@ async def get_user_scores(
where_clause &= exists().where(col(PPBestScore.score_id) == Score.id)
order_by = col(Score.pp).desc()
elif type == "recent":
where_clause &= Score.ended_at > datetime.now(UTC) - timedelta(hours=24)
where_clause &= Score.ended_at > utcnow() - timedelta(hours=24)
order_by = col(Score.ended_at).desc()
elif type == "firsts":
# TODO