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 MigrationSpec, ModuleContext, ModuleManifest 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() manifest = ModuleManifest( id="audit", name="Audit", version="0.1.6", required_capabilities=(CAPABILITY_AUTH_PRINCIPAL_RESOLVER, CAPABILITY_AUTH_PERMISSION_EVALUATOR), route_factory=_route_factory, migration_spec=MigrationSpec( module_id="audit", metadata=Base.metadata, retirement_supported=True, retirement_provider=drop_table_retirement_provider(audit_models.AuditLog, 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, label="Audit"), ), capability_factories={ CAPABILITY_AUDIT_RECORDER: _audit_recorder, CAPABILITY_AUDIT_RETENTION: _audit_retention, }, ) def get_manifest() -> ModuleManifest: return manifest