feat(backend): 重构 HTTP 错误处理为 RFC7807 标准并优化多个 service

This commit is contained in:
qzl
2026-03-27 14:04:49 +08:00
parent 471488f5f7
commit b1f0eb8921
25 changed files with 1324 additions and 316 deletions
@@ -3,10 +3,10 @@ from unittest.mock import AsyncMock, MagicMock
from uuid import UUID, uuid4
import pytest
from fastapi import HTTPException
from sqlalchemy.exc import SQLAlchemyError
from core.auth.models import CurrentUser
from core.http.errors import ApiProblemError
from models.inbox_messages import (
InboxMessage,
InboxMessageStatus as InboxMessageModelStatus,
@@ -109,11 +109,12 @@ async def test_mark_as_read_raises_404_when_message_missing() -> None:
current_user=CurrentUser(id=user_id),
)
with pytest.raises(HTTPException) as exc_info:
with pytest.raises(ApiProblemError) as exc_info:
await service.mark_as_read(message_id)
assert exc_info.value.status_code == 404
assert exc_info.value.detail == "Inbox message not found"
assert exc_info.value.code == "INBOX_MESSAGE_NOT_FOUND"
session.commit.assert_not_awaited()
@@ -133,9 +134,10 @@ async def test_mark_as_read_store_error_returns_503() -> None:
current_user=CurrentUser(id=user_id),
)
with pytest.raises(HTTPException) as exc_info:
with pytest.raises(ApiProblemError) as exc_info:
await service.mark_as_read(message_id)
assert exc_info.value.status_code == 503
assert exc_info.value.detail == "Inbox message store unavailable"
assert exc_info.value.code == "INBOX_MESSAGE_STORE_UNAVAILABLE"
session.rollback.assert_awaited_once()