Enhance Task Manager API with root endpoint and validation

This commit is contained in:
Automated Action 2025-06-06 11:04:14 +00:00
parent 3be833dc43
commit 97f1aebefd
4 changed files with 47 additions and 6 deletions

View File

@ -9,6 +9,8 @@ A RESTful API for managing tasks built with FastAPI and SQLite.
- Task pagination
- Automatic API documentation
- Health check endpoint
- Root endpoint with API information
- Task status and priority validation using Enums
## Project Structure
@ -90,6 +92,10 @@ FastAPI generates interactive API documentation:
## API Endpoints
### Root Endpoint
- `GET /` - Returns information about the API including the title, documentation links, and health check endpoint
### Health Check
- `GET /health` - Check if the API is running
@ -108,8 +114,8 @@ FastAPI generates interactive API documentation:
{
"title": "string",
"description": "string",
"status": "string",
"priority": "string",
"status": "string", // One of: "pending", "in_progress", "completed", "cancelled"
"priority": "string", // One of: "low", "medium", "high", "urgent"
"due_date": "datetime",
"completed": false
}

View File

@ -1 +1,5 @@
# Import all the models to ensure they are registered with SQLAlchemy
from app.database.base_class import Base # noqa
from app.models.task import Task # noqa
# Add new models here as they are created

View File

@ -1,14 +1,31 @@
from datetime import datetime
from enum import Enum
from typing import Optional
from pydantic import BaseModel
class TaskStatus(str, Enum):
"""Valid status values for tasks."""
PENDING = "pending"
IN_PROGRESS = "in_progress"
COMPLETED = "completed"
CANCELLED = "cancelled"
class TaskPriority(str, Enum):
"""Valid priority values for tasks."""
LOW = "low"
MEDIUM = "medium"
HIGH = "high"
URGENT = "urgent"
class TaskBase(BaseModel):
"""Base Task schema with shared attributes."""
title: str
description: Optional[str] = None
status: Optional[str] = "pending"
priority: Optional[str] = "medium"
status: TaskStatus = TaskStatus.PENDING
priority: TaskPriority = TaskPriority.MEDIUM
due_date: Optional[datetime] = None
completed: Optional[bool] = False
@ -22,8 +39,8 @@ class TaskUpdate(BaseModel):
"""Schema for updating an existing task."""
title: Optional[str] = None
description: Optional[str] = None
status: Optional[str] = None
priority: Optional[str] = None
status: Optional[TaskStatus] = None
priority: Optional[TaskPriority] = None
due_date: Optional[datetime] = None
completed: Optional[bool] = None

14
main.py
View File

@ -1,6 +1,7 @@
import uvicorn
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from app.api.v1.router import api_router
from app.core.config import settings
@ -22,8 +23,21 @@ app.add_middleware(
app.include_router(api_router)
@app.get("/", tags=["root"])
async def root():
"""Root endpoint returning information about the API."""
return JSONResponse(
content={
"title": settings.PROJECT_NAME,
"documentation": "/docs",
"health_check": "/health"
}
)
@app.get("/health", tags=["health"])
async def health():
"""Health check endpoint."""
return {"status": "ok"}