Files
govoplan-audit/src/govoplan_audit/backend/manifest.py

79 lines
2.7 KiB
Python

from __future__ import annotations
from govoplan_audit.backend.db import models as audit_models # noqa: F401 - populate Audit ORM metadata
from govoplan_core.core.access import (
CAPABILITY_AUDIT_RECORDER,
CAPABILITY_AUDIT_RETENTION,
CAPABILITY_AUTH_PERMISSION_EVALUATOR,
CAPABILITY_AUTH_PRINCIPAL_RESOLVER,
)
from govoplan_core.core.module_guards import drop_table_retirement_provider, persistent_table_uninstall_guard
from govoplan_core.core.modules import FrontendModule, MigrationSpec, ModuleContext, ModuleManifest
from govoplan_core.core.events import CAPABILITY_PLATFORM_EVENT_OUTBOX
from govoplan_core.core.views import ViewSurface
from govoplan_core.db.base import Base
def _route_factory(context: ModuleContext):
del context
from govoplan_audit.backend.api.v1.routes import router
return router
def _audit_recorder(context: ModuleContext):
del context
from govoplan_audit.backend.recording import SqlAuditRecorder
return SqlAuditRecorder()
def _audit_retention(context: ModuleContext):
del context
from govoplan_audit.backend.retention import SqlAuditRetentionProvider
return SqlAuditRetentionProvider()
def _event_outbox(context: ModuleContext):
del context
from govoplan_audit.backend.outbox import SqlAuditOutbox
return SqlAuditOutbox()
manifest = ModuleManifest(
id="audit",
name="Audit",
version="0.1.8",
required_capabilities=(CAPABILITY_AUTH_PRINCIPAL_RESOLVER, CAPABILITY_AUTH_PERMISSION_EVALUATOR),
route_factory=_route_factory,
frontend=FrontendModule(
module_id="audit",
package_name="@govoplan/audit-webui",
view_surfaces=(
ViewSurface(id="audit.admin.system", module_id="audit", kind="section", label="System audit", order=90),
ViewSurface(id="audit.admin.tenant", module_id="audit", kind="section", label="Tenant audit", order=100),
),
),
migration_spec=MigrationSpec(
module_id="audit",
metadata=Base.metadata,
retirement_supported=True,
retirement_provider=drop_table_retirement_provider(audit_models.AuditLog, audit_models.AuditOutboxEvent, label="Audit"),
retirement_notes="Destructive retirement drops audit-owned database tables after the installer captures a database snapshot.",
),
uninstall_guard_providers=(
persistent_table_uninstall_guard(audit_models.AuditLog, audit_models.AuditOutboxEvent, label="Audit"),
),
capability_factories={
CAPABILITY_AUDIT_RECORDER: _audit_recorder,
CAPABILITY_AUDIT_RETENTION: _audit_retention,
CAPABILITY_PLATFORM_EVENT_OUTBOX: _event_outbox,
},
)
def get_manifest() -> ModuleManifest:
return manifest