mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-29 19:35:20 +02:00
refactor(automations): park manual trigger pending Run-now redesign
Manual-as-a-standalone-trigger conflates "user clicks Run now" with the
trigger model and forces ad-hoc input plumbing on the caller. Remove the
unreachable surface so the tree reflects reality (schedule is the only
v1 trigger).
- Unregister `manual`: drop import from triggers/__init__.py
- Delete `app/automations/triggers/manual/`
- Drop `RunService.dispatch_manual` (RunService is now read-only)
- Drop `POST /automations/{id}/run` and `RunDispatched` schema
- Keep `TriggerType.MANUAL` Python + PG enum value (reserved, documented)
to avoid an Alembic round-trip when Run-now is redesigned
This commit is contained in:
parent
8fb65d7188
commit
c0232fdcfe
13 changed files with 18 additions and 176 deletions
|
|
@ -1,46 +1,25 @@
|
|||
"""``RunService`` — dispatch and history of automation runs."""
|
||||
"""``RunService`` — read-only access to automation run history."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
|
||||
from fastapi import Depends, HTTPException
|
||||
from sqlalchemy import func, select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.automations.dispatch import DispatchError
|
||||
from app.automations.persistence.models.automation import Automation
|
||||
from app.automations.persistence.models.run import AutomationRun
|
||||
from app.automations.triggers.manual import dispatch_manual_run
|
||||
from app.db import Permission, User, get_async_session
|
||||
from app.users import current_active_user
|
||||
from app.utils.rbac import check_permission
|
||||
|
||||
|
||||
class RunService:
|
||||
"""Lifecycle of the ``AutomationRun`` resource."""
|
||||
"""Read-only access to ``AutomationRun`` history."""
|
||||
|
||||
def __init__(self, *, session: AsyncSession, user: User) -> None:
|
||||
self.session = session
|
||||
self.user = user
|
||||
|
||||
async def dispatch_manual(
|
||||
self,
|
||||
*,
|
||||
automation_id: int,
|
||||
runtime_inputs: dict[str, Any] | None,
|
||||
) -> AutomationRun:
|
||||
"""Fire a manual run via the registered manual trigger."""
|
||||
await self._authorize(automation_id, Permission.AUTOMATIONS_EXECUTE.value)
|
||||
try:
|
||||
return await dispatch_manual_run(
|
||||
session=self.session,
|
||||
automation_id=automation_id,
|
||||
runtime_inputs=runtime_inputs,
|
||||
)
|
||||
except DispatchError as exc:
|
||||
raise HTTPException(status_code=422, detail=str(exc)) from exc
|
||||
|
||||
async def list(
|
||||
self,
|
||||
*,
|
||||
|
|
|
|||
|
|
@ -69,7 +69,7 @@ class TriggerService:
|
|||
trigger.enabled = data["enabled"]
|
||||
|
||||
# Recompute next_fire_at when schedule timing changed or the trigger was
|
||||
# toggled back on. Manual triggers always have NULL next_fire_at.
|
||||
# toggled back on.
|
||||
if trigger.type == TriggerType.SCHEDULE:
|
||||
trigger.next_fire_at = _initial_next_fire(
|
||||
trigger.type, trigger.params, trigger.enabled
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue