import logging from fastapi import APIRouter, Depends, HTTPException, Request, status from pydantic import BaseModel try: from app.service.parent import ParentService from app.service import get_db_session except ModuleNotFoundError: from service.parent import ParentService from service import get_db_session router = APIRouter(prefix="/parents", tags=["parents"]) logger = logging.getLogger("app.parents") class ParentCreateRequest(BaseModel): openid: str unionid: str | None = None nickname: str | None = None avatar_url: str | None = None class ParentResponse(BaseModel): user_id: int openid: str unionid: str | None = None nickname: str | None = None avatar_url: str | None = None phone: str | None = None status: int class ParentUpdateRequest(BaseModel): nickname: str | None = None avatar_url: str | None = None phone: str | None = None @router.post("", response_model=ParentResponse, status_code=status.HTTP_201_CREATED) def create_parent(payload: ParentCreateRequest, request: Request, db=Depends(get_db_session)) -> ParentResponse: service = ParentService(db) parent = service.create(payload.openid, payload.unionid, payload.nickname, payload.avatar_url) return ParentResponse(**parent) @router.get("/{user_id}", response_model=ParentResponse) def get_parent(user_id: int, request: Request, db=Depends(get_db_session)) -> ParentResponse: service = ParentService(db) parent = service.get(user_id) if not parent: raise HTTPException(status_code=404, detail="parent not found") return ParentResponse(**parent) @router.patch("/{user_id}", response_model=ParentResponse) def update_parent(user_id: int, payload: ParentUpdateRequest, request: Request, db=Depends(get_db_session)) -> ParentResponse: service = ParentService(db) parent = service.update(user_id, payload.nickname, payload.avatar_url, payload.phone) if not parent: raise HTTPException(status_code=404, detail="parent not found") return ParentResponse(**parent)