feat: 节点互联双向同步——授权/计划/客户(邮箱)按业务键LWW增量同步,HTTPS+HMAC互联密钥,默认10分钟宽松节奏
This commit is contained in:
1 parent
06a9dac99b
commit
44387835e1
13 files changed
+1180
-1
No files matched your search
@@ -0,0 +1,118 @@
|
||||
package dto
|
||||
|
||||
import "time"
|
||||
|
||||
// ============ 互联节点管理(管理后台) ============
|
||||
|
||||
// PeerRequest 创建/更新互联节点 // Logan.Li
|
||||
type PeerRequest struct {
|
||||
ID uint `json:"id"`
|
||||
Name string `json:"name" binding:"required"`
|
||||
BaseURL string `json:"base_url" binding:"required,url"`
|
||||
SharedKey string `json:"shared_key" binding:"required,min=32"`
|
||||
}
|
||||
|
||||
// PeerResponse 节点响应(不回传密钥明文) // Logan.Li
|
||||
type PeerResponse struct {
|
||||
ID uint `json:"id"`
|
||||
Name string `json:"name"`
|
||||
BaseURL string `json:"base_url"`
|
||||
Status string `json:"status"`
|
||||
RemoteNode string `json:"remote_node"`
|
||||
KeyTail string `json:"key_tail"` // 密钥尾 4 位,供核对 // Logan.Li
|
||||
LastSyncAt *time.Time `json:"last_sync_at"`
|
||||
LastResult string `json:"last_result"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
// ============ 节点间交换契约(HMAC 认证) ============
|
||||
|
||||
// SyncProductPayload 产品载荷(业务键 code) // Logan.Li
|
||||
type SyncProductPayload struct {
|
||||
Code string `json:"code"`
|
||||
Name string `json:"name"`
|
||||
Version string `json:"version"`
|
||||
Description string `json:"description"`
|
||||
Features string `json:"features"`
|
||||
Price float64 `json:"price"`
|
||||
PriceModel string `json:"price_model"`
|
||||
Status int `json:"status"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
// SyncPlanPayload 计划载荷(业务键 产品code+plan_type+duration) // Logan.Li
|
||||
type SyncPlanPayload struct {
|
||||
ProductCode string `json:"product_code"`
|
||||
Name string `json:"name"`
|
||||
PlanType string `json:"plan_type"`
|
||||
Price float64 `json:"price"`
|
||||
Currency string `json:"currency"`
|
||||
Duration int `json:"duration"`
|
||||
MaxDevices int `json:"max_devices"`
|
||||
Features string `json:"features"`
|
||||
SortOrder int `json:"sort_order"`
|
||||
Status int `json:"status"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
// SyncCustomerPayload 客户载荷(业务键 email,空邮箱回退 name)。
|
||||
// 合规最小化:不同步 phone/address/notes,仅同步邮箱场景必需字段 // Logan.Li
|
||||
type SyncCustomerPayload struct {
|
||||
Name string `json:"name"`
|
||||
Company string `json:"company"`
|
||||
Email string `json:"email"`
|
||||
Status int `json:"status"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
// SyncLicensePayload 授权载荷(业务键 license_key) // Logan.Li
|
||||
type SyncLicensePayload struct {
|
||||
LicenseKey string `json:"license_key"`
|
||||
ProductCode string `json:"product_code"`
|
||||
CustomerEmail string `json:"customer_email"`
|
||||
CustomerName string `json:"customer_name"`
|
||||
Status string `json:"status"`
|
||||
StartDate time.Time `json:"start_date"`
|
||||
EndDate time.Time `json:"end_date"`
|
||||
Duration int `json:"duration"`
|
||||
MaxActivations int `json:"max_activations"`
|
||||
CurrentActivations int `json:"current_activations"`
|
||||
IsTrial bool `json:"is_trial"`
|
||||
TrialDays int `json:"trial_days"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
// SyncItems 单次交换的数据集(按依赖顺序应用:产品→计划→客户→授权) // Logan.Li
|
||||
type SyncItems struct {
|
||||
Products []SyncProductPayload `json:"products"`
|
||||
Plans []SyncPlanPayload `json:"plans"`
|
||||
Customers []SyncCustomerPayload `json:"customers"`
|
||||
Licenses []SyncLicensePayload `json:"licenses"`
|
||||
}
|
||||
|
||||
// SyncExchangeRequest 交换请求:携带我方增量 + 我方游标 // Logan.Li
|
||||
type SyncExchangeRequest struct {
|
||||
Cursor time.Time `json:"cursor"` // 对端上次同步到的时点(我方记录)
|
||||
Items SyncItems `json:"items"`
|
||||
}
|
||||
|
||||
// SyncExchangeResponse 交换响应:对端增量 + 应用结果 + 对端时钟 // Logan.Li
|
||||
type SyncExchangeResponse struct {
|
||||
Items SyncItems `json:"items"`
|
||||
Applied map[string]int `json:"applied"`
|
||||
ServerTime time.Time `json:"server_time"`
|
||||
NodeInfo map[string]string `json:"node_info"`
|
||||
}
|
||||
|
||||
// SyncHandshakeRequest 握手请求(验证互联密钥并互认节点) // Logan.Li
|
||||
type SyncHandshakeRequest struct {
|
||||
NodeName string `json:"node_name"`
|
||||
}
|
||||
|
||||
// SyncHandshakeResponse 握手响应 // Logan.Li
|
||||
type SyncHandshakeResponse struct {
|
||||
NodeID string `json:"node_id"`
|
||||
NodeName string `json:"node_name"`
|
||||
Version string `json:"version"`
|
||||
ServerTime time.Time `json:"server_time"`
|
||||
}
|
||||
Reference in new issue
Block a user