92 lines
2.6 KiB
Python
92 lines
2.6 KiB
Python
|
|
"""
|
|||
|
|
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
|