Fix user delete flow 12
This commit is contained in:
@@ -9,7 +9,7 @@ import structlog
|
||||
import uuid
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from app.core.database import get_db
|
||||
from app.core.database import get_db, get_background_db_session
|
||||
from app.schemas.auth import UserResponse, PasswordChange
|
||||
from app.schemas.users import UserUpdate
|
||||
from app.services.user_service import UserService
|
||||
@@ -171,8 +171,7 @@ async def delete_admin_user(
|
||||
background_tasks.add_task(
|
||||
execute_admin_user_deletion,
|
||||
user_id=user_id,
|
||||
requesting_user_id=current_user.id,
|
||||
db_url=str(db.bind.url) # Pass DB connection string for background task
|
||||
requesting_user_id=current_user["user_id"]
|
||||
)
|
||||
|
||||
return {
|
||||
@@ -186,52 +185,23 @@ async def delete_admin_user(
|
||||
|
||||
# Add this background task function to services/auth/app/api/users.py:
|
||||
|
||||
async def execute_admin_user_deletion(
|
||||
user_id: str,
|
||||
requesting_user_id: str,
|
||||
db_url: str
|
||||
):
|
||||
async def execute_admin_user_deletion(user_id: str, requesting_user_id: str):
|
||||
"""
|
||||
Background task to execute complete admin user deletion
|
||||
Background task using shared infrastructure
|
||||
"""
|
||||
# Create new database session for background task
|
||||
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
engine = create_async_engine(db_url)
|
||||
async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
|
||||
|
||||
async with async_session() as session:
|
||||
try:
|
||||
# Initialize deletion service with new session
|
||||
deletion_service = AdminUserDeleteService(session)
|
||||
|
||||
# Perform the deletion
|
||||
result = await deletion_service.delete_admin_user_complete(
|
||||
user_id=user_id,
|
||||
requesting_user_id=requesting_user_id
|
||||
)
|
||||
|
||||
logger.info("Background admin user deletion completed successfully",
|
||||
user_id=user_id,
|
||||
requesting_user=requesting_user_id,
|
||||
result=result)
|
||||
|
||||
except Exception as e:
|
||||
logger.error("Background admin user deletion failed",
|
||||
user_id=user_id,
|
||||
requesting_user=requesting_user_id,
|
||||
error=str(e))
|
||||
|
||||
# Attempt to publish failure event
|
||||
try:
|
||||
deletion_service = AdminUserDeleteService(session)
|
||||
await deletion_service._publish_user_deletion_failed_event(user_id, str(e))
|
||||
except:
|
||||
pass
|
||||
# ✅ Use the shared background session
|
||||
async with get_background_db_session() as session:
|
||||
deletion_service = AdminUserDeleteService(session)
|
||||
|
||||
finally:
|
||||
await engine.dispose()
|
||||
result = await deletion_service.delete_admin_user_complete(
|
||||
user_id=user_id,
|
||||
requesting_user_id=requesting_user_id
|
||||
)
|
||||
|
||||
logger.info("Background admin user deletion completed successfully",
|
||||
user_id=user_id,
|
||||
requesting_user=requesting_user_id,
|
||||
result=result)
|
||||
|
||||
|
||||
@router.get("/delete/{user_id}/deletion-preview")
|
||||
|
||||
Reference in New Issue
Block a user