87e66aae8a
* delete connect * update user * change branch * API feedback (#341) * wip * wip * wip * wip * wip * wip * wip * wip * change branch * update route * change branch * Update route.go * 0.3.4 Function development completed * Update system.go * update ui * Completed v0.3.4 and released alpha * Update gin.go * fix the problem of docker environment variables being displayed more than once Co-authored-by: Tiger Wang (王豫) <tigerwang@outlook.com>
128 lines
4.6 KiB
Go
128 lines
4.6 KiB
Go
package model
|
||
|
||
import (
|
||
"database/sql/driver"
|
||
"encoding/json"
|
||
"time"
|
||
)
|
||
|
||
type ServerAppListCollection struct {
|
||
List []ServerAppList `json:"list"`
|
||
Recommend []ServerAppList `json:"recommend"`
|
||
Community []ServerAppList `json:"community"`
|
||
Version string `json:"version"`
|
||
}
|
||
|
||
// @tiger - 对于用于出参的数据结构,静态信息(例如 title)和
|
||
// 动态信息(例如 state、query_count)应该划分到不同的数据结构中
|
||
//
|
||
// 这样的好处是
|
||
// 1 - 多次获取动态信息时可以减少出参复杂度,因为静态信息只获取一次就好
|
||
// 2 - 在未来的迭代中,可以降低维护成本(所有字段都展开放在一个层级维护成本略高)
|
||
//
|
||
// 另外,一些针对性字段,例如 Docker 相关的,可以用 map 来保存。
|
||
// 这样在未来增加多态 App,例如 Snap,不需要维护多个结构,或者一个结构保存不必要的字段
|
||
type ServerAppList struct {
|
||
Id uint `gorm:"column:id;primary_key" json:"id"`
|
||
Title string `json:"title"`
|
||
Description string `json:"description"`
|
||
Tagline string `json:"tagline"`
|
||
Tags Strings `gorm:"type:json" json:"tags"`
|
||
Icon string `json:"icon"`
|
||
ScreenshotLink Strings `gorm:"type:json" json:"screenshot_link"`
|
||
Category string `json:"category"`
|
||
CategoryId int `json:"category_id"`
|
||
CategoryFont string `json:"category_font"`
|
||
PortMap string `json:"port_map"`
|
||
ImageVersion string `json:"image_version"`
|
||
Tip string `json:"tip"`
|
||
Envs EnvArray `json:"envs"`
|
||
Ports PortArray `json:"ports"`
|
||
Volumes PathArray `json:"volumes"`
|
||
Devices PathArray `json:"devices"`
|
||
NetworkModel string `json:"network_model"`
|
||
Image string `json:"image"`
|
||
Index string `json:"index"`
|
||
CreatedAt time.Time `json:"created_at"`
|
||
UpdatedAt time.Time `json:"updated_at"`
|
||
State int `json:"state"`
|
||
Author string `json:"author"`
|
||
MinMemory int `json:"min_memory"`
|
||
MinDisk int `json:"min_disk"`
|
||
MaxMemory uint64 `json:"max_memory"`
|
||
Thumbnail string `json:"thumbnail"`
|
||
Healthy string `json:"healthy"`
|
||
Plugins Strings `json:"plugins"`
|
||
Origin string `json:"origin"`
|
||
Type int `json:"type"`
|
||
QueryCount int `json:"query_count"`
|
||
Developer string `json:"developer"`
|
||
HostName string `json:"host_name"`
|
||
Privileged bool `json:"privileged"`
|
||
CapAdd Strings `json:"cap_add"`
|
||
Cmd Strings `json:"cmd"`
|
||
}
|
||
|
||
type Ports struct {
|
||
ContainerPort uint `json:"container_port"`
|
||
CommendPort int `json:"commend_port"`
|
||
Desc string `json:"desc"`
|
||
Type int `json:"type"` // 1:必选 2:可选 3:默认值不必显示 4:系统处理 5:container内容也可编辑
|
||
}
|
||
|
||
type Volume struct {
|
||
ContainerPath string `json:"container_path"`
|
||
Path string `json:"path"`
|
||
Desc string `json:"desc"`
|
||
Type int `json:"type"` // 1:必选 2:可选 3:默认值不必显示 4:系统处理 5:container内容也可编辑
|
||
}
|
||
|
||
type Envs struct {
|
||
Name string `json:"name"`
|
||
Value string `json:"value"`
|
||
Desc string `json:"desc"`
|
||
Type int `json:"type"` // 1:必选 2:可选 3:默认值不必显示 4:系统处理 5:container内容也可编辑
|
||
}
|
||
|
||
type Devices struct {
|
||
ContainerPath string `json:"container_path"`
|
||
Path string `json:"path"`
|
||
Desc string `json:"desc"`
|
||
Type int `json:"type"` // 1:必选 2:可选 3:默认值不必显示 4:系统处理 5:container内容也可编辑
|
||
}
|
||
|
||
type configures struct {
|
||
TcpPorts []Ports `json:"tcp_ports"`
|
||
UdpPorts []Ports `json:"udp_ports"`
|
||
Envs []Envs `json:"envs"`
|
||
Volumes []Volume `json:"volumes"`
|
||
Devices []Devices `json:"devices"`
|
||
}
|
||
|
||
/****************使gorm支持[]string结构*******************/
|
||
type Strings []string
|
||
|
||
func (c Strings) Value() (driver.Value, error) {
|
||
b, err := json.Marshal(c)
|
||
return string(b), err
|
||
}
|
||
|
||
func (c *Strings) Scan(input interface{}) error {
|
||
return json.Unmarshal(input.([]byte), c)
|
||
}
|
||
|
||
/****************使gorm支持[]string结构*******************/
|
||
|
||
/****************使gorm支持[]string结构*******************/
|
||
type MapStrings []map[string]string
|
||
|
||
func (c MapStrings) Value() (driver.Value, error) {
|
||
b, err := json.Marshal(c)
|
||
return string(b), err
|
||
}
|
||
|
||
func (c *MapStrings) Scan(input interface{}) error {
|
||
return json.Unmarshal(input.([]byte), c)
|
||
}
|
||
|
||
/****************使gorm支持[]string结构*******************/
|