Initial commit
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"git.zkcoi.com/zkcoi/meshray/internal/model"
|
||||
)
|
||||
|
||||
// NetworkResponse 网络响应 DTO(ID 为字符串格式,避免 JavaScript 精度丢失)
|
||||
type NetworkResponse struct {
|
||||
ID string `json:"id"` // ❄️ 雪花算法 ID(字符串格式)
|
||||
Name string `json:"name"` // 组网名称
|
||||
SubnetIPv4 string `json:"subnet_ipv4"` // IPv4 子网(snake_case)
|
||||
MeshMode string `json:"mesh_mode"` // 组网模式(enhanced/native)
|
||||
WGMode string `json:"wg_mode"` // WG 运行模式(kernel/userspace)
|
||||
PolicyID string `json:"policy_id"` // ❄️ 关联策略 ID(字符串格式)
|
||||
Status string `json:"status"` // 运行状态(running/stopped)
|
||||
DeviceCount int64 `json:"device_count"` // 设备数量(统计字段)
|
||||
Description string `json:"description,omitempty"` // 描述
|
||||
CreatedAt string `json:"created_at"` // 创建时间
|
||||
UpdatedAt string `json:"updated_at"` // 更新时间
|
||||
}
|
||||
|
||||
// DeviceResponse 设备响应 DTO(ID 为字符串格式,避免 JavaScript 精度丢失)
|
||||
type DeviceResponse struct {
|
||||
ID string `json:"id"` // ❄️ 雪花算法 ID(字符串格式)
|
||||
NetworkID string `json:"networkId"` // ❄️ 所属网络 ID(字符串格式)
|
||||
Name string `json:"name"` // 设备名称
|
||||
VirtualIP string `json:"virtualIP"` // 虚拟 IP
|
||||
PublicKey string `json:"publicKey"` // WireGuard 公钥
|
||||
Endpoint string `json:"endpoint,omitempty"` // 公网 Endpoint
|
||||
IsRelayCapable bool `json:"isRelayCapable"` // 是否中继节点
|
||||
Status string `json:"status"` // 在线状态(online/offline)
|
||||
Description string `json:"description,omitempty"` // 描述
|
||||
CreatedAt string `json:"createdAt"` // 创建时间
|
||||
UpdatedAt string `json:"updatedAt"` // 更新时间
|
||||
}
|
||||
|
||||
// PolicyResponse 策略响应 DTO(ID 为字符串格式)
|
||||
type PolicyResponse struct {
|
||||
ID string `json:"id"` // ❄️ 雪花算法 ID(字符串格式)
|
||||
Name string `json:"name"` // 策略名称
|
||||
Type string `json:"type"` // 类型(system/custom)
|
||||
LayerConfig string `json:"layerConfig"` // 链路配置 JSON
|
||||
GlobalParams string `json:"globalParams"` // 全局参数 JSON
|
||||
Enabled bool `json:"enabled"` // 是否启用
|
||||
IsDefault bool `json:"isDefault"` // 是否默认策略
|
||||
Description string `json:"description,omitempty"` // 描述
|
||||
CreatedAt string `json:"createdAt"` // 创建时间
|
||||
UpdatedAt string `json:"updatedAt"` // 更新时间
|
||||
}
|
||||
|
||||
// ToNetworkResponse Network 转 NetworkResponse
|
||||
func ToNetworkResponse(network *model.Network) NetworkResponse {
|
||||
// 计算设备数量
|
||||
var deviceCount int64 = 0
|
||||
if len(network.Devices) > 0 {
|
||||
deviceCount = int64(len(network.Devices))
|
||||
}
|
||||
|
||||
return NetworkResponse{
|
||||
ID: fmt.Sprintf("%d", network.ID),
|
||||
Name: network.Name,
|
||||
SubnetIPv4: network.SubnetIPv4,
|
||||
MeshMode: network.Mode, // Mode → MeshMode
|
||||
WGMode: network.WGMode,
|
||||
PolicyID: fmt.Sprintf("%d", network.PolicyID),
|
||||
Status: network.Status,
|
||||
DeviceCount: deviceCount, // 新增:设备数量
|
||||
CreatedAt: network.CreatedAt.Format("2006-01-02T15:04:05Z"),
|
||||
UpdatedAt: network.UpdatedAt.Format("2006-01-02T15:04:05Z"),
|
||||
}
|
||||
}
|
||||
|
||||
// ToDeviceResponse Device 转 DeviceResponse
|
||||
func ToDeviceResponse(device *model.Device) DeviceResponse {
|
||||
return DeviceResponse{
|
||||
ID: fmt.Sprintf("%d", device.ID),
|
||||
NetworkID: fmt.Sprintf("%d", device.NetworkID),
|
||||
Name: device.Name,
|
||||
VirtualIP: device.VirtualIP,
|
||||
PublicKey: device.PublicKey,
|
||||
Endpoint: device.Endpoint,
|
||||
IsRelayCapable: device.IsRelayCapable,
|
||||
Status: device.Status,
|
||||
CreatedAt: device.CreatedAt.Format("2006-01-02T15:04:05Z"),
|
||||
}
|
||||
}
|
||||
|
||||
// ToPolicyResponse Policy 转 PolicyResponse
|
||||
func ToPolicyResponse(policy *model.Policy) PolicyResponse {
|
||||
return PolicyResponse{
|
||||
ID: fmt.Sprintf("%d", policy.ID),
|
||||
Name: policy.Name,
|
||||
Type: policy.Type,
|
||||
LayerConfig: policy.LayerConfig,
|
||||
GlobalParams: policy.GlobalParams,
|
||||
Enabled: policy.Enabled,
|
||||
IsDefault: policy.IsDefault,
|
||||
Description: policy.Description,
|
||||
CreatedAt: policy.CreatedAt.Format("2006-01-02T15:04:05Z"),
|
||||
UpdatedAt: policy.UpdatedAt.Format("2006-01-02T15:04:05Z"),
|
||||
}
|
||||
}
|
||||
|
||||
// ToNetworkResponseList 批量转换 Network
|
||||
func ToNetworkResponseList(networks []model.Network) []NetworkResponse {
|
||||
result := make([]NetworkResponse, 0, len(networks))
|
||||
for _, n := range networks {
|
||||
result = append(result, ToNetworkResponse(&n))
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// ToDeviceResponseList 批量转换 Device
|
||||
func ToDeviceResponseList(devices []model.Device) []DeviceResponse {
|
||||
result := make([]DeviceResponse, 0, len(devices))
|
||||
for _, d := range devices {
|
||||
result = append(result, ToDeviceResponse(&d))
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// ToPolicyResponseList 批量转换 Policy
|
||||
func ToPolicyResponseList(policies []model.Policy) []PolicyResponse {
|
||||
result := make([]PolicyResponse, 0, len(policies))
|
||||
for _, p := range policies {
|
||||
result = append(result, ToPolicyResponse(&p))
|
||||
}
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user