Files
supply-intelligence/internal/domain/types.go
2026-05-07 10:16:46 +08:00

133 lines
4.5 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 (
DiscoveryCandidateStatusPendingAdmission DiscoveryCandidateStatus = "pending_admission"
DiscoveryCandidateStatusAdmitted DiscoveryCandidateStatus = "admitted"
DiscoveryCandidateStatusRejected DiscoveryCandidateStatus = "rejected"
)
type GatewaySyncStatus string
const (
GatewaySyncStatusPending GatewaySyncStatus = "pending"
GatewaySyncStatusApplied GatewaySyncStatus = "applied"
GatewaySyncStatusFailed GatewaySyncStatus = "failed"
)
type GatewayAckResult string
const (
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 ProbeResult struct {
AccountID int64
Classification ProbeClassification
ReasonCode string
ObservedAt time.Time
}
type AccountRoutingState struct {
AccountID int64 `json:"account_id"`
Platform string `json:"platform"`
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"`
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"`
}
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"`
}