89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
"""青叶 - FastAPI 应用入口"""
|
|
|
|
from contextlib import asynccontextmanager
|
|
|
|
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.staticfiles import StaticFiles
|
|
|
|
from app.config import settings
|
|
|
|
import os
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
"""应用生命周期:启动和关闭"""
|
|
# 启动时
|
|
print("🌿 青叶后端启动中...")
|
|
|
|
# 确保上传目录存在
|
|
os.makedirs(settings.UPLOAD_DIR, exist_ok=True)
|
|
|
|
# 初始化数据库表(开发阶段用,生产用 Alembic 迁移)
|
|
from app.database import engine, Base
|
|
async with engine.begin() as conn:
|
|
await conn.run_sync(Base.metadata.create_all)
|
|
print("📦 数据库表已创建")
|
|
|
|
# 初始化系统配置
|
|
from app.database import async_session
|
|
async with async_session() as db:
|
|
from app.services.admin_service import AdminService
|
|
admin_service = AdminService(db)
|
|
await admin_service.init_system_config()
|
|
await db.commit()
|
|
print("⚙️ 系统配置已初始化")
|
|
|
|
print("🚀 青叶后端启动完成!")
|
|
yield
|
|
|
|
# 关闭时
|
|
print("🌿 青叶后端关闭")
|
|
from app.database import engine
|
|
await engine.dispose()
|
|
|
|
|
|
app = FastAPI(
|
|
title="青叶 - QingYe",
|
|
description="青叶社交聊天应用后端 API",
|
|
version="0.1.0",
|
|
lifespan=lifespan,
|
|
)
|
|
|
|
# CORS 中间件
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=settings.CORS_ORIGINS.split(","),
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
# 静态文件(上传的文件)
|
|
app.mount("/uploads", StaticFiles(directory=settings.UPLOAD_DIR), name="uploads")
|
|
|
|
# 注册路由
|
|
from app.routers import auth, users, conversations, messages, friends, admin, uploads, moments, leaves, trees, capsules
|
|
|
|
app.include_router(auth.router, prefix="/api/v1/auth", tags=["认证"])
|
|
app.include_router(users.router, prefix="/api/v1/users", tags=["用户"])
|
|
app.include_router(conversations.router, prefix="/api/v1/conversations", tags=["会话"])
|
|
app.include_router(messages.router, prefix="/api/v1/conversations", tags=["消息"])
|
|
app.include_router(friends.router, prefix="/api/v1/friends", tags=["好友"])
|
|
app.include_router(admin.router, prefix="/api/v1/admin", tags=["管理"])
|
|
app.include_router(uploads.router, prefix="/api/v1/uploads", tags=["上传"])
|
|
app.include_router(moments.router, prefix="/api/v1/moments", tags=["朋友圈"])
|
|
app.include_router(leaves.router, prefix="/api/v1/leaves", tags=["心情叶"])
|
|
app.include_router(trees.router, prefix="/api/v1/trees", tags=["好友之树"])
|
|
app.include_router(capsules.router, prefix="/api/v1/capsules", tags=["时光胶囊"])
|
|
|
|
# WebSocket
|
|
from app.websocket.router import websocket_router
|
|
app.include_router(websocket_router)
|
|
|
|
|
|
@app.get("/")
|
|
async def root():
|
|
return {"name": "青叶 QingYe", "version": "0.1.0", "status": "running"}
|