from fastapi import FastAPI, HTTPException, Depends, Query from sqlalchemy.orm import Session from typing import List, Optional from datetime import date from models import Task, engine from schemas import TaskCreate, TaskResponse app = FastAPI() SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) 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 get_tasks(status: Optional[str] = Query(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 get_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: TaskCreate, db: Session = Depends(get_db)): db_task = db.query(Task).filter(Task.id == task_id).first() if not db_task: raise HTTPException(status_code=404, detail="Task not found") for key, value in task.model_dump().items(): setattr(db_task, key, value) db.commit() db.refresh(db_task) return db_task @app.delete("/tasks/{task_id}", status_code=204) async def delete_task(task_id: int, db: Session = Depends(get_db)): db_task = db.query(Task).filter(Task.id == task_id).first() if not db_task: raise HTTPException(status_code=404, detail="Task not found") db.delete(db_task) db.commit() return