Files
s2f/backend/app/api/auth.py
T
freedakgmail 33b4c734aa feat: 完善前后端核心功能模块
后端:
- 新增认证(auth)、任务(tasks)、映射(mappings)、对账(reconciliation)、异常(exceptions)、导出(exports) API
- 新增核心模块: database, security, permissions, tenant, exceptions, error_handlers
- 新增数据模型: user, company, reconciliation_task, field_mapping, uploaded_file 等
- 新增服务层: ai_recognizer, file_parser, file_storage, mapping, reconciliation 等
- 添加数据库迁移脚本

前端:
- 新增登录页面和仪表盘页面
- 新增任务列表、任务详情、字段映射页面
- 新增异常处理页面和规则设置页面
- 新增 API 代理路由 /api/[...path]
- 新增 UI 组件库 (button, card, dialog, input, table 等)
- 新增 auth 组件 (ProtectedRoute, PermissionGate)
- 新增 layout 组件 (Header, Sidebar)
- 新增 mapping 组件 (FieldMappingTable, AISuggestionPanel)
- 新增 API 客户端和 hooks (useAsync, useToast, usePermission 等)
- 新增状态管理 (auth-store, company-store, ui-store)
- 集成 Tailwind CSS 和 shadcn/ui 组件库

其他:
- 添加 Alembic 数据库迁移配置
- 添加初始化示例数据脚本
- 更新项目文档
2026-07-07 09:04:47 +08:00

71 lines
1.9 KiB
Python

from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.security import OAuth2PasswordRequestForm
from sqlalchemy.ext.asyncio import AsyncSession
from app.core.database import get_db
from app.models.user import User
from app.schemas.user import Token, UserCreate, UserLogin, UserResponse
from app.services.auth import AuthService, auth_service
router = APIRouter(prefix="/api/auth", tags=["auth"])
@router.post("/register", response_model=UserResponse, status_code=status.HTTP_201_CREATED)
async def register(
user_data: UserCreate,
db: AsyncSession = Depends(get_db),
):
"""
注册新用户
"""
user = await auth_service.register_user(db, user_data)
return user
@router.post("/login", response_model=dict)
async def login(
login_data: UserLogin,
db: AsyncSession = Depends(get_db),
):
"""
用户登录
"""
user, access_token = await auth_service.authenticate_user(db, login_data)
return {
"access_token": access_token,
"token_type": "bearer",
"user": UserResponse.model_validate(user)
}
@router.post("/logout")
async def logout(
current_user: User = Depends(auth_service.get_current_user),
):
"""
用户登出(客户端需清除 Token)
"""
return {"message": "登出成功"}
@router.get("/me", response_model=UserResponse)
async def get_current_user_info(
current_user: User = Depends(auth_service.get_current_user),
):
"""
获取当前用户信息
"""
return current_user
@router.post("/refresh", response_model=Token)
async def refresh_token(
current_user: User = Depends(auth_service.get_current_user),
):
"""
刷新 Token
"""
from app.core.security import create_access_token
access_token = create_access_token(data={"sub": str(current_user.id), "email": current_user.email})
return Token(access_token=access_token)