task_auto_plan/app/main.py

92 lines
2.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
FastAPI 主应用入口1
提供待办事项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