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"` }