From d8c607137a92ea0b07453da8f3218afd86f79887 Mon Sep 17 00:00:00 2001 From: MingxuanGame Date: Mon, 11 Aug 2025 14:38:45 +0000 Subject: [PATCH] refactor(router): restructure --- app/router/__init__.py | 19 ++----------------- app/router/fetcher.py | 2 +- app/router/v2/__init__.py | 19 +++++++++++++++++++ app/router/{ => v2}/beatmap.py | 2 +- app/router/{ => v2}/beatmapset.py | 2 +- app/router/{ => v2}/me.py | 2 +- app/router/{ => v2}/misc.py | 2 +- app/router/{ => v2}/relationship.py | 2 +- app/router/{ => v2}/room.py | 2 +- app/router/{api_router.py => v2/router.py} | 2 +- app/router/{ => v2}/score.py | 2 +- app/router/{ => v2}/user.py | 2 +- app/signalr/router.py | 2 +- main.py | 9 ++++----- 14 files changed, 36 insertions(+), 33 deletions(-) create mode 100644 app/router/v2/__init__.py rename app/router/{ => v2}/beatmap.py (99%) rename app/router/{ => v2}/beatmapset.py (99%) rename app/router/{ => v2}/me.py (96%) rename app/router/{ => v2}/misc.py (94%) rename app/router/{ => v2}/relationship.py (99%) rename app/router/{ => v2}/room.py (99%) rename app/router/{api_router.py => v2/router.py} (64%) rename app/router/{ => v2}/score.py (99%) rename app/router/{ => v2}/user.py (99%) diff --git a/app/router/__init__.py b/app/router/__init__.py index bc82905..4a4fb9b 100644 --- a/app/router/__init__.py +++ b/app/router/__init__.py @@ -2,23 +2,8 @@ from __future__ import annotations from app.signalr import signalr_router as signalr_router -from . import ( # pyright: ignore[reportUnusedImport] # noqa: F401 - beatmap, - beatmapset, - me, - misc, - relationship, - room, - score, - user, -) -from .api_router import router as api_router from .auth import router as auth_router from .fetcher import fetcher_router as fetcher_router +from .v2 import api_v2_router as api_v2_router -__all__ = [ - "api_router", - "auth_router", - "fetcher_router", - "signalr_router", -] +__all__ = ["api_v2_router", "auth_router", "fetcher_router", "signalr_router"] diff --git a/app/router/fetcher.py b/app/router/fetcher.py index 013aaa0..1d0bdca 100644 --- a/app/router/fetcher.py +++ b/app/router/fetcher.py @@ -5,7 +5,7 @@ from app.fetcher import Fetcher from fastapi import APIRouter, Depends -fetcher_router = APIRouter() +fetcher_router = APIRouter(prefix="/fetcher", tags=["fetcher"]) @fetcher_router.get("/callback") diff --git a/app/router/v2/__init__.py b/app/router/v2/__init__.py new file mode 100644 index 0000000..7e09509 --- /dev/null +++ b/app/router/v2/__init__.py @@ -0,0 +1,19 @@ +from __future__ import annotations + +from app.signalr import signalr_router as signalr_router + +from . import ( # pyright: ignore[reportUnusedImport] # noqa: F401 + beatmap, + beatmapset, + me, + misc, + relationship, + room, + score, + user, +) +from .router import router as api_v2_router + +__all__ = [ + "api_v2_router", +] diff --git a/app/router/beatmap.py b/app/router/v2/beatmap.py similarity index 99% rename from app/router/beatmap.py rename to app/router/v2/beatmap.py index 123c260..a621a6c 100644 --- a/app/router/beatmap.py +++ b/app/router/v2/beatmap.py @@ -17,7 +17,7 @@ from app.models.score import ( GameMode, ) -from .api_router import router +from .router import router from fastapi import Depends, HTTPException, Query, Security from httpx import HTTPError, HTTPStatusError diff --git a/app/router/beatmapset.py b/app/router/v2/beatmapset.py similarity index 99% rename from app/router/beatmapset.py rename to app/router/v2/beatmapset.py index 09f1aeb..ef5faba 100644 --- a/app/router/beatmapset.py +++ b/app/router/v2/beatmapset.py @@ -8,7 +8,7 @@ from app.dependencies.fetcher import get_fetcher from app.dependencies.user import get_current_user from app.fetcher import Fetcher -from .api_router import router +from .router import router from fastapi import Depends, Form, HTTPException, Query, Security from fastapi.responses import RedirectResponse diff --git a/app/router/me.py b/app/router/v2/me.py similarity index 96% rename from app/router/me.py rename to app/router/v2/me.py index 28b37ea..b2fd7b6 100644 --- a/app/router/me.py +++ b/app/router/v2/me.py @@ -6,7 +6,7 @@ from app.dependencies import get_current_user from app.dependencies.database import get_db from app.models.score import GameMode -from .api_router import router +from .router import router from fastapi import Depends, Security from sqlmodel.ext.asyncio.session import AsyncSession diff --git a/app/router/misc.py b/app/router/v2/misc.py similarity index 94% rename from app/router/misc.py rename to app/router/v2/misc.py index 1921008..06baf34 100644 --- a/app/router/misc.py +++ b/app/router/v2/misc.py @@ -4,7 +4,7 @@ from datetime import UTC, datetime from app.config import settings -from .api_router import router +from .router import router from pydantic import BaseModel diff --git a/app/router/relationship.py b/app/router/v2/relationship.py similarity index 99% rename from app/router/relationship.py rename to app/router/v2/relationship.py index b63b3a8..fc5c676 100644 --- a/app/router/relationship.py +++ b/app/router/v2/relationship.py @@ -4,7 +4,7 @@ from app.database import Relationship, RelationshipResp, RelationshipType, User from app.dependencies.database import get_db from app.dependencies.user import get_current_user -from .api_router import router +from .router import router from fastapi import Depends, HTTPException, Query, Request, Security from pydantic import BaseModel diff --git a/app/router/room.py b/app/router/v2/room.py similarity index 99% rename from app/router/room.py rename to app/router/v2/room.py index 3f65fcc..217c716 100644 --- a/app/router/room.py +++ b/app/router/v2/room.py @@ -18,7 +18,7 @@ from app.models.room import RoomCategory, RoomStatus from app.service.room import create_playlist_room_from_api from app.signalr.hub import MultiplayerHubs -from .api_router import router +from .router import router from fastapi import Depends, HTTPException, Query, Security from pydantic import BaseModel, Field diff --git a/app/router/api_router.py b/app/router/v2/router.py similarity index 64% rename from app/router/api_router.py rename to app/router/v2/router.py index 6a3e356..0bd0b4b 100644 --- a/app/router/api_router.py +++ b/app/router/v2/router.py @@ -2,4 +2,4 @@ from __future__ import annotations from fastapi import APIRouter -router = APIRouter() +router = APIRouter(prefix="/api/v2") diff --git a/app/router/score.py b/app/router/v2/score.py similarity index 99% rename from app/router/score.py rename to app/router/v2/score.py index a31030a..7ebd757 100644 --- a/app/router/score.py +++ b/app/router/v2/score.py @@ -44,7 +44,7 @@ from app.models.score import ( ) from app.path import REPLAY_DIR -from .api_router import router +from .router import router from fastapi import Body, Depends, Form, HTTPException, Query, Security from fastapi.responses import FileResponse diff --git a/app/router/user.py b/app/router/v2/user.py similarity index 99% rename from app/router/user.py rename to app/router/v2/user.py index eb92552..95b8640 100644 --- a/app/router/user.py +++ b/app/router/v2/user.py @@ -18,7 +18,7 @@ from app.dependencies.user import get_current_user from app.models.score import GameMode from app.models.user import BeatmapsetType -from .api_router import router +from .router import router from fastapi import Depends, HTTPException, Query, Security from pydantic import BaseModel diff --git a/app/signalr/router.py b/app/signalr/router.py index 1b50fcf..cb63d6b 100644 --- a/app/signalr/router.py +++ b/app/signalr/router.py @@ -18,7 +18,7 @@ from fastapi import APIRouter, Depends, Header, HTTPException, Query, WebSocket from fastapi.security import SecurityScopes from sqlmodel.ext.asyncio.session import AsyncSession -router = APIRouter() +router = APIRouter(prefix="/signalr", tags=["SignalR"]) @router.post("/{hub}/negotiate", response_model=NegotiateResponse) diff --git a/main.py b/main.py index 3f3522c..774a7b9 100644 --- a/main.py +++ b/main.py @@ -9,7 +9,7 @@ from app.dependencies.fetcher import get_fetcher from app.dependencies.scheduler import init_scheduler, stop_scheduler from app.log import logger from app.router import ( - api_router, + api_v2_router, auth_router, fetcher_router, signalr_router, @@ -35,9 +35,9 @@ async def lifespan(app: FastAPI): app = FastAPI(title="osu! API 模拟服务器", version="1.0.0", lifespan=lifespan) -app.include_router(api_router, prefix="/api/v2") -app.include_router(signalr_router, prefix="/signalr") -app.include_router(fetcher_router, prefix="/fetcher") +app.include_router(api_v2_router) +app.include_router(signalr_router) +app.include_router(fetcher_router) app.include_router(auth_router) @@ -64,7 +64,6 @@ if settings.osu_web_client_secret == "your_osu_web_client_secret_here": "Use this command to generate: openssl rand -hex 40" ) - if __name__ == "__main__": import uvicorn