Skip to main content

MetadataRepository

Trait MetadataRepository 

Source
pub trait MetadataRepository: Send + Sync {
Show 18 methods // Required methods fn create_tenant<'life0, 'life1, 'async_trait>( &'life0 self, tenant: &'life1 Tenant, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_tenant<'life0, 'async_trait>( &'life0 self, id: TenantId, ) -> Pin<Box<dyn Future<Output = Result<Option<Tenant>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_tenant_by_token<'life0, 'life1, 'async_trait>( &'life0 self, token: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Option<Tenant>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn update_tenant<'life0, 'life1, 'async_trait>( &'life0 self, tenant: &'life1 Tenant, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn list_tenants<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Vec<Tenant>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn delete_tenant<'life0, 'async_trait>( &'life0 self, id: TenantId, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn get_tenant_config<'life0, 'async_trait>( &'life0 self, tenant_id: TenantId, ) -> Pin<Box<dyn Future<Output = Result<Option<TenantConfig>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn upsert_tenant_config<'life0, 'life1, 'async_trait>( &'life0 self, config: &'life1 TenantConfig, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn record_audit_event<'life0, 'life1, 'async_trait>( &'life0 self, event: &'life1 AuditEvent, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn query_audit_events<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 AuditQuery, ) -> Pin<Box<dyn Future<Output = Result<Vec<AuditEvent>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn create_api_key<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 ApiKeyRecord, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_api_key_by_hash<'life0, 'life1, 'async_trait>( &'life0 self, key_hash: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Option<ApiKeyRecord>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn list_api_keys<'life0, 'async_trait>( &'life0 self, tenant_id: TenantId, ) -> Pin<Box<dyn Future<Output = Result<Vec<ApiKeyRecord>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn revoke_api_key<'life0, 'async_trait>( &'life0 self, key_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn store_report<'life0, 'life1, 'async_trait>( &'life0 self, report: &'life1 ComplianceReportRecord, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn get_report<'life0, 'async_trait>( &'life0 self, report_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<ComplianceReportRecord>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; fn list_reports<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 ReportQuery, ) -> Pin<Box<dyn Future<Output = Result<Vec<ComplianceReportRecord>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait; fn health_check<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait;
}
Expand description

Repository for metadata (tenants, configs, audit events).

Dev/Lite: SQLite. Production: PostgreSQL.

Required Methods§

Source

fn create_tenant<'life0, 'life1, 'async_trait>( &'life0 self, tenant: &'life1 Tenant, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Create a new tenant.

Source

fn get_tenant<'life0, 'async_trait>( &'life0 self, id: TenantId, ) -> Pin<Box<dyn Future<Output = Result<Option<Tenant>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get a tenant by ID.

Source

fn get_tenant_by_token<'life0, 'life1, 'async_trait>( &'life0 self, token: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Option<Tenant>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get a tenant by its API token.

Source

fn update_tenant<'life0, 'life1, 'async_trait>( &'life0 self, tenant: &'life1 Tenant, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Update an existing tenant.

Source

fn list_tenants<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<Vec<Tenant>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

List all tenants.

Source

fn delete_tenant<'life0, 'async_trait>( &'life0 self, id: TenantId, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Delete a tenant by ID.

Source

fn get_tenant_config<'life0, 'async_trait>( &'life0 self, tenant_id: TenantId, ) -> Pin<Box<dyn Future<Output = Result<Option<TenantConfig>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get the configuration for a tenant.

Source

fn upsert_tenant_config<'life0, 'life1, 'async_trait>( &'life0 self, config: &'life1 TenantConfig, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Create or update tenant configuration.

Source

fn record_audit_event<'life0, 'life1, 'async_trait>( &'life0 self, event: &'life1 AuditEvent, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Record an audit event.

Source

fn query_audit_events<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 AuditQuery, ) -> Pin<Box<dyn Future<Output = Result<Vec<AuditEvent>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Query audit events.

Source

fn create_api_key<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 ApiKeyRecord, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Store a new API key record (the plaintext key is NOT stored — only its hash).

Source

fn get_api_key_by_hash<'life0, 'life1, 'async_trait>( &'life0 self, key_hash: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Option<ApiKeyRecord>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Look up an active (non-revoked) API key by its SHA-256 hash.

Source

fn list_api_keys<'life0, 'async_trait>( &'life0 self, tenant_id: TenantId, ) -> Pin<Box<dyn Future<Output = Result<Vec<ApiKeyRecord>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

List all API keys for a tenant (includes revoked keys).

Source

fn revoke_api_key<'life0, 'async_trait>( &'life0 self, key_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Revoke an API key by setting its revoked_at timestamp.

Source

fn store_report<'life0, 'life1, 'async_trait>( &'life0 self, report: &'life1 ComplianceReportRecord, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Store a compliance report (insert or update).

Source

fn get_report<'life0, 'async_trait>( &'life0 self, report_id: Uuid, ) -> Pin<Box<dyn Future<Output = Result<Option<ComplianceReportRecord>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get a compliance report by ID.

Source

fn list_reports<'life0, 'life1, 'async_trait>( &'life0 self, query: &'life1 ReportQuery, ) -> Pin<Box<dyn Future<Output = Result<Vec<ComplianceReportRecord>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

List compliance reports for a tenant with pagination.

Source

fn health_check<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Health check for the metadata repository.

Implementors§