refactor: 重构 schemas 结构,统一枚举定义
This commit is contained in:
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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"),
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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="")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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 (
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user