PrabhuKiranKonda's picture
initial commit
2f88c81
from fastapi import FastAPI, HTTPException, security, Depends
import sqlalchemy.orm as orm
import services as services
import schemas as schemas
import models as models
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI(title="TODO API",
description='Todo App API using FastAPI, PostgreSQL and authentication support',
version='0.0.1')
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
async def root():
return {"Title": "Todo API",
"Description": "Todo App API using FastAPI, PostgreSQL and authentication support",
"Version": "0.0.1"}
# create user
@app.post("/api/users/")
async def create_user(user: schemas.userCreate,
db: orm.Session = Depends(services.get_db)):
db_user = await services.get_user_by_email(email=user.email.lower(), db=db)
if db_user:
raise HTTPException(status_code=400, detail="Email already registered")
# Await the create_user function
user = await services.create_user(user=user, db=db)
token = await services.create_token(user=user)
return token
@app.post("/api/token/")
async def generate_token(form_data: security.OAuth2PasswordRequestForm = Depends(),
db: orm.Session = Depends(services.get_db)):
user = await services.authenticate_user(form_data.username.lower(), form_data.password, db=db)
if not user:
raise HTTPException(
status_code=401, detail="Incorrect email or password")
token = await services.create_token(user=user)
return {
"access_token": token['access_token'],
"first_name": user.first_name,
"last_name": user.last_name,
}
@app.get('/api/users/me', response_model=schemas.User)
async def get_user(user: schemas.User = Depends(services.get_current_user)):
return user
@app.post("/api/users/todo")
async def create_todo(todo: schemas.TodoCreate, user: schemas.User = Depends(services.get_current_user), db: orm.Session = Depends(services.get_db)):
return await services.create_todo(user=user, todo=todo, db=db)
@app.get("/api/users/todo")
async def get_todos(user: schemas.User = Depends(services.get_current_user), db: orm.Session = Depends(services.get_db)):
return await services.get_todos(user=user, db=db)
@app.put("/api/users/todo/{todo_id}")
async def update_todo(todo_id: int,
todo: schemas.TodoCreate,
user: schemas.User = Depends(services.get_current_user),
db: orm.Session = Depends(services.get_db)):
return {
"todo": await services.update_todo(user=user, db=db, todo=todo, todo_id=todo_id),
"message": "Todo updated successfully"
}
@app.delete("/api/users/todo/{todo_id}")
async def delete_todo(todo_id: int,
user: schemas.User = Depends(services.get_current_user),
db: orm.Session = Depends(services.get_db)):
return {
"todo": await services.delete_todo(user=user, db=db, todo_id=todo_id),
"message": "Todo deleted successfully"
}
@app.get("/api/users/todo/today")
async def get_today_todos(user: schemas.User = Depends(services.get_current_user), db: orm.Session = Depends(services.get_db)):
return await services.get_today_todos(user=user, db=db)
@app.get("/api/users/todo/overdue")
async def get_overdue_todos(user: schemas.User = Depends(services.get_current_user), db: orm.Session = Depends(services.get_db)):
return await services.get_overdue_todos(user=user, db=db)
@app.get("/api/users/todo/upcoming")
async def get_upcoming_todos(user: schemas.User = Depends(services.get_current_user), db: orm.Session = Depends(services.get_db)):
return await services.get_upcoming_todos(user=user, db=db)
@app.get("/api/users/todo/completed")
async def get_completed_todos(user: schemas.User = Depends(services.get_current_user), db: orm.Session = Depends(services.get_db)):
return await services.get_completed_todos(user=user, db=db)