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§
Sourcefn 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 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.
Sourcefn 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<'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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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).
Sourcefn 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 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.
Sourcefn 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 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).
Sourcefn 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 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.
Sourcefn 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 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).
Sourcefn 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 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.
Sourcefn 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 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.