From 7a3752669ffecf6d8b2bc39f01772b8f7c57ba90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=92=95=E8=B0=B7=E9=85=B1?= Date: Mon, 15 Sep 2025 18:57:21 +0800 Subject: [PATCH] Delete copilot-instructions.md --- .github/copilot-instructions.md | 115 -------------------------------- 1 file changed, 115 deletions(-) delete mode 120000 .github/copilot-instructions.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 120000 index 3b9b017..0000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,115 +0,0 @@ -# GitHub Copilot Instructions for g0v0-server - -This is an osu! API simulation server built with FastAPI, supporting osu! API v1/v2 and osu!lazer client functionality. - -## Architecture Overview - -**Entry Point:** `main.py` orchestrates startup/shutdown with complex lifespan management including fetchers, GeoIP, schedulers, cache systems, Redis messaging, and achievement loading. - -**Router Organization:** -- `app/router/v1/` - osu! API v1 endpoints (must match [official v1 spec](https://github.com/ppy/osu-api/wiki)) -- `app/router/v2/` - osu! API v2 endpoints (must match [official v2 OpenAPI spec](https://osu.ppy.sh/docs/openapi.yaml)) -- `app/router/private/` - Custom/internal endpoints not in official APIs -- `app/router/auth.py` - OAuth 2.0 authentication flows -- `app/router/notification/` - Chat and notification systems - -**Data Layer:** -- SQLModel ORM with async MySQL (`app/models/`, `app/database/`) -- Redis for caching, sessions, and messaging (`app/service/*_cache_service.py`) -- Alembic migrations in `migrations/` - -**Background Systems:** -- `app/scheduler/` - Background job schedulers (cache refresh, cleanup, rankings) -- `app/service/` - Business logic services (user ranking, email queue, asset proxy) -- Native Rust module `packages/msgpack_lazer_api/` for fast MessagePack serialization - -## Development Workflows - -**Environment Setup:** -```bash -uv sync # Install dependencies -pre-commit install # Setup git hooks -maturin develop -R # Build native Rust module (when changed) -``` - -**Database Operations:** -```bash -alembic revision --autogenerate -m "feat(db): description" # Create migration -alembic upgrade head # Apply migrations -``` - -**Development Server:** -```bash -uvicorn main:app --reload --host 0.0.0.0 --port 8000 -``` - -**Code Quality:** -```bash -pre-commit run --all-files # Run all checks -pyright # Type checking -ruff . # Linting and formatting -``` - -## Key Patterns & Conventions - -**Route Handlers:** -- Always async with dependency injection for DB/Redis -- Keep handlers thin - business logic goes in `app/service/` -- Use `UserCacheService` for user data caching patterns -- Background tasks for async cache updates: `bg_tasks.add_task()` - -**Database Access:** -```python -# Inject database session -async def endpoint(session: AsyncSession = Depends(get_session)): - # Use select() with specific columns for performance - stmt = select(User.id, User.username).where(User.active == True) - # Use exists() for existence checks - exists_stmt = select(exists().where(User.id == user_id)) -``` - -**Caching Patterns:** -```python -# Redis key naming: "user:{id}:profile", "beatmap:{id}:data" -# Use UserCacheService.get_user_resp() for cached user responses -# MessagePack serialization via native module for compact storage -``` - -**Error Handling:** -- `HTTPException` for client errors with proper status codes -- Structured logging with loguru for server-side issues -- Sentry integration for production error tracking - -**Authentication:** -- OAuth 2.0 with multiple flows (password, authorization_code, client_credentials) -- v1 API uses API key in query parameter `k` -- JWT tokens with configurable expiration - -## Critical Integration Points - -**Asset Proxy System:** Routes osu! asset URLs (avatars, beatmap covers) through custom domain - see `app/service/asset_proxy_*.py` - -**Game Mode Support:** Multi-mode with RX/AP variants - mode handling in `app/models/score.py` - -**Rate Limiting:** FastAPI-limiter with Redis backend - different limits for download vs general APIs - -**Native Module:** Rust MessagePack encoder/decoder in `packages/msgpack_lazer_api/` - rebuild with `maturin develop -R` after changes - -**Background Schedulers:** Multiple concurrent schedulers for rankings, cache warming, database cleanup - managed in lifespan handlers - -## API Compliance Rules - -- **v1/v2 endpoints MUST match official osu! API specifications exactly** -- Custom endpoints go in `app/router/private/` only -- Maintain response schema compatibility - breaking changes require migration plan -- Use existing `*Resp` models for consistent response formats - -## Configuration - -Environment-driven via Pydantic Settings in `app/config.py`: -- Database: MySQL with async aiomysql driver -- Cache: Redis for sessions, rate limiting, messaging -- Storage: Local, S3, or Cloudflare R2 backends -- Optional: Sentry, New Relic, email SMTP - -See project wiki for complete `.env` configuration guide. \ No newline at end of file