feat: 添加账号删除功能

This commit is contained in:
qzl
2026-04-10 10:40:44 +08:00
parent 17a1303f00
commit 46513829cd
30 changed files with 1510 additions and 664 deletions
+9 -1
View File
@@ -1,6 +1,6 @@
from __future__ import annotations
from fastapi import APIRouter, Depends, File, UploadFile
from fastapi import APIRouter, Depends, File, Response, UploadFile
from v1.users.dependencies import get_user_service
from v1.users.schemas import (
@@ -54,3 +54,11 @@ async def upload_avatar(
service: UserService = Depends(get_user_service),
) -> ProfileResponse:
return await service.upload_avatar(file)
@router.delete("/me", status_code=204)
async def delete_my_account(
service: UserService = Depends(get_user_service),
) -> Response:
await service.delete_account()
return Response(status_code=204)
+40
View File
@@ -290,6 +290,46 @@ class UserService:
await self.repository.save()
return await self.get_profile()
async def delete_account(self) -> None:
user_id = str(self.current_user.id)
avatar_bucket = config.storage.avatar.bucket
avatar_prefix = f"{self.current_user.id}/"
try:
await self.attachment_storage.delete_prefix(
bucket=avatar_bucket,
prefix=avatar_prefix,
)
except Exception as exc:
logger.exception(
"Account deletion failed while cleaning avatar objects",
user_id=user_id,
bucket=avatar_bucket,
prefix=avatar_prefix,
)
raise ApiProblemError(
status_code=502,
detail=problem_payload(
code="PROFILE_DELETE_FAILED",
detail="Failed to delete account data",
),
) from exc
try:
await self.attachment_storage.delete_auth_user(user_id=user_id)
except Exception as exc:
logger.exception(
"Account deletion failed while deleting auth user",
user_id=user_id,
)
raise ApiProblemError(
status_code=502,
detail=problem_payload(
code="PROFILE_DELETE_FAILED",
detail="Failed to delete account data",
),
) from exc
async def _resolve_avatar_url(self, avatar_path: str | None) -> str | None:
if avatar_path is None:
return None