1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
| from fastapi import FastAPI, Depends, HTTPException from sqlalchemy.orm import Session from typing import List from database import engine, SessionLocal, Base from models import Todo from schemas import TodoCreate, TodoResponse from crud import ( get_todos, get_todo, create_todo, update_todo, delete_todo )
Base.metadata.create_all(bind=engine)
app = FastAPI(title="TODO API")
def get_db(): db = SessionLocal() try: yield db finally: db.close()
@app.get("/todos", response_model=List[TodoResponse]) def read_todos(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): todos = get_todos(db, skip=skip, limit=limit) return todos
@app.get("/todos/{todo_id}", response_model=TodoResponse) def read_todo(todo_id: int, db: Session = Depends(get_db)): todo = get_todo(db, todo_id) if todo is None: raise HTTPException(status_code=404, detail="Todo not found") return todo
@app.post("/todos", response_model=TodoResponse) def create_new_todo(todo: TodoCreate, db: Session = Depends(get_db)): return create_todo(db, todo)
@app.put("/todos/{todo_id}", response_model=TodoResponse) def update_existing_todo(todo_id: int, todo: TodoCreate, db: Session = Depends(get_db)): return update_todo(db, todo_id, todo)
@app.delete("/todos/{todo_id}") def delete_existing_todo(todo_id: int, db: Session = Depends(get_db)): delete_todo(db, todo_id) return {"message": "Deleted successfully"}
from pydantic import BaseModel
class TodoCreate(BaseModel): title: str description: str | None = None completed: bool = False
class TodoResponse(TodoCreate): id: int class Config: from_attributes = True
from sqlalchemy.orm import Session from models import Todo from schemas import TodoCreate
def get_todos(db: Session, skip: int = 0, limit: int = 100): return db.query(Todo).offset(skip).limit(limit).all()
def get_todo(db: Session, todo_id: int): return db.query(Todo).filter(Todo.id == todo_id).first()
def create_todo(db: Session, todo: TodoCreate): db_todo = Todo(**todo.dict()) db.add(db_todo) db.commit() db.refresh(db_todo) return db_todo
def update_todo(db: Session, todo_id: int, todo: TodoCreate): db_todo = db.query(Todo).filter(Todo.id == todo_id).first() if db_todo: db_todo.title = todo.title db_todo.description = todo.description db_todo.completed = todo.completed db.commit() db.refresh(db_todo) return db_todo
def delete_todo(db: Session, todo_id: int): db_todo = db.query(Todo).filter(Todo.id == todo_id).first() if db_todo: db.delete(db_todo) db.commit() return db_todo
|