From 79bcfb0019df4cd43d8b55a8867d492a8281e6f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20L=C3=BCcke?= Date: Sun, 28 Dec 2025 02:02:06 +0100 Subject: [PATCH] =?UTF-8?q?feature:=20Das=20Anlegen=20doppelter=20Eintr?= =?UTF-8?q?=C3=A4ge=20muss=20mit=20der=20richtigen=20Fehlermeldung=20abgel?= =?UTF-8?q?ehnt=20werden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Es darf kein Serverfehlersein. --- api/main.py | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) 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/")