mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-11-12 00:30:28 +08:00
* chore(types): clear AniList endpoint mypy debt * chore(types): clear Douban endpoint mypy debt * chore(types): clear recommendation endpoint mypy debt * chore(types): clear subscription notification mypy debt * chore(types): clear SDK string compatibility mypy debt * chore(types): ratchet v3 host mypy across remaining files * chore(types): reduce v3 host mypy debt and retire ledger * chore(types): reconcile host snapshot with upstream HTTP pool * test(types): cover host paths exposed by mypy cleanup
73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
"""
|
|
工作流领域的请求级 command/query 依赖。
|
|
"""
|
|
|
|
from fastapi import Depends
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.adapters.external.server import MoviePilotServerHelper
|
|
from app.api.context import get_async_session, get_host_runtime, get_sync_session
|
|
from app.application.scheduling import get_scheduler
|
|
from app.application.workflow import (
|
|
WorkflowDefinitionCommand,
|
|
WorkflowMutationCommand,
|
|
WorkflowQueryService,
|
|
get_workflow_manager,
|
|
)
|
|
from app.runtime.stop import runtime_stop_state
|
|
from app.startup.composition.context import HostRuntime
|
|
|
|
|
|
def get_workflow_mutation_command(
|
|
db: Session = Depends(get_sync_session),
|
|
runtime: HostRuntime = Depends(get_host_runtime),
|
|
) -> WorkflowMutationCommand:
|
|
"""
|
|
组装请求级工作流写用例和提交后的调度副作用。
|
|
"""
|
|
scheduler = get_scheduler()
|
|
workflow_manager = get_workflow_manager()
|
|
system_config = runtime.workflow.system_config()
|
|
return WorkflowMutationCommand(
|
|
repository=runtime.workflow.repository(db),
|
|
unit_of_work=runtime.persistence.sync_transaction(db),
|
|
add_timer=scheduler.update_workflow_job,
|
|
remove_timer=scheduler.remove_workflow_job,
|
|
load_event=workflow_manager.load_workflow_events,
|
|
remove_event=workflow_manager.remove_workflow_event,
|
|
refresh_event=workflow_manager.update_workflow_event,
|
|
stop_running=runtime_stop_state.stop_workflow,
|
|
delete_cache=lambda workflow_id: system_config.delete(
|
|
f"WorkflowCache-{workflow_id}"
|
|
),
|
|
)
|
|
|
|
|
|
def get_workflow_definition_command(
|
|
db: AsyncSession = Depends(get_async_session),
|
|
runtime: HostRuntime = Depends(get_host_runtime),
|
|
) -> WorkflowDefinitionCommand:
|
|
"""
|
|
组装工作流创建、复用和重置的异步写用例。
|
|
"""
|
|
system_config = runtime.workflow.system_config()
|
|
return WorkflowDefinitionCommand(
|
|
repository=runtime.workflow.repository(db),
|
|
unit_of_work=runtime.persistence.async_transaction(db),
|
|
stop_running=runtime_stop_state.stop_workflow,
|
|
async_delete_cache=lambda workflow_id: system_config.async_delete(
|
|
f"WorkflowCache-{workflow_id}"
|
|
),
|
|
report_fork=MoviePilotServerHelper.async_workflow_fork_by_id,
|
|
)
|
|
|
|
|
|
def get_workflow_query_service(
|
|
runtime: HostRuntime = Depends(get_host_runtime),
|
|
) -> WorkflowQueryService:
|
|
"""
|
|
返回组合根装配的工作流只读查询用例。
|
|
"""
|
|
return runtime.workflow.query
|