feat: 初始化孕育无忧全栈项目基础代码结构

完成项目初始搭建,包含后端FastAPI+MongoDB服务、前端React+Vite项目的完整基础结构,添加各类配置文件与依赖清单,涵盖核心业务初始框架。
This commit is contained in:
2026-05-21 00:46:48 +08:00
commit 409dabafb5
142 changed files with 31010 additions and 0 deletions

View File

@@ -0,0 +1,84 @@
from datetime import datetime, timezone
from fastapi import APIRouter, Depends
from app.middleware.auth import get_current_user
from app.models.user import User
from app.schemas.user import (
OnboardingRequest,
UserProfileUpdate,
UserProfileResponse,
)
router = APIRouter()
def _user_to_response(user: User) -> UserProfileResponse:
return UserProfileResponse(
id=str(user.id),
name=user.name,
phone=user.phone,
age=user.age,
height=user.height,
pre_pregnancy_weight=user.pre_pregnancy_weight,
current_weight=user.current_weight,
blood_type=user.blood_type,
allergies=user.allergies,
medical_history=user.medical_history,
last_period_date=user.last_period_date,
due_date=user.due_date,
pregnancy_week=user.pregnancy_week,
pregnancy_day=user.pregnancy_day,
multiple_pregnancy=user.multiple_pregnancy,
pregnancy_count=user.pregnancy_count,
emergency_contact=user.emergency_contact.model_dump() if user.emergency_contact else None,
is_onboarded=user.is_onboarded,
avatar_url=user.avatar_url,
created_at=user.created_at,
)
@router.get("/profile", response_model=UserProfileResponse)
async def get_profile(user: User = Depends(get_current_user)):
"""获取用户信息"""
return _user_to_response(user)
@router.post("/onboarding", response_model=UserProfileResponse)
async def complete_onboarding(
req: OnboardingRequest, user: User = Depends(get_current_user)
):
"""完成用户画像设置"""
user.name = req.name or user.name
user.age = req.age
user.height = req.height
user.pre_pregnancy_weight = req.pre_pregnancy_weight
user.current_weight = req.current_weight
user.blood_type = req.blood_type
user.allergies = req.allergies
user.medical_history = req.medical_history
user.last_period_date = req.last_period_date
user.due_date = req.due_date
user.pregnancy_week = req.pregnancy_week
user.pregnancy_day = req.pregnancy_day
user.multiple_pregnancy = req.multiple_pregnancy
user.pregnancy_count = req.pregnancy_count
if req.emergency_contact:
user.emergency_contact = req.emergency_contact
user.is_onboarded = True
user.updated_at = datetime.now(timezone.utc)
await user.save()
return _user_to_response(user)
@router.put("/profile", response_model=UserProfileResponse)
async def update_profile(
req: UserProfileUpdate, user: User = Depends(get_current_user)
):
"""更新用户信息"""
update_data = req.model_dump(exclude_unset=True)
for field, value in update_data.items():
setattr(user, field, value)
user.updated_at = datetime.now(timezone.utc)
await user.save()
return _user_to_response(user)