diff --git a/api/main.py b/api/main.py index 39ad509..4262e04 100644 --- a/api/main.py +++ b/api/main.py @@ -1,11 +1,13 @@ import datetime from fastapi import FastAPI -from sqlalchemy.exc import IntegrityError +from fastapi.encoders import jsonable_encoder +from sqlalchemy.exc import IntegrityError, DataError from sqlmodel import Session, SQLModel, create_engine, select from contextlib import asynccontextmanager from api.models import Car, FuelItem from pydantic_settings import BaseSettings, SettingsConfigDict +from fastapi.responses import JSONResponse class Settings(BaseSettings): @@ -46,8 +48,9 @@ def fill_database(): session.refresh(fill_item) +# noinspection PyUnusedLocal @asynccontextmanager -async def lifespan(app: FastAPI): +async def lifespan(actual_app: FastAPI): # startup create_db_and_tables() try: @@ -60,13 +63,21 @@ async def lifespan(app: FastAPI): app = FastAPI(lifespan=lifespan) +def save_object(obj): + with Session(engine) as session: + try: + session.add(obj) + session.commit() + session.refresh(obj) + return obj + except IntegrityError|DataError as e: + content = jsonable_encoder({"message": e}) + return JSONResponse(content=content, status_code=400) + + @app.post("/cars/") def create_cars(car: Car): - with Session(engine) as session: - session.add(car) - session.commit() - session.refresh(car) - return car + return save_object(car) @app.get("/cars/") @@ -78,11 +89,7 @@ def read_cars(): @app.post("/fill_items/") def create_cars(fill_item: FuelItem): - with Session(engine) as session: - session.add(fill_item) - session.commit() - session.refresh(fill_item) - return fill_item + return save_object(fill_item) @app.get("/fill_items/")