refactor: 重构 schemas 结构,统一枚举定义

This commit is contained in:
qzl
2026-03-25 12:36:31 +08:00
parent 389f5248fc
commit d22ded21f8
122 changed files with 774 additions and 1456 deletions
+3 -2
View File
@@ -9,10 +9,11 @@ from fastapi import HTTPException
from sqlalchemy import Select, select
from sqlalchemy.ext.asyncio import AsyncSession
from models.agent_chat_message import AgentChatMessage, AgentChatMessageRole
from models.agent_chat_message import AgentChatMessage
from models.agent_chat_session import AgentChatSession
from models.system_agents import SystemAgents
from schemas.messages.chat_message import (
from schemas.enums import AgentChatMessageRole
from schemas.domain.chat_message import (
AgentChatMessage as AgentChatMessageSchema,
AgentChatMessageMetadata,
)
+3 -3
View File
@@ -18,8 +18,8 @@ from schemas.agent.forwarded_props import (
RuntimeMode,
)
from schemas.agent.visibility import SystemVisibilityBit, bit_mask
from schemas.automation import RuntimeConfig
from schemas.messages.chat_message import (
from schemas.domain.automation import RuntimeConfig
from schemas.domain.chat_message import (
AgentChatMessageMetadata,
UserMessageAttachment,
extract_user_message_attachments,
@@ -362,7 +362,7 @@ class AgentService:
before: date | None,
current_user: CurrentUser,
) -> HistorySnapshotResponse:
from schemas.messages.chat_message import AgentChatMessage
from schemas.domain.chat_message import AgentChatMessage
from v1.agent.utils import convert_message_to_history
from v1.agent.schemas import HistoryMessage
+1 -1
View File
@@ -11,7 +11,7 @@ from pydantic import ValidationError
from core.agentscope.tools.tool_config import AgentTool
from schemas.agent.system_agent import SystemAgentLLMConfig
from schemas.automation import (
from schemas.domain.automation import (
ContextSource,
ContextWindowMode,
MessageContextConfig,
+1 -1
View File
@@ -8,7 +8,7 @@ from collections.abc import Callable
from typing import Any
from core.agentscope.runtime.ui_compiler import compile as compile_ui_hints
from schemas.messages.chat_message import (
from schemas.domain.chat_message import (
AgentChatMessage,
AgentChatMessageMetadata,
extract_user_message_attachments,
@@ -7,7 +7,7 @@ from typing import Any
import yaml
from schemas.automation import AutomationJobConfig
from schemas.domain.automation import AutomationJobConfig
_CONFIG_NAME_PATTERN = re.compile(r"^[a-z0-9][a-z0-9_-]{0,63}$")
@@ -10,12 +10,12 @@ from sqlalchemy.dialects.postgresql import insert
from sqlalchemy.ext.asyncio import AsyncSession
from core.logging import get_logger
from models.automation_jobs import AutomationJob, AutomationJobStatus, ScheduleType
from models.memories import MemoryType
from models.automation_jobs import AutomationJob
from schemas.enums import AutomationJobStatus, MemoryType, ScheduleType
from models.profile import Profile
from schemas.automation import AutomationJobConfig, ScheduleConfig
from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent
from schemas.user.context import parse_profile_settings
from schemas.domain.automation import AutomationJobConfig, ScheduleConfig
from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent
from schemas.shared.user import parse_profile_settings
from v1.auth.automation_static_config import load_static_automation_job_config
from v1.auth.schemas import RegistrationBootstrapRequest
from v1.memories.repository import SQLAlchemyMemoriesRepository
+4 -3
View File
@@ -9,9 +9,10 @@ from sqlalchemy.ext.asyncio import AsyncSession
from zoneinfo import ZoneInfo, ZoneInfoNotFoundError
from core.db.base_repository import BaseRepository
from models.agent_chat_session import AgentChatSession, SessionType
from models.automation_jobs import AutomationJob, AutomationJobStatus, ScheduleType
from schemas.automation import AutomationJobConfig, ScheduleConfig
from models.agent_chat_session import AgentChatSession
from models.automation_jobs import AutomationJob
from schemas.enums import AutomationJobStatus, ScheduleType, SessionType
from schemas.domain.automation import AutomationJobConfig, ScheduleConfig
if TYPE_CHECKING:
from v1.automation_jobs.schemas import (
+15 -16
View File
@@ -7,9 +7,8 @@ from zoneinfo import ZoneInfo, ZoneInfoNotFoundError
from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
from models.automation_jobs import AutomationJob as OrmAutomationJob
from models.automation_jobs import AutomationJobStatus
from schemas.automation import AutomationJobConfig
from schemas.domain.automation import AutomationJobConfig
from schemas.enums import AutomationJobStatus
class AutomationJobResponse(BaseModel):
@@ -29,20 +28,20 @@ class AutomationJobResponse(BaseModel):
updated_at: datetime
@classmethod
def from_orm(cls, obj: OrmAutomationJob) -> Self:
def from_orm(cls, obj: object) -> Self:
return cls(
id=obj.id,
owner_id=obj.owner_id,
bootstrap_key=obj.bootstrap_key,
title=obj.title,
timezone=obj.timezone,
status=obj.status,
is_system=obj.bootstrap_key is not None,
config=AutomationJobConfig.model_validate(obj.config or {}),
next_run_at=obj.next_run_at,
last_run_at=obj.last_run_at,
created_at=obj.created_at,
updated_at=obj.updated_at,
id=getattr(obj, "id"),
owner_id=getattr(obj, "owner_id"),
bootstrap_key=getattr(obj, "bootstrap_key"),
title=getattr(obj, "title"),
timezone=getattr(obj, "timezone"),
status=getattr(obj, "status"),
is_system=getattr(obj, "bootstrap_key") is not None,
config=AutomationJobConfig.model_validate(getattr(obj, "config", {}) or {}),
next_run_at=getattr(obj, "next_run_at"),
last_run_at=getattr(obj, "last_run_at"),
created_at=getattr(obj, "created_at"),
updated_at=getattr(obj, "updated_at"),
)
+2 -2
View File
@@ -7,8 +7,8 @@ from uuid import UUID
from zoneinfo import ZoneInfo, ZoneInfoNotFoundError
from fastapi import HTTPException, status
from models.automation_jobs import ScheduleType
from schemas.automation import (
from schemas.enums import ScheduleType
from schemas.domain.automation import (
AutomationJob as AutomationJobSchema,
MessageContextConfig,
RuntimeConfig,
+4 -3
View File
@@ -9,9 +9,10 @@ from sqlalchemy.exc import SQLAlchemyError
from core.db.base_repository import BaseRepository
from core.logging import get_logger
from models.friendships import Friendship, FriendshipStatus
from models.inbox_messages import InboxMessage, InboxMessageStatus, InboxMessageType
from schemas.inbox.messages import FriendshipContent
from models.friendships import Friendship
from models.inbox_messages import InboxMessage
from schemas.enums import FriendshipStatus, InboxMessageStatus, InboxMessageType
from schemas.domain.inbox import FriendshipContent
if TYPE_CHECKING:
from sqlalchemy.ext.asyncio import AsyncSession
+1 -1
View File
@@ -6,7 +6,7 @@ from uuid import UUID
from pydantic import BaseModel, ConfigDict, Field
from schemas.user.context import UserContext
from schemas.shared.user import UserContext
class FriendRequestCreate(BaseModel):
+5 -4
View File
@@ -10,8 +10,9 @@ from sqlalchemy.exc import SQLAlchemyError
from core.auth.models import CurrentUser
from core.db.base_service import BaseService
from core.logging import get_logger
from models.friendships import Friendship, FriendshipStatus
from models.inbox_messages import InboxMessage, InboxMessageStatus, InboxMessageType
from models.friendships import Friendship
from models.inbox_messages import InboxMessage
from schemas.enums import FriendshipStatus, InboxMessageStatus, InboxMessageType
from v1.friendships.repository import FriendshipRepository
from v1.friendships.schemas import (
FriendRequestCreate,
@@ -22,7 +23,7 @@ from v1.users.repository import UserRepository
if TYPE_CHECKING:
from sqlalchemy.ext.asyncio import AsyncSession
from schemas.user.context import UserContext
from schemas.shared.user import UserContext
logger = get_logger("v1.friendships.service")
@@ -593,7 +594,7 @@ class FriendshipService(BaseService):
)
def _build_user_basic_info(self, profile: Any) -> "UserContext":
from schemas.user.context import UserContext
from schemas.shared.user import UserContext
if profile is None:
return UserContext(id="", username="")
+2 -1
View File
@@ -7,7 +7,8 @@ from sqlalchemy import select, update
from sqlalchemy.exc import SQLAlchemyError
from core.logging import get_logger
from models.inbox_messages import InboxMessage, InboxMessageType, InboxMessageStatus
from models.inbox_messages import InboxMessage
from schemas.enums import InboxMessageStatus, InboxMessageType
if TYPE_CHECKING:
from sqlalchemy.ext.asyncio import AsyncSession
+1 -1
View File
@@ -6,7 +6,7 @@ from uuid import UUID
from pydantic import BaseModel, ConfigDict
from schemas.inbox.messages import InboxMessageStatus, InboxMessageType
from schemas.domain.inbox import InboxMessageStatus, InboxMessageType
class InboxMessageResponse(BaseModel):
+2 -1
View File
@@ -9,7 +9,8 @@ from sqlalchemy.exc import SQLAlchemyError
from core.db.base_repository import BaseRepository
from core.logging import get_logger
from models.memories import Memory, MemoryStatus, MemoryType
from models.memories import Memory
from schemas.enums import MemoryStatus, MemoryType
if TYPE_CHECKING:
from sqlalchemy.ext.asyncio import AsyncSession
+1 -1
View File
@@ -4,7 +4,7 @@ from typing import Annotated
from fastapi import APIRouter, Depends, status
from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent
from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent
from v1.memories.dependencies import get_memories_service
from v1.memories.schemas import (
MemoryListResponse,
+1 -1
View File
@@ -4,7 +4,7 @@ from typing import ClassVar
from pydantic import BaseModel, ConfigDict
from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent
from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent
class UserMemoryUpdate(BaseModel):
+3 -2
View File
@@ -8,8 +8,9 @@ from sqlalchemy.exc import SQLAlchemyError
from core.auth.models import CurrentUser
from core.db.base_service import BaseService
from core.logging import get_logger
from models.memories import Memory, MemoryType
from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent
from models.memories import Memory
from schemas.enums import MemoryType
from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent
from v1.memories.repository import MemoriesRepositoryLike
if TYPE_CHECKING:
+3 -2
View File
@@ -9,8 +9,9 @@ from sqlalchemy.exc import SQLAlchemyError
from core.db.base_repository import BaseRepository
from core.logging import get_logger
from models.schedule_items import ScheduleItem, ScheduleItemStatus
from models.schedule_subscriptions import ScheduleSubscription, SubscriptionStatus
from models.schedule_items import ScheduleItem
from models.schedule_subscriptions import ScheduleSubscription
from schemas.enums import ScheduleItemStatus, SubscriptionStatus
if TYPE_CHECKING:
from sqlalchemy.ext.asyncio import AsyncSession
+2 -2
View File
@@ -7,14 +7,14 @@ from zoneinfo import ZoneInfo, ZoneInfoNotFoundError
from pydantic import BaseModel, ConfigDict, Field, field_validator
from schemas.inbox.messages import (
from schemas.domain.inbox import (
CalendarContent,
CalendarDeleteContent,
CalendarInviteContent,
CalendarUpdateContent,
parse_calendar_content,
)
from schemas.schedule.items import (
from schemas.domain.schedule import (
AttachmentType,
ScheduleItemMetadata,
ScheduleItemMetadataAttachment,
+12 -3
View File
@@ -10,9 +10,14 @@ from sqlalchemy.exc import SQLAlchemyError
from core.auth.models import CurrentUser
from core.db.base_service import BaseService
from core.logging import get_logger
from models.inbox_messages import InboxMessage, InboxMessageType, InboxMessageStatus
from models.inbox_messages import InboxMessage
from models.schedule_items import ScheduleItem
from models.schedule_subscriptions import SubscriptionPermission, SubscriptionStatus
from schemas.enums import (
InboxMessageStatus,
InboxMessageType,
SubscriptionPermission,
SubscriptionStatus,
)
from v1.auth.gateway import SupabaseAuthGateway
from v1.inbox_messages.repository import InboxMessageRepository
from v1.schedule_items.repository import ScheduleItemRepository
@@ -35,6 +40,8 @@ if TYPE_CHECKING:
logger = get_logger("v1.schedule_items.service")
_LEGACY_ARCHIVED_STATUSES = {"completed", "canceled"}
class AuthByPhoneGateway(Protocol):
async def get_user_by_phone(self, phone: str) -> "UserByPhoneResponse": ...
@@ -417,8 +424,10 @@ class ScheduleItemService(BaseService):
permission: int = 1,
) -> ScheduleItemResponse:
status_value = (
item.status.value if hasattr(item.status, "value") else item.status
item.status.value if hasattr(item.status, "value") else str(item.status)
)
if status_value in _LEGACY_ARCHIVED_STATUSES:
status_value = ScheduleItemStatus.ARCHIVED.value
source_type_value = (
item.source_type.value
if hasattr(item.source_type, "value")
+2 -1
View File
@@ -10,7 +10,8 @@ from sqlalchemy.exc import SQLAlchemyError
from core.db.base_repository import BaseRepository
from core.logging import get_logger
from models.todo_sources import TodoSource
from models.todos import Todo, TodoPriority, TodoStatus
from models.todos import Todo
from schemas.enums import TodoPriority, TodoStatus
if TYPE_CHECKING:
from sqlalchemy.ext.asyncio import AsyncSession
+1 -1
View File
@@ -5,7 +5,7 @@ from uuid import UUID
from pydantic import BaseModel, ConfigDict, Field
from schemas.todo import TodoOrder
from schemas.domain.todo import TodoOrder
class TodoCreate(BaseModel):
+2 -1
View File
@@ -10,7 +10,8 @@ from sqlalchemy.exc import SQLAlchemyError
from core.auth.models import CurrentUser
from core.db.base_service import BaseService
from core.logging import get_logger
from models.todos import Todo, TodoStatus
from models.todos import Todo
from schemas.enums import TodoStatus
from v1.schedule_items.repository import SQLAlchemyScheduleItemRepository
from v1.todo.repository import TodoRepository
from v1.todo.schemas import (
+1 -1
View File
@@ -5,7 +5,7 @@ from uuid import UUID
from fastapi import APIRouter, Depends
from schemas.user.context import UserContext
from schemas.shared.user import UserContext
from v1.users.dependencies import get_user_service
from v1.users.schemas import UserSearchRequest, UserUpdateRequest
from v1.users.service import UserService
+3 -3
View File
@@ -13,14 +13,14 @@ from core.agentscope.persistence.user_context_cache import (
)
from core.db.base_service import BaseService
from core.logging import get_logger
from schemas.user.context import UserContext, parse_profile_settings
from schemas.shared.user import UserContext, parse_profile_settings
from v1.users.repository import UserRepository
from v1.users.schemas import UserSearchRequest, UserUpdateRequest
if TYPE_CHECKING:
from sqlalchemy.ext.asyncio import AsyncSession
from schemas.user.context import UserContext
from schemas.shared.user import UserContext
logger = get_logger("v1.users.service")
@@ -105,7 +105,7 @@ class UserService(BaseService):
)
async def get_user_by_id(self, user_id: UUID) -> "UserContext":
from schemas.user.context import UserContext
from schemas.shared.user import UserContext
try:
profile = await self._repository.get_by_user_id(user_id)