package model // TrafficUsageSimCard is the basic card data needed when writing usage to TDengine. type TrafficUsageSimCard struct { Iccid string `json:"iccid"` PackageCode string `json:"packageCode"` } // TrafficUsageDailyRetryMessage is the retry message for daily traffic usage. type TrafficUsageDailyRetryMessage struct { UsageMb *float64 `json:"usageMb,omitempty"` Attempt int `json:"attempt,omitempty"` LastError string `json:"lastError,omitempty"` SimKey *SimKey `json:"simKey"` Card TrafficUsageSimCard `json:"card"` // QueryDate format: yyyyMMdd. QueryDate string `json:"queryDate"` } // TrafficUsageMonthlyRetryMessage is the retry message for monthly traffic usage. type TrafficUsageMonthlyRetryMessage struct { UsageMb *float64 `json:"usageMb,omitempty"` Attempt int `json:"attempt,omitempty"` LastError string `json:"lastError,omitempty"` SimKey *SimKey `json:"simKey"` Card TrafficUsageSimCard `json:"card"` // QueryDate format: yyyyMM. QueryDate string `json:"queryDate"` } // TrafficUsageMonthlyStartMessage starts one full monthly usage run. // Admin publishes this command; Worker owns the card scan and Redis production. // A nil Scope (or one whose channels normalize to empty) is a full sync. type TrafficUsageMonthlyStartMessage struct { RunID string `json:"runId"` Operation string `json:"operation"` QueryMonth string `json:"queryMonth"` TriggeredAt string `json:"triggeredAt"` Scope *SyncScope `json:"scope,omitempty"` } // TrafficUsageDailyStartMessage starts one full daily usage run. // Admin publishes this command; Worker owns the card scan and Redis production. // A nil Scope (or one whose channels normalize to empty) is a full sync. // QueryDate is yyyyMMdd. type TrafficUsageDailyStartMessage struct { RunID string `json:"runId"` Operation string `json:"operation"` QueryDate string `json:"queryDate"` TriggeredAt string `json:"triggeredAt"` Scope *SyncScope `json:"scope,omitempty"` } // OperationPreviousDayUsageFullSync identifies a daily usage run. Admin and // Worker must agree on this string: it is the operation recorded on the run and // the value Worker maps to the traffic_usage_daily sync kind. const OperationPreviousDayUsageFullSync = "previous_day_usage_full_sync" // TrafficUsageMonthlyHistoryStartMessage starts one full monthly usage history // run. It writes the TDengine monthly table, which is a different target from // TrafficUsageMonthlyStartMessage (the MySQL current-month snapshot). // // QueryMonth is yyyyMM and names the month being backfilled, which is the // previous month rather than the current one. type TrafficUsageMonthlyHistoryStartMessage struct { RunID string `json:"runId"` Operation string `json:"operation"` QueryMonth string `json:"queryMonth"` TriggeredAt string `json:"triggeredAt"` Scope *SyncScope `json:"scope,omitempty"` } // OperationPreviousMonthUsageFullSync identifies a monthly usage history run. // It is deliberately distinct from current_month_usage_full_sync, which fills // the MySQL current-month snapshot instead of the TDengine monthly table. const OperationPreviousMonthUsageFullSync = "previous_month_usage_full_sync"