refactor(database): rename filename to find the models by table name easily
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ from sqlmodel import (
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .lazer_user import User
|
||||
from .user import User
|
||||
|
||||
|
||||
class CountBase(SQLModel):
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -18,7 +18,7 @@ from sqlmodel import (
|
||||
)
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from .lazer_user import User
|
||||
from .user import User
|
||||
|
||||
|
||||
class EventType(str, Enum):
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
@@ -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 (
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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,
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user