feat(api): enhance server and node management with new request/response structures

This commit is contained in:
Chang lue Tsen 2025-08-25 10:10:13 -04:00
parent d5460d0cd1
commit 7bd026a600
2 changed files with 178 additions and 183 deletions

View File

@ -11,109 +11,136 @@ info (
import "../types.api" import "../types.api"
type ( type (
GetNodeServerListRequest { OnlineUser {
Page int `form:"page" validate:"required"` IP []string `json:"ip"`
Size int `form:"size" validate:"required"` UserId int64 `json:"user_id"`
Tags string `form:"tags,omitempty"` Subscribe string `json:"subscribe"`
GroupId int64 `form:"group_id,omitempty"` SubscribeId int64 `json:"subscribe_id"`
Search string `form:"search,omitempty"` Traffic int64 `json:"traffic"`
ExpiredAt int64 `json:"expired_at"`
} }
GetNodeServerListResponse { ServerStatus {
Online []OnlineUser `json:"online"`
Cpu float64 `json:"cpu"`
Mem float64 `json:"mem"`
Disk float64 `json:"disk"`
}
Server {
Id int64 `json:"id"`
Name string `json:"name"`
Country string `json:"country"`
City string `json:"city"`
Ratio float32 `json:"ratio"`
Address string `json:"address"`
Sort int `json:"sort"`
Protocols []Protocol `json:"protocols"`
LastReportedAt int64 `json:"last_reported_at"`
Status ServerStatus `json:"status"`
CreatedAt int64 `json:"created_at"`
UpdatedAt int64 `json:"updated_at"`
}
Protocol {
Type string `json:"type"`
Security string `json:"security,omitempty"`
SNI string `json:"sni,omitempty"`
AllowInsecure bool `json:"allow_insecure,omitempty"`
Fingerprint string `json:"fingerprint,omitempty"`
RealityServerAddr string `json:"reality_server_addr,omitempty"`
RealityServerPort int `json:"reality_server_port,omitempty"`
RealityPrivateKey string `json:"reality_private_key,omitempty"`
RealityPublicKey string `json:"reality_public_key,omitempty"`
RealityShortId string `json:"reality_short_id,omitempty"`
Transport string `json:"transport,omitempty"`
Host string `json:"host,omitempty"`
Path string `json:"path,omitempty"`
ServiceName string `json:"service_name,omitempty"`
Cipher string `json:"cipher,omitempty"`
ServerKey string `json:"server_key,omitempty"`
Flow string `json:"flow,omitempty"`
HopPorts string `json:"hop_ports,omitempty"`
HopInterval int `json:"hop_interval,omitempty"`
ObfsPassword string `json:"obfs_password,omitempty"`
DisableSNI bool `json:"disable_sni,omitempty"`
ReduceRtt bool `json:"reduce_rtt,omitempty"`
UDPRelayMode string `json:"udp_relay_mode,omitempty"`
CongestionController string `json:"congestion_controller,omitempty"`
}
CreateServerRequest {
Name string `json:"name"`
Country string `json:"country,omitempty"`
City string `json:"city,omitempty"`
Ratio float32 `json:"ratio"`
Address string `json:"address"`
Sort int `json:"sort,omitempty"`
Protocols []Protocol `json:"protocols"`
}
UpdateServerRequest {
Id int64 `json:"id"`
Name string `json:"name"`
Country string `json:"country,omitempty"`
City string `json:"city,omitempty"`
Ratio float32 `json:"ratio"`
Address string `json:"address"`
Sort int `json:"sort,omitempty"`
Protocols []Protocol `json:"protocols"`
}
DeleteServerRequest {
Id int64 `json:"id"`
}
FilterServerListRequest {
Page int `form:"page"`
Size int `form:"size"`
Search string `form:"search,omitempty"`
}
FilterServerListResponse {
Total int64 `json:"total"` Total int64 `json:"total"`
List []Server `json:"list"` List []Server `json:"list"`
} }
UpdateNodeRequest { GetServerProtocolsRequest {
Id int64 `json:"id" validate:"required"` Id int64 `form:"id"`
Tags []string `json:"tags"` }
Country string `json:"country"` GetServerProtocolsResponse {
City string `json:"city"` Protocols []Protocol `json:"protocols"`
Name string `json:"name" validate:"required"` }
ServerAddr string `json:"server_addr" validate:"required"` Node {
RelayMode string `json:"relay_mode"` Id int64 `json:"id"`
RelayNode []NodeRelay `json:"relay_node"` Name string `json:"name"`
SpeedLimit int `json:"speed_limit"` Tags string `json:"tags"`
TrafficRatio float32 `json:"traffic_ratio"` Port uint16 `json:"port"`
GroupId int64 `json:"group_id"` Address string `json:"address"`
Protocol string `json:"protocol" validate:"required"` ServerId int64 `json:"server_id"`
Config interface{} `json:"config" validate:"required"` Protocol string `json:"protocol"`
Enable *bool `json:"enable"` CreatedAt int64 `json:"created_at"`
Sort int64 `json:"sort"` UpdatedAt int64 `json:"updated_at"`
} }
CreateNodeRequest { CreateNodeRequest {
Name string `json:"name" validate:"required"` Name string `json:"name"`
Tags []string `json:"tags"` Tags string `json:"tags,omitempty"`
Country string `json:"country"` Port uint16 `json:"port"`
City string `json:"city"` Address string `json:"address"`
ServerAddr string `json:"server_addr" validate:"required"` ServerId int64 `json:"server_id"`
RelayMode string `json:"relay_mode"` Protocol string `json:"protocol"`
RelayNode []NodeRelay `json:"relay_node"` }
SpeedLimit int `json:"speed_limit"` UpdateNodeRequest {
TrafficRatio float32 `json:"traffic_ratio"` Id int64 `json:"id"`
GroupId int64 `json:"group_id"` Name string `json:"name"`
Protocol string `json:"protocol" validate:"required"` Tags string `json:"tags,omitempty"`
Config interface{} `json:"config" validate:"required"` Port uint16 `json:"port"`
Enable *bool `json:"enable"` Address string `json:"address"`
Sort int64 `json:"sort"` ServerId int64 `json:"server_id"`
Protocol string `json:"protocol"`
} }
DeleteNodeRequest { DeleteNodeRequest {
Id int64 `json:"id" validate:"required"` Id int64 `json:"id"`
} }
GetNodeGroupListResponse { FilterNodeListRequest {
Total int64 `json:"total"` Page int `form:"page"`
List []ServerGroup `json:"list"` Size int `form:"size"`
Search string `form:"search,omitempty"`
} }
CreateNodeGroupRequest { FilterNodeListResponse {
Name string `json:"name" validate:"required"` Total int64 `json:"total"`
Description string `json:"description"` List []Node `json:"list"`
}
UpdateNodeGroupRequest {
Id int64 `json:"id" validate:"required"`
Name string `json:"name" validate:"required"`
Description string `json:"description"`
}
DeleteNodeGroupRequest {
Id int64 `json:"id" validate:"required"`
}
BatchDeleteNodeRequest {
Ids []int64 `json:"ids" validate:"required"`
}
BatchDeleteNodeGroupRequest {
Ids []int64 `json:"ids" validate:"required"`
}
GetNodeDetailRequest {
Id int64 `form:"id" validate:"required"`
}
NodeSortRequest {
Sort []SortItem `json:"sort"`
}
CreateRuleGroupRequest {
Name string `json:"name" validate:"required"`
Icon string `json:"icon"`
Type string `json:"type"`
Tags []string `json:"tags"`
Rules string `json:"rules"`
Default bool `json:"default"`
Enable bool `json:"enable"`
}
UpdateRuleGroupRequest {
Id int64 `json:"id" validate:"required"`
Icon string `json:"icon"`
Type string `json:"type"`
Name string `json:"name" validate:"required"`
Tags []string `json:"tags"`
Rules string `json:"rules"`
Default bool `json:"default"`
Enable bool `json:"enable"`
}
DeleteRuleGroupRequest {
Id int64 `json:"id" validate:"required"`
}
GetRuleGroupResponse {
Total int64 `json:"total"`
List []ServerRuleGroup `json:"list"`
}
GetNodeTagListResponse {
Tags []string `json:"tags"`
} }
) )
@ -123,72 +150,40 @@ type (
middleware: AuthMiddleware middleware: AuthMiddleware
) )
service ppanel { service ppanel {
@doc "Get node tag list" @doc "Create Server"
@handler GetNodeTagList @handler CreateServer
get /tag/list returns (GetNodeTagListResponse) post /create (CreateServerRequest)
@doc "Get node list" @doc "Update Server"
@handler GetNodeList @handler UpdateServer
get /list (GetNodeServerListRequest) returns (GetNodeServerListResponse) post /update (UpdateServerRequest)
@doc "Get node detail" @doc "Delete Server"
@handler GetNodeDetail @handler DeleteServer
get /detail (GetNodeDetailRequest) returns (Server) post /delete (DeleteServerRequest)
@doc "Update node" @doc "Filter Server List"
@handler UpdateNode @handler FilterServerList
put / (UpdateNodeRequest) get /list (FilterServerListRequest) returns (FilterServerListResponse)
@doc "Create node" @doc "Get Server Protocols"
@handler GetServerProtocols
get /protocols (GetServerProtocolsRequest) returns (GetServerProtocolsResponse)
@doc "Create Node"
@handler CreateNode @handler CreateNode
post / (CreateNodeRequest) post /node/create (CreateNodeRequest)
@doc "Delete node" @doc "Update Node"
@handler UpdateNode
post /node/update (UpdateNodeRequest)
@doc "Delete Node"
@handler DeleteNode @handler DeleteNode
delete / (DeleteNodeRequest) post /node/delete (DeleteNodeRequest)
@doc "Batch delete node" @doc "Filter Node List"
@handler BatchDeleteNode @handler FilterNodeList
delete /batch (BatchDeleteNodeRequest) get /node/list (FilterNodeListRequest) returns (FilterNodeListResponse)
@doc "Get node group list"
@handler GetNodeGroupList
get /group/list returns (GetNodeGroupListResponse)
@doc "Create node group"
@handler CreateNodeGroup
post /group (CreateNodeGroupRequest)
@doc "Update node group"
@handler UpdateNodeGroup
put /group (UpdateNodeGroupRequest)
@doc "Delete node group"
@handler DeleteNodeGroup
delete /group (DeleteNodeGroupRequest)
@doc "Batch delete node group"
@handler BatchDeleteNodeGroup
delete /group/batch (BatchDeleteNodeGroupRequest)
@doc "Node sort "
@handler NodeSort
post /sort (NodeSortRequest)
@doc "Create rule group"
@handler CreateRuleGroup
post /rule_group (CreateRuleGroupRequest)
@doc "Update rule group"
@handler UpdateRuleGroup
put /rule_group (UpdateRuleGroupRequest)
@doc "Delete rule group"
@handler DeleteRuleGroup
delete /rule_group (DeleteRuleGroupRequest)
@doc "Get rule group list"
@handler GetRuleGroupList
get /rule_group_list returns (GetRuleGroupResponse)
} }

View File

@ -274,37 +274,37 @@ type (
Host string `json:"host"` Host string `json:"host"`
ServiceName string `json:"service_name"` ServiceName string `json:"service_name"`
} }
Server { // Server {
Id int64 `json:"id"` // Id int64 `json:"id"`
Tags []string `json:"tags"` // Tags []string `json:"tags"`
Country string `json:"country"` // Country string `json:"country"`
City string `json:"city"` // City string `json:"city"`
Name string `json:"name"` // Name string `json:"name"`
ServerAddr string `json:"server_addr"` // ServerAddr string `json:"server_addr"`
RelayMode string `json:"relay_mode"` // RelayMode string `json:"relay_mode"`
RelayNode []NodeRelay `json:"relay_node"` // RelayNode []NodeRelay `json:"relay_node"`
SpeedLimit int `json:"speed_limit"` // SpeedLimit int `json:"speed_limit"`
TrafficRatio float32 `json:"traffic_ratio"` // TrafficRatio float32 `json:"traffic_ratio"`
GroupId int64 `json:"group_id"` // GroupId int64 `json:"group_id"`
Protocol string `json:"protocol"` // Protocol string `json:"protocol"`
Config interface{} `json:"config"` // Config interface{} `json:"config"`
Enable *bool `json:"enable"` // Enable *bool `json:"enable"`
CreatedAt int64 `json:"created_at"` // CreatedAt int64 `json:"created_at"`
UpdatedAt int64 `json:"updated_at"` // UpdatedAt int64 `json:"updated_at"`
Status *NodeStatus `json:"status"` // Status *NodeStatus `json:"status"`
Sort int64 `json:"sort"` // Sort int64 `json:"sort"`
} // }
OnlineUser { // OnlineUser {
SID int64 `json:"uid"` // SID int64 `json:"uid"`
IP string `json:"ip"` // IP string `json:"ip"`
} // }
NodeStatus { // NodeStatus {
Online interface{} `json:"online"` // Online interface{} `json:"online"`
Cpu float64 `json:"cpu"` // Cpu float64 `json:"cpu"`
Mem float64 `json:"mem"` // Mem float64 `json:"mem"`
Disk float64 `json:"disk"` // Disk float64 `json:"disk"`
UpdatedAt int64 `json:"updated_at"` // UpdatedAt int64 `json:"updated_at"`
} // }
ServerGroup { ServerGroup {
Id int64 `json:"id"` Id int64 `json:"id"`
Name string `json:"name"` Name string `json:"name"`