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