Fixed removing filament with spools
This commit is contained in:
@@ -4,6 +4,7 @@ from typing import Annotated, Optional, Union
|
|||||||
|
|
||||||
from fastapi import APIRouter, Depends
|
from fastapi import APIRouter, Depends
|
||||||
from fastapi.exceptions import RequestValidationError
|
from fastapi.exceptions import RequestValidationError
|
||||||
|
from fastapi.responses import JSONResponse
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
from pydantic.error_wrappers import ErrorWrapper
|
from pydantic.error_wrappers import ErrorWrapper
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
@@ -11,6 +12,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
|||||||
from spoolman.api.v1.models import Filament, Message
|
from spoolman.api.v1.models import Filament, Message
|
||||||
from spoolman.database import filament
|
from spoolman.database import filament
|
||||||
from spoolman.database.database import get_db_session
|
from spoolman.database.database import get_db_session
|
||||||
|
from spoolman.exceptions import ItemDeleteError
|
||||||
|
|
||||||
router = APIRouter(
|
router = APIRouter(
|
||||||
prefix="/filament",
|
prefix="/filament",
|
||||||
@@ -102,10 +104,22 @@ async def update(
|
|||||||
return Filament.from_db(db_item)
|
return Filament.from_db(db_item)
|
||||||
|
|
||||||
|
|
||||||
@router.delete("/{filament_id}")
|
@router.delete(
|
||||||
async def delete(
|
"/{filament_id}",
|
||||||
|
response_model=Message,
|
||||||
|
responses={
|
||||||
|
403: {"model": Message},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
async def delete( # noqa: ANN201
|
||||||
db: Annotated[AsyncSession, Depends(get_db_session)],
|
db: Annotated[AsyncSession, Depends(get_db_session)],
|
||||||
filament_id: int,
|
filament_id: int,
|
||||||
) -> Message:
|
):
|
||||||
await filament.delete(db, filament_id)
|
try:
|
||||||
|
await filament.delete(db, filament_id)
|
||||||
|
except ItemDeleteError as exc:
|
||||||
|
return JSONResponse(
|
||||||
|
status_code=403,
|
||||||
|
content={"message": str(exc)},
|
||||||
|
)
|
||||||
return Message(message="Success!")
|
return Message(message="Success!")
|
||||||
|
|||||||
@@ -3,9 +3,10 @@
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
from sqlalchemy.exc import IntegrityError
|
||||||
|
|
||||||
from spoolman.database import models, vendor
|
from spoolman.database import models, vendor
|
||||||
from spoolman.exceptions import ItemNotFoundError
|
from spoolman.exceptions import ItemDeleteError, ItemNotFoundError
|
||||||
|
|
||||||
|
|
||||||
async def create(
|
async def create(
|
||||||
@@ -76,3 +77,8 @@ async def delete(db: AsyncSession, filament_id: int) -> None:
|
|||||||
"""Delete a filament object."""
|
"""Delete a filament object."""
|
||||||
filament = await get_by_id(db, filament_id)
|
filament = await get_by_id(db, filament_id)
|
||||||
await db.delete(filament)
|
await db.delete(filament)
|
||||||
|
try:
|
||||||
|
await db.flush() # Flush immediately so any errors are propagated in this request.
|
||||||
|
except IntegrityError as exc:
|
||||||
|
await db.rollback()
|
||||||
|
raise ItemDeleteError("Failed to delete filament.") from exc
|
||||||
|
|||||||
@@ -5,5 +5,9 @@ class ItemNotFoundError(Exception):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ItemDeleteError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ItemCreateError(Exception):
|
class ItemCreateError(Exception):
|
||||||
pass
|
pass
|
||||||
|
|||||||
Reference in New Issue
Block a user