refactor(database): rename filename to find the models by table name easily

This commit is contained in:
MingxuanGame
2025-10-03 03:33:47 +00:00
parent 40670c094b
commit 37b4eadf79
58 changed files with 76 additions and 115 deletions

View File

@@ -12,7 +12,7 @@ from .beatmapset import (
BeatmapsetResp,
)
from .beatmapset_ratings import BeatmapRating
from .best_score import BestScore
from .best_scores import PPBestScore
from .chat import (
ChannelType,
ChatChannel,
@@ -28,22 +28,16 @@ from .counts import (
from .daily_challenge import DailyChallengeStats, DailyChallengeStatsResp
from .events import Event
from .favourite_beatmapset import FavouriteBeatmapset
from .lazer_user import (
MeResp,
User,
UserResp,
)
from .multiplayer_event import MultiplayerEvent, MultiplayerEventResp
from .notification import Notification, UserNotification
from .password_reset import PasswordReset
from .playlist_attempts import (
from .item_attempts_count import (
ItemAttemptsCount,
ItemAttemptsResp,
PlaylistAggregateScore,
)
from .multiplayer_event import MultiplayerEvent, MultiplayerEventResp
from .notification import Notification, UserNotification
from .password_reset import PasswordReset
from .playlist_best_score import PlaylistBestScore
from .playlists import Playlist, PlaylistResp
from .pp_best_score import PPBestScore
from .rank_history import RankHistory, RankHistoryResp, RankTop
from .relationship import Relationship, RelationshipResp, RelationshipType
from .room import APIUploadedRoom, Room, RoomResp
@@ -62,6 +56,12 @@ from .statistics import (
UserStatisticsResp,
)
from .team import Team, TeamMember, TeamRequest
from .total_score_best_scores import BestScore
from .user import (
MeResp,
User,
UserResp,
)
from .user_account_history import (
UserAccountHistory,
UserAccountHistoryResp,

View File

@@ -24,7 +24,7 @@ from sqlmodel import (
from sqlmodel.ext.asyncio.session import AsyncSession
if TYPE_CHECKING:
from .lazer_user import User
from .user import User
class UserAchievementBase(SQLModel, UTCBaseModel):

View File

@@ -19,7 +19,7 @@ from sqlmodel import (
)
if TYPE_CHECKING:
from .lazer_user import User
from .user import User
class OAuthToken(UTCBaseModel, SQLModel, table=True):

View File

@@ -23,7 +23,7 @@ from sqlmodel.ext.asyncio.session import AsyncSession
if TYPE_CHECKING:
from app.fetcher import Fetcher
from .lazer_user import User
from .user import User
class BeatmapOwner(SQLModel):

View File

@@ -20,7 +20,7 @@ from sqlmodel.ext.asyncio.session import AsyncSession
if TYPE_CHECKING:
from .beatmap import Beatmap, BeatmapResp
from .beatmapset import BeatmapsetResp
from .lazer_user import User
from .user import User
class BeatmapPlaycounts(AsyncAttrs, SQLModel, table=True):

View File

@@ -5,7 +5,7 @@ from app.config import settings
from app.models.beatmap import BeatmapRankStatus, Genre, Language
from app.models.score import GameMode
from .lazer_user import BASE_INCLUDES, User, UserResp
from .user import BASE_INCLUDES, User, UserResp
from pydantic import BaseModel, field_validator, model_validator
from sqlalchemy import JSON, Boolean, Column, DateTime, Text

View File

@@ -1,7 +1,7 @@
from __future__ import annotations
from app.database.beatmapset import Beatmapset
from app.database.lazer_user import User
from app.database.user import User
from sqlmodel import BigInteger, Column, Field, ForeignKey, Relationship, SQLModel

View File

@@ -3,7 +3,7 @@ from typing import TYPE_CHECKING
from app.database.statistics import UserStatistics
from app.models.score import GameMode
from .lazer_user import User
from .user import User
from sqlmodel import (
BigInteger,

View File

@@ -2,7 +2,7 @@ from datetime import datetime
from enum import Enum
from typing import Self
from app.database.lazer_user import RANKING_INCLUDES, User, UserResp
from app.database.user import RANKING_INCLUDES, User, UserResp
from app.models.model import UTCBaseModel
from app.utils import utcnow

View File

@@ -11,7 +11,7 @@ from sqlmodel import (
)
if TYPE_CHECKING:
from .lazer_user import User
from .user import User
class CountBase(SQLModel):

View File

@@ -17,7 +17,7 @@ from sqlmodel import (
from sqlmodel.ext.asyncio.session import AsyncSession
if TYPE_CHECKING:
from .lazer_user import User
from .user import User
class DailyChallengeStatsBase(SQLModel, UTCBaseModel):

View File

@@ -18,7 +18,7 @@ from sqlmodel import (
)
if TYPE_CHECKING:
from .lazer_user import User
from .user import User
class EventType(str, Enum):

View File

@@ -1,7 +1,7 @@
import datetime
from app.database.beatmapset import Beatmapset
from app.database.lazer_user import User
from app.database.user import User
from sqlalchemy.ext.asyncio import AsyncAttrs
from sqlmodel import (

View File

@@ -1,39 +0,0 @@
"""
数据库字段类型工具
提供处理数据库和 Pydantic 之间类型转换的工具
"""
from typing import Any
from pydantic import field_validator
from sqlalchemy import Boolean
def bool_field_validator(field_name: str):
"""为特定布尔字段创建验证器,处理数据库中的 0/1 整数"""
@field_validator(field_name, mode="before")
@classmethod
def validate_bool_field(cls, v: Any) -> bool:
"""将整数 0/1 转换为布尔值"""
if isinstance(v, int):
return bool(v)
return v
return validate_bool_field
def create_bool_field(**kwargs):
"""创建一个带有正确 SQLAlchemy 列定义的布尔字段"""
from sqlmodel import Column, Field
# 如果没有指定 sa_column则使用 Boolean 类型
if "sa_column" not in kwargs:
# 处理 index 参数
index = kwargs.pop("index", False)
if index:
kwargs["sa_column"] = Column(Boolean, index=True)
else:
kwargs["sa_column"] = Column(Boolean)
return Field(**kwargs)

View File

@@ -1,5 +1,5 @@
from .lazer_user import User, UserResp
from .playlist_best_score import PlaylistBestScore
from .user import User, UserResp
from pydantic import BaseModel
from sqlalchemy.ext.asyncio import AsyncAttrs

View File

@@ -1,6 +1,6 @@
from typing import TYPE_CHECKING
from .lazer_user import User
from .user import User
from redis.asyncio import Redis
from sqlmodel import (

View File

@@ -21,7 +21,7 @@ from sqlmodel import (
from sqlmodel.ext.asyncio.session import AsyncSession
if TYPE_CHECKING:
from .lazer_user import User
from .user import User
class RankHistory(SQLModel, table=True):

View File

@@ -1,6 +1,6 @@
from enum import Enum
from .lazer_user import User, UserResp
from .user import User, UserResp
from pydantic import BaseModel
from sqlmodel import (

View File

@@ -1,6 +1,6 @@
from datetime import datetime
from app.database.playlist_attempts import PlaylistAggregateScore
from app.database.item_attempts_count import PlaylistAggregateScore
from app.database.room_participated_user import RoomParticipatedUser
from app.models.model import UTCBaseModel
from app.models.multiplayer_hub import ServerMultiplayerRoom
@@ -14,8 +14,8 @@ from app.models.room import (
)
from app.utils import utcnow
from .lazer_user import User, UserResp
from .playlists import Playlist, PlaylistResp
from .user import User, UserResp
from sqlalchemy.ext.asyncio import AsyncAttrs
from sqlmodel import (

View File

@@ -15,8 +15,8 @@ from sqlmodel import (
)
if TYPE_CHECKING:
from .lazer_user import User
from .room import Room
from .user import User
class RoomParticipatedUser(AsyncAttrs, SQLModel, table=True):

View File

@@ -38,17 +38,17 @@ from app.utils import utcnow
from .beatmap import Beatmap, BeatmapResp
from .beatmapset import BeatmapsetResp
from .best_score import BestScore
from .best_scores import PPBestScore
from .counts import MonthlyPlaycounts
from .events import Event, EventType
from .lazer_user import User, UserResp
from .playlist_best_score import PlaylistBestScore
from .pp_best_score import PPBestScore
from .relationship import (
Relationship as DBRelationship,
RelationshipType,
)
from .score_token import ScoreToken
from .total_score_best_scores import BestScore
from .user import User, UserResp
from pydantic import BaseModel, field_serializer, field_validator
from redis.asyncio import Redis

View File

@@ -5,7 +5,7 @@ from app.models.score import GameMode
from app.utils import utcnow
from .beatmap import Beatmap
from .lazer_user import User
from .user import User
from sqlalchemy import Column, DateTime, Index
from sqlalchemy.orm import Mapped

View File

@@ -23,7 +23,7 @@ from sqlmodel import (
from sqlmodel.ext.asyncio.session import AsyncSession
if TYPE_CHECKING:
from .lazer_user import User, UserResp
from .user import User, UserResp
class UserStatisticsBase(SQLModel):
@@ -122,7 +122,7 @@ class UserStatisticsResp(UserStatisticsBase):
"progress": int(math.fmod(obj.level_current, 1) * 100),
}
if "user" in include:
from .lazer_user import RANKING_INCLUDES, UserResp
from .user import RANKING_INCLUDES, UserResp
user = await UserResp.from_db(await obj.awaitable_attrs.user, session, include=RANKING_INCLUDES)
s.user = user
@@ -149,7 +149,7 @@ class UserStatisticsResp(UserStatisticsBase):
async def get_rank(session: AsyncSession, statistics: UserStatistics, country: str | None = None) -> int | None:
from .lazer_user import User
from .user import User
query = select(
UserStatistics.user_id,

View File

@@ -8,7 +8,7 @@ from sqlalchemy import Column, DateTime
from sqlmodel import BigInteger, Field, ForeignKey, Relationship, SQLModel
if TYPE_CHECKING:
from .lazer_user import User
from .user import User
class Team(SQLModel, UTCBaseModel, table=True):

View File

@@ -4,7 +4,7 @@ from app.calculator import calculate_score_to_level
from app.database.statistics import UserStatistics
from app.models.score import GameMode, Rank
from .lazer_user import User
from .user import User
from sqlmodel import (
JSON,

View File

@@ -261,11 +261,11 @@ class UserResp(UserBase):
) -> "UserResp":
from app.dependencies.database import get_redis
from .best_score import BestScore
from .best_scores import PPBestScore
from .favourite_beatmapset import FavouriteBeatmapset
from .pp_best_score import PPBestScore
from .relationship import Relationship, RelationshipResp, RelationshipType
from .score import Score, get_user_first_score_count
from .total_score_best_scores import BestScore
ruleset = ruleset or obj.playmode