54 lines
1.1 KiB
Python
54 lines
1.1 KiB
Python
from fastapi import FastAPI, Depends, Request
|
|
|
|
from sqlalchemy.orm import Session
|
|
import uvicorn
|
|
from database import SessionLocal, engine
|
|
import models
|
|
import crud
|
|
|
|
models.Base.metadata.create_all(bind=engine)
|
|
|
|
app = FastAPI()
|
|
|
|
|
|
# Dependency
|
|
def get_db():
|
|
db = 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 = {}
|
|
data = await request.json()
|
|
name = name or data["name"]
|
|
movie = models.Movie()
|
|
movie.name = name
|
|
db.add(movie)
|
|
db.flush()
|
|
db.commit()
|
|
db.refresh(movie)
|
|
out = {"message": f"Created {movie.name} XX", "id": movie.id}
|
|
return out
|
|
|
|
|
|
@app.get("/movies/{id_}")
|
|
async def get_movie(id_: str, db: Session = Depends(get_db)):
|
|
movie = crud.get_movie_by_id(db, id_)
|
|
out = {k: v for (k, v) in movie.__dict__.items() if not k.startswith("_")}
|
|
return out
|
|
|
|
|
|
if __name__ == "__main__":
|
|
uvicorn.run(app, host="127.0.0.1", port=5000)
|