diff --git a/spire/journal/actions.py b/spire/journal/actions.py index d3dc68d..d86bd45 100644 --- a/spire/journal/actions.py +++ b/spire/journal/actions.py @@ -11,6 +11,7 @@ from uuid import UUID, uuid4 import boto3 +import requests from sqlalchemy.orm import Session, Query from sqlalchemy import or_, func, text, and_ @@ -585,6 +586,27 @@ async def get_journal_entries( return query.all() +async def delete_entry_images( + access_token: str, journal_spec: JournalSpec, entry_id: UUID +) -> None: + images_url = f"https://files.bugout.dev/files/{str(journal_spec.id)}/entries/{str(entry_id)}/images" + headers = {"Authorization": f"Bearer {access_token}"} + images_response = requests.get(images_url, headers=headers, timeout=4) + images_response.raise_for_status() + images = images_response.json() + + for image in images.images: + try: + r = requests.delete( + f"{images_url}/{image['id']}", headers=headers, timeout=4 + ) + r.raise_for_status() + except Exception as e: + logger.error( + f"Unable to delete image with id: {image['id']} for entry with id: {str(entry_id)}" + ) + + async def delete_journal_entry( db_session: Session, journal_spec: JournalSpec, diff --git a/spire/journal/api.py b/spire/journal/api.py index aacdba1..8761458 100644 --- a/spire/journal/api.py +++ b/spire/journal/api.py @@ -1405,6 +1405,8 @@ async def delete_entry( {JournalEntryScopes.DELETE}, ) + access_token = request.state.token + journal_spec = JournalSpec(id=journal_id, bugout_user_id=request.state.user_id) try: journal = await actions.find_journal( @@ -1422,6 +1424,11 @@ async def delete_entry( raise HTTPException(status_code=500) es_index = journal.search_index + try: + await actions.delete_entry_images(access_token, journal_spec, entry_id) + except Exception as e: + logger.error(f"Error due deleting entry images: {str(e)}") + try: journal_entry = await actions.delete_journal_entry( db_session,