mirror of
https://github.com/langgenius/dify.git
synced 2026-08-24 12:32:54 -04:00
66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
"""Application service for initializing a newly admitted account."""
|
|
|
|
from collections.abc import Callable
|
|
from datetime import datetime
|
|
|
|
from machinery.context import RequestContext
|
|
from machinery.errors import ActiveWorkspaceRequiredError
|
|
from services.account_errors import (
|
|
AccountAlreadyInitializedError,
|
|
AccountNotFoundError,
|
|
InvalidInvitationCodeError,
|
|
MissingInvitationCodeError,
|
|
)
|
|
from services.account_ports import AccountRepository
|
|
from services.entities.account_entities import AccountInitialization, AccountInitializationStatus, AccountSnapshot
|
|
|
|
|
|
class AccountInitializationService:
|
|
def __init__(
|
|
self,
|
|
*,
|
|
accounts: AccountRepository,
|
|
invitation_required: bool,
|
|
now: Callable[[], datetime],
|
|
) -> None:
|
|
self._accounts = accounts
|
|
self._invitation_required = invitation_required
|
|
self._now = now
|
|
|
|
def initialize(
|
|
self,
|
|
context: RequestContext,
|
|
*,
|
|
interface_language: str,
|
|
timezone: str,
|
|
invitation_code: str | None,
|
|
) -> AccountSnapshot:
|
|
workspace_id: str | None = None
|
|
if self._invitation_required:
|
|
if invitation_code is None:
|
|
raise MissingInvitationCodeError("invitation_code is required")
|
|
workspace_id = context.active_workspace_id
|
|
if workspace_id is None:
|
|
raise ActiveWorkspaceRequiredError
|
|
|
|
result = self._accounts.initialize(
|
|
context.account_id,
|
|
AccountInitialization(
|
|
interface_language=interface_language,
|
|
interface_theme="light",
|
|
timezone=timezone,
|
|
initialized_at=self._now(),
|
|
),
|
|
invitation_code=invitation_code if self._invitation_required else None,
|
|
workspace_id=workspace_id,
|
|
)
|
|
if result.status == AccountInitializationStatus.ACCOUNT_NOT_FOUND:
|
|
raise AccountNotFoundError
|
|
if result.status == AccountInitializationStatus.ALREADY_INITIALIZED:
|
|
raise AccountAlreadyInitializedError
|
|
if result.status == AccountInitializationStatus.INVALID_INVITATION:
|
|
raise InvalidInvitationCodeError
|
|
if result.account is None:
|
|
raise RuntimeError("Account repository returned an initialized result without an account")
|
|
return result.account
|