package multitenant import ( "time" "github.com/google/uuid" ) // TenantOverview provides a consolidated view of a tenant's compliance status // including scores, module highlights, and namespace information. type TenantOverview struct { ID uuid.UUID `json:"id"` Name string `json:"name"` Slug string `json:"slug"` Status string `json:"status"` MaxUsers int `json:"max_users"` LLMQuotaMonthly int `json:"llm_quota_monthly"` ComplianceScore int `json:"compliance_score"` RiskLevel string `json:"risk_level"` NamespaceCount int `json:"namespace_count"` // Module highlights OpenIncidents int `json:"open_incidents"` OpenReports int `json:"open_reports"` // whistleblower PendingDSRs int `json:"pending_dsrs"` TrainingRate float64 `json:"training_completion_rate"` VendorRiskHigh int `json:"vendor_risk_high"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } // MultiTenantOverviewResponse wraps the list of tenant overviews with aggregate metrics. type MultiTenantOverviewResponse struct { Tenants []TenantOverview `json:"tenants"` Total int `json:"total"` AverageScore int `json:"average_score"` GeneratedAt time.Time `json:"generated_at"` } // CreateTenantRequest represents a request to create a new tenant. type CreateTenantRequest struct { Name string `json:"name" binding:"required"` Slug string `json:"slug" binding:"required"` MaxUsers int `json:"max_users"` LLMQuotaMonthly int `json:"llm_quota_monthly"` } // UpdateTenantRequest represents a partial update to an existing tenant. // Pointer fields allow distinguishing between "not provided" and "zero value". type UpdateTenantRequest struct { Name *string `json:"name"` MaxUsers *int `json:"max_users"` LLMQuotaMonthly *int `json:"llm_quota_monthly"` Status *string `json:"status"` } // CreateNamespaceRequest represents a request to create a new namespace within a tenant. type CreateNamespaceRequest struct { Name string `json:"name" binding:"required"` Slug string `json:"slug" binding:"required"` IsolationLevel string `json:"isolation_level"` DataClassification string `json:"data_classification"` } // SwitchTenantRequest represents a request to switch the active tenant context. type SwitchTenantRequest struct { TenantID string `json:"tenant_id" binding:"required"` } // SwitchTenantResponse contains the tenant info needed for the frontend to switch context. type SwitchTenantResponse struct { TenantID uuid.UUID `json:"tenant_id"` TenantName string `json:"tenant_name"` TenantSlug string `json:"tenant_slug"` Status string `json:"status"` }