""" FastAPI 主应用入口 提供待办事项(Todo)管理的 RESTful API。 使用内存假数据存储,无需外部数据库。 """ from fastapi import FastAPI, HTTPException, status from app.services import ( TodoService, TodoCreate, TodoUpdate, TodoResponse, ) app = FastAPI( title="Todo 管理服务", description="一个基于 FastAPI 的简单待办事项管理服务示例", version="1.0.0", ) # 全局服务实例(使用内存假数据) todo_service = TodoService() # ────────────────────────────────────────────── # API 路由 # ────────────────────────────────────────────── @app.get("/", tags=["健康检查"]) async def root(): """服务根路径,返回基本信息。""" return { "service": "Todo 管理服务", "version": "1.0.0", "docs": "/docs", } @app.get("/todos", response_model=list[TodoResponse], tags=["待办事项"]) async def list_todos(): """获取所有待办事项列表。""" return todo_service.list_todos() @app.get("/todos/{todo_id}", response_model=TodoResponse, tags=["待办事项"]) async def get_todo(todo_id: int): """根据 ID 获取单个待办事项。""" todo = todo_service.get_todo(todo_id) if todo is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f"待办事项 {todo_id} 不存在", ) return todo @app.post( "/todos", response_model=TodoResponse, status_code=status.HTTP_201_CREATED, tags=["待办事项"], ) async def create_todo(todo_in: TodoCreate): """创建新的待办事项。""" return todo_service.create_todo(todo_in) @app.put("/todos/{todo_id}", response_model=TodoResponse, tags=["待办事项"]) async def update_todo(todo_id: int, todo_in: TodoUpdate): """更新指定待办事项。""" todo = todo_service.update_todo(todo_id, todo_in) if todo is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f"待办事项 {todo_id} 不存在", ) return todo @app.delete("/todos/{todo_id}", status_code=status.HTTP_204_NO_CONTENT, tags=["待办事项"]) async def delete_todo(todo_id: int): """删除指定待办事项。""" deleted = todo_service.delete_todo(todo_id) if not deleted: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=f"待办事项 {todo_id} 不存在", ) return None