from fastapi import FastAPI, HTTPException, Depends from sqlalchemy.orm import Session from typing import List from datetime import date from models import Task, SessionLocal from schemas import TaskCreate, TaskResponse app = FastAPI() # Dependency to get database session def get_db(): db = SessionLocal() try: yield db finally: db.close() @app.post("/tasks/", response_model=TaskResponse, status_code=201) async def create_task(task: TaskCreate, db: Session = Depends(get_db)): db_task = Task(**task.model_dump()) db.add(db_task) db.commit() db.refresh(db_task) return db_task @app.get("/tasks/", response_model=List[TaskResponse]) async def read_tasks(status: str = None, db: Session = Depends(get_db)): if status: tasks = db.query(Task).filter_by(status=status).all() else: tasks = db.query(Task).all() return tasks @app.get("/tasks/{task_id}", response_model=TaskResponse) async def read_task(task_id: int, db: Session = Depends(get_db)): task = db.query(Task).filter(Task.id == task_id).first() if not task: raise HTTPException(status_code=404, detail="Task not found") return task @app.put("/tasks/{task_id}", response_model=TaskResponse) async def update_task(task_id: int, task_update: TaskCreate, db: Session = Depends(get_db)): task = db.query(Task).filter(Task.id == task_id).first() if not task: raise HTTPException(status_code=404, detail="Task not found") for key, value in task_update.model_dump().items(): setattr(task, key, value) db.commit() db.refresh(task) return task @app.delete("/tasks/{task_id}", status_code=204) async def delete_task(task_id: int, db: Session = Depends(get_db)): task = db.query(Task).filter(Task.id == task_id).first() if not task: raise HTTPException(status_code=404, detail="Task not found") db.delete(task) db.commit() return