202 lines
8.4 KiB
Go
202 lines
8.4 KiB
Go
package domain
|
|
|
|
import "time"
|
|
|
|
type AccountStatus string
|
|
|
|
const (
|
|
AccountStatusActive AccountStatus = "active"
|
|
AccountStatusSuspended AccountStatus = "suspended"
|
|
AccountStatusDisabled AccountStatus = "disabled"
|
|
AccountStatusPendingVerify AccountStatus = "pending_verify"
|
|
AccountStatusPendingEnable AccountStatus = "pending_enable"
|
|
)
|
|
|
|
type ProbeClassification string
|
|
|
|
const (
|
|
ProbeClassificationSuccess ProbeClassification = "success"
|
|
ProbeClassificationExplicitFailure ProbeClassification = "explicit_failure"
|
|
ProbeClassificationInconclusive ProbeClassification = "inconclusive"
|
|
)
|
|
|
|
type DiscoveryCandidateStatus string
|
|
|
|
const (
|
|
DiscoveryCandidateStatusDiscovered DiscoveryCandidateStatus = "discovered"
|
|
DiscoveryCandidateStatusTesting DiscoveryCandidateStatus = "testing"
|
|
DiscoveryCandidateStatusPendingAdmission DiscoveryCandidateStatus = "pending_admission"
|
|
DiscoveryCandidateStatusAdmitted DiscoveryCandidateStatus = "admitted"
|
|
DiscoveryCandidateStatusTestPassed DiscoveryCandidateStatus = "test_passed"
|
|
DiscoveryCandidateStatusTestFailed DiscoveryCandidateStatus = "test_failed"
|
|
DiscoveryCandidateStatusRetryPending DiscoveryCandidateStatus = "retry_pending"
|
|
DiscoveryCandidateStatusIgnored DiscoveryCandidateStatus = "ignored"
|
|
DiscoveryCandidateStatusPublished DiscoveryCandidateStatus = "published"
|
|
DiscoveryCandidateStatusDeprecated DiscoveryCandidateStatus = "deprecated"
|
|
DiscoveryCandidateStatusClosed DiscoveryCandidateStatus = "closed"
|
|
)
|
|
|
|
type GatewaySyncStatus string
|
|
|
|
const (
|
|
GatewaySyncStatusPending GatewaySyncStatus = "pending"
|
|
GatewaySyncStatusApplied GatewaySyncStatus = "applied"
|
|
GatewaySyncStatusFailed GatewaySyncStatus = "failed"
|
|
)
|
|
|
|
type GatewayAckResult string
|
|
|
|
const (
|
|
GatewayAckResultPending GatewayAckResult = "pending"
|
|
GatewayAckResultApplied GatewayAckResult = "applied"
|
|
GatewayAckResultFailed GatewayAckResult = "failed"
|
|
)
|
|
|
|
func (r GatewayAckResult) SyncStatus() GatewaySyncStatus {
|
|
switch r {
|
|
case GatewayAckResultApplied:
|
|
return GatewaySyncStatusApplied
|
|
case GatewayAckResultFailed:
|
|
return GatewaySyncStatusFailed
|
|
default:
|
|
return GatewaySyncStatusPending
|
|
}
|
|
}
|
|
|
|
type GatewayFailureCategory string
|
|
|
|
const (
|
|
GatewayFailureCategoryTemporaryNetwork GatewayFailureCategory = "temporary_network"
|
|
GatewayFailureCategoryTemporaryTimeout GatewayFailureCategory = "temporary_timeout"
|
|
GatewayFailureCategoryTemporary5xx GatewayFailureCategory = "temporary_5xx"
|
|
GatewayFailureCategoryTemporaryUnavailable GatewayFailureCategory = "temporary_unavailable"
|
|
GatewayFailureCategoryContractInvalid GatewayFailureCategory = "contract_invalid"
|
|
GatewayFailureCategoryAuthForbidden GatewayFailureCategory = "auth_forbidden"
|
|
GatewayFailureCategoryIdempotencyConflict GatewayFailureCategory = "idempotency_conflict"
|
|
GatewayFailureCategoryBusinessRejected GatewayFailureCategory = "business_rejected"
|
|
GatewayFailureCategoryUnknown GatewayFailureCategory = "unknown"
|
|
)
|
|
|
|
type ProbeResult struct {
|
|
AccountID int64
|
|
Classification ProbeClassification
|
|
ReasonCode string
|
|
ObservedAt time.Time
|
|
}
|
|
|
|
// SupplyAccount represents a platform account with credentials for API access.
|
|
type SupplyAccount struct {
|
|
AccountID int64 `json:"account_id"`
|
|
Platform string `json:"platform"`
|
|
APIKey string `json:"api_key"`
|
|
ConsumerTag string `json:"consumer_tag"` // gateway consumer that owns this account
|
|
Status string `json:"status"` // 'active' | 'suspended'
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type AccountRoutingState struct {
|
|
AccountID int64 `json:"account_id"`
|
|
Platform string `json:"platform"`
|
|
APIKey string `json:"api_key,omitempty"`
|
|
AccountStatus AccountStatus `json:"account_status"`
|
|
RoutingEnabled bool `json:"routing_enabled"`
|
|
RiskScore int `json:"risk_score"`
|
|
ReasonCode string `json:"reason_code"`
|
|
LastProbeAt time.Time `json:"last_probe_at"`
|
|
Version int64 `json:"version"`
|
|
}
|
|
|
|
type PackageChangeEvent struct {
|
|
EventID string `json:"event_id"`
|
|
AccountID int64 `json:"account_id"`
|
|
EventType string `json:"event_type"`
|
|
PackageID int64 `json:"package_id"`
|
|
Platform string `json:"platform"`
|
|
Model string `json:"model"`
|
|
OccurredAt time.Time `json:"occurred_at"`
|
|
Version int64 `json:"version"`
|
|
GatewaySyncStatus GatewaySyncStatus `json:"gateway_sync_status"`
|
|
Consumer string `json:"consumer,omitempty"`
|
|
ConsumerDetail string `json:"consumer_detail,omitempty"`
|
|
AckedAt *time.Time `json:"acked_at,omitempty"`
|
|
RetryCount int `json:"retry_count"`
|
|
LastRetryAt *time.Time `json:"last_retry_at,omitempty"`
|
|
NextRetryAt *time.Time `json:"next_retry_at,omitempty"`
|
|
LastFailureCategory GatewayFailureCategory `json:"last_failure_category,omitempty"`
|
|
LastFailureDetail string `json:"last_failure_detail,omitempty"`
|
|
}
|
|
|
|
type PackageChangeAck struct {
|
|
EventID string `json:"event_id"`
|
|
Consumer string `json:"consumer"`
|
|
Result GatewayAckResult `json:"result"`
|
|
Detail string `json:"detail,omitempty"`
|
|
AckedAt time.Time `json:"acked_at"`
|
|
SyncState GatewaySyncStatus `json:"gateway_sync_status"`
|
|
}
|
|
|
|
type GatewayAppliedSnapshot struct {
|
|
Consumer string `json:"consumer"`
|
|
LastEventID string `json:"last_event_id"`
|
|
LastPackageID int64 `json:"last_package_id"`
|
|
LastPlatform string `json:"last_platform"`
|
|
LastModel string `json:"last_model"`
|
|
LastAppliedVersion int64 `json:"last_applied_version"`
|
|
LastResult string `json:"last_result"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type DiscoveryCandidate struct {
|
|
CandidateID string `json:"candidate_id"`
|
|
AccountID int64 `json:"account_id"`
|
|
Platform string `json:"platform"`
|
|
Model string `json:"model"`
|
|
Source string `json:"source"`
|
|
Status DiscoveryCandidateStatus `json:"status"`
|
|
ReasonCode string `json:"reason_code,omitempty"`
|
|
DiscoveredAt time.Time `json:"discovered_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
Version int64 `json:"version"`
|
|
}
|
|
|
|
// SupplyPackage represents a supply package in the system
|
|
type SupplyPackage struct {
|
|
PackageID int64 `json:"package_id"`
|
|
Platform string `json:"platform"`
|
|
Model string `json:"model"`
|
|
Status string `json:"status"` // draft, active, deprecated
|
|
Source string `json:"source"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
Version int64 `json:"version"`
|
|
}
|
|
|
|
// ProbeExecutionLog records a probe result for historical tracking
|
|
type ProbeExecutionLog struct {
|
|
LogID int64 `json:"log_id"`
|
|
AccountID int64 `json:"account_id"`
|
|
Platform string `json:"platform"`
|
|
ProbeResult string `json:"probe_result"`
|
|
FailureClass string `json:"failure_class,omitempty"`
|
|
HTTPStatus int `json:"http_status,omitempty"`
|
|
LatencyMs int `json:"latency_ms,omitempty"`
|
|
RiskScore int `json:"risk_score"`
|
|
EvaluatedTransition string `json:"evaluated_transition"`
|
|
ExecutedAt time.Time `json:"executed_at"`
|
|
RequestID string `json:"request_id"`
|
|
Version int64 `json:"version"`
|
|
}
|
|
|
|
// AdmissionTestLog records a single admission test run for audit/history.
|
|
// TestID is auto-generated by the underlying store (DB serial or in-memory counter).
|
|
type AdmissionTestLog struct {
|
|
TestID int64 `json:"test_id,omitempty"`
|
|
CandidateID string `json:"candidate_id"`
|
|
Status string `json:"status"` // passed, failed
|
|
FailureCode string `json:"failure_code,omitempty"`
|
|
FailureSummary string `json:"failure_summary,omitempty"`
|
|
TestedAt time.Time `json:"tested_at"`
|
|
Version int64 `json:"version,omitempty"`
|
|
}
|