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