75 lines
1.7 KiB
Python
75 lines
1.7 KiB
Python
from fastapi import FastAPI, Depends, Request, HTTPException
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
import uvicorn
|
|
import database
|
|
import models
|
|
import crud
|
|
|
|
|
|
app = FastAPI()
|
|
|
|
|
|
# Dependency
|
|
def get_db():
|
|
db = database.SessionLocal()
|
|
try:
|
|
yield db
|
|
finally:
|
|
db.close()
|
|
|
|
|
|
@app.get("/")
|
|
async def root():
|
|
return {"message": "Hello World"}
|
|
|
|
|
|
@app.post("/movies/")
|
|
async def create_movie(
|
|
name: str = "", db: Session = Depends(get_db), request: Request = None
|
|
):
|
|
out = {}
|
|
try: # Bypass for dev
|
|
data = await request.json()
|
|
except:
|
|
data = {}
|
|
crud_params = dict(
|
|
genres=data.get("genres", ["Unknown"]),
|
|
description=data.get("description", ""),
|
|
title=data.get("title", ""),
|
|
vote_average=data.get("vote_average"),
|
|
vote_count=data.get("vote_count"),
|
|
)
|
|
|
|
movie = crud.create_movie(db, **crud_params)
|
|
out = {"message": f"Created {movie.title} XX", "id": movie.id}
|
|
return out
|
|
|
|
|
|
@app.get("/movies/{id_}")
|
|
async def get_movie(id_: str, db: Session = Depends(get_db)):
|
|
try:
|
|
movie = crud.get_movie_by_id(db, id_)
|
|
out = {k: v for (k, v) in movie.__dict__.items() if not k.startswith("_")}
|
|
except LookupError:
|
|
raise HTTPException(status_code=404, detail=f"No movie found with id {id_}")
|
|
else:
|
|
return out
|
|
|
|
|
|
@app.get("/movies/")
|
|
async def list_movie(db: Session = Depends(get_db)):
|
|
movies = crud.get_all_movies(db)
|
|
|
|
out = [
|
|
{k: v for (k, v) in movie.__dict__.items() if not k.startswith("_")}
|
|
for movie in movies
|
|
]
|
|
return out
|
|
|
|
|
|
if __name__ == "__main__":
|
|
database.create_db()
|
|
uvicorn.run(app, host="127.0.0.1", port=5000)
|