Files
林玮 (Jade Lin) febb5f949f Merge remote-tracking branch 'origin/main' into linw/snp-911-end-user-auth
# Conflicts:
#	api/.importlinter
#	api/controllers/console/__init__.py
#	api/controllers/console/workspace/account.py
#	api/core/app/apps/message_based_app_generator.py
#	api/core/app/entities/app_invoke_entities.py
#	api/core/tools/tool_manager.py
#	api/extensions/application_services/installed_app.py
#	api/extensions/ext_application_services.py
#	api/models/__init__.py
#	api/models/workflow.py
#	api/openapi/markdown/console-openapi.md
#	api/openapi/markdown/web-openapi.md
#	api/repositories/account/repository.py
#	api/repositories/api_workflow_run_repository.py
#	api/repositories/app/console_repository.py
#	api/repositories/app_definition_query_repository.py
#	api/services/app_definition_query_service.py
#	api/services/app_generate_service.py
#	api/services/conversation_service.py
#	api/services/message_service.py
#	api/services/web_conversation_service.py
#	api/tasks/app_generate/workflow_execute_task.py
#	api/tests/unit_tests/controllers/console/auth/test_login.py
#	api/tests/unit_tests/controllers/web/test_app.py
#	api/tests/unit_tests/core/app/apps/advanced_chat/test_app_generator.py
#	api/tests/unit_tests/repositories/app/test_console_repository.py
#	api/tests/unit_tests/services/test_app_definition_query_service.py
#	api/tests/unit_tests/services/test_app_generate_service.py
#	api/tests/unit_tests/services/test_message_service.py
#	docker/envs/core-services/api.env.example
#	packages/contracts/generated/api/console/account/types.gen.ts
#	packages/contracts/generated/api/console/account/zod.gen.ts
#	packages/contracts/generated/api/console/apps/errors.gen.ts
#	packages/contracts/generated/api/console/apps/orpc.gen.ts
#	packages/contracts/generated/api/console/errors.gen.ts
#	packages/contracts/generated/api/console/workspaces/errors.gen.ts
#	packages/contracts/generated/api/console/workspaces/orpc.gen.ts
#	packages/contracts/generated/api/web/errors.gen.ts
#	packages/contracts/generated/api/web/orpc.gen.ts
#	packages/contracts/generated/api/web/types.gen.ts
#	packages/contracts/generated/api/web/zod.gen.ts
2026-11-05 14:17:44 +08:00

80 lines
3.6 KiB
Python

"""Composition of Installed App use cases."""
from dataclasses import dataclass
from sqlalchemy.orm import Session, sessionmaker
from clients.plugin.auth import PluginCredentialAuthClient
from core.app.entities.app_invoke_entities import InvokeFrom
from repositories.credentials.query_repository import CredentialQueryRepository
from repositories.installed_app_connection_repository import SQLAlchemyInstalledConnectionRepository
from repositories.installed_app_repository import SQLAlchemyInstalledAppRepository
from services.app_definition_query_service import AppDefinitionQueryService
from services.conversation_command_service import ConversationCommandService
from services.conversation_name_service import ConversationNameService
from services.conversation_query_service import ConversationQueryService
from services.installed_app_access_service import InstalledAppAccessService
from services.installed_app_connections import InstalledAppConnectionService
from services.installed_app_conversation_service import InstalledAppConversationService
from services.installed_app_generation_adapters import AppGenerateServiceRuntime
from services.installed_app_generation_service import InstalledAppGenerationService
from services.installed_app_service import InstalledAppService, WorkspaceRoleLookup
from services.webapp_access_query_service import WebAppAccessQueryService
from services.workflow_test_credential_adapters import WorkspaceTestCredentialGateway
@dataclass(frozen=True, slots=True)
class InstalledAppServices:
access: InstalledAppAccessService
management: InstalledAppService
generation: InstalledAppGenerationService
conversations: InstalledAppConversationService
connections: InstalledAppConnectionService
def build_installed_app_services(
*,
database_client: sessionmaker[Session],
conversation_queries: ConversationQueryService,
conversation_names: ConversationNameService,
conversation_commands: ConversationCommandService,
webapp_access: WebAppAccessQueryService,
get_workspace_role: WorkspaceRoleLookup,
webapp_auth_enabled: bool,
app_definitions: AppDefinitionQueryService,
) -> InstalledAppServices:
installed_apps = SQLAlchemyInstalledAppRepository(session_factory=database_client)
access = InstalledAppAccessService(
installed_apps=installed_apps,
is_user_allowed=webapp_access.is_user_allowed,
get_access_modes=webapp_access.batch_get_access_modes,
get_user_permissions=webapp_access.batch_get_user_permissions,
)
return InstalledAppServices(
connections=InstalledAppConnectionService(
store=SQLAlchemyInstalledConnectionRepository(session_factory=database_client),
access=access,
definitions=app_definitions,
credentials=WorkspaceTestCredentialGateway(
queries=CredentialQueryRepository(session_factory=database_client),
auth=PluginCredentialAuthClient(),
invoke_from=InvokeFrom.EXPLORE,
),
),
access=access,
management=InstalledAppService(
installed_apps=installed_apps,
get_workspace_role=get_workspace_role,
get_visible_app_ids=access.get_visible_app_ids if webapp_auth_enabled else None,
),
generation=InstalledAppGenerationService(
usage=installed_apps,
runtime=AppGenerateServiceRuntime(session_factory=database_client),
),
conversations=InstalledAppConversationService(
queries=conversation_queries,
names=conversation_names,
commands=conversation_commands,
),
)