feature: Das Anlegen doppelter Einträge muss mit der richtigen Fehlermeldung abgelehnt werden

Es darf kein Serverfehlersein.
This commit is contained in:
2025-12-28 02:02:06 +01:00
parent 424b43fc9e
commit 79bcfb0019
+19 -12
View File
@@ -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/")