Go handlers, models, stores and migrations for all SDK modules. Updates developer portal navigation and BYOEH page. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
78 lines
2.8 KiB
Go
78 lines
2.8 KiB
Go
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"`
|
|
}
|