2021-09-26 02:35:02 +00:00
|
|
|
|
package model
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"database/sql/driver"
|
|
|
|
|
"encoding/json"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
2022-06-29 03:09:58 +00:00
|
|
|
|
type ServerAppListCollection struct {
|
|
|
|
|
List []ServerAppList `json:"list"`
|
|
|
|
|
Recommend []ServerAppList `json:"recommend"`
|
|
|
|
|
Community []ServerAppList `json:"community"`
|
|
|
|
|
Version string `json:"version"`
|
|
|
|
|
}
|
|
|
|
|
|
2022-07-22 03:02:11 +00:00
|
|
|
|
// @tiger - 对于用于出参的数据结构,静态信息(例如 title)和
|
|
|
|
|
// 动态信息(例如 state、query_count)应该划分到不同的数据结构中
|
|
|
|
|
//
|
|
|
|
|
// 这样的好处是
|
|
|
|
|
// 1 - 多次获取动态信息时可以减少出参复杂度,因为静态信息只获取一次就好
|
|
|
|
|
// 2 - 在未来的迭代中,可以降低维护成本(所有字段都展开放在一个层级维护成本略高)
|
|
|
|
|
//
|
|
|
|
|
// 另外,一些针对性字段,例如 Docker 相关的,可以用 map 来保存。
|
|
|
|
|
// 这样在未来增加多态 App,例如 Snap,不需要维护多个结构,或者一个结构保存不必要的字段
|
2021-09-26 02:35:02 +00:00
|
|
|
|
type ServerAppList struct {
|
2021-11-03 09:07:46 +00:00
|
|
|
|
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"`
|
2022-06-29 03:09:58 +00:00
|
|
|
|
CategoryId int `json:"category_id"`
|
2021-12-29 08:42:20 +00:00
|
|
|
|
CategoryFont string `json:"category_font"`
|
2021-11-03 09:07:46 +00:00
|
|
|
|
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"`
|
2022-07-26 03:03:45 +00:00
|
|
|
|
State int `json:"state"`
|
2021-11-03 09:07:46 +00:00
|
|
|
|
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"`
|
2021-12-29 08:42:20 +00:00
|
|
|
|
Type int `json:"type"`
|
2022-06-29 03:09:58 +00:00
|
|
|
|
QueryCount int `json:"query_count"`
|
2021-12-29 08:42:20 +00:00
|
|
|
|
Developer string `json:"developer"`
|
2022-02-17 10:43:25 +00:00
|
|
|
|
HostName string `json:"host_name"`
|
|
|
|
|
Privileged bool `json:"privileged"`
|
|
|
|
|
CapAdd Strings `json:"cap_add"`
|
|
|
|
|
Cmd Strings `json:"cmd"`
|
2021-09-26 02:35:02 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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结构*******************/
|