iot_server/internal/dtos/devicelibrary.go

206 lines
7.1 KiB
Go
Raw Normal View History

2023-08-28 06:49:44 +00:00
package dtos
import (
"github.com/winc-link/hummingbird/internal/models"
)
type DeviceLibrary struct {
Id string
Name string // 容器名/软件名
Alias string
Description string
Protocol string
Version string
LibFile string
ConfigFile string
Config string
DockerConfigId string
DockerRepoName string
DockerImageId string
//SupportVersions []DeviceLibrarySupportVersion
IsInternal bool
OperateStatus string // 下载状态
}
func DeviceLibraryFromModel(d models.DeviceLibrary) DeviceLibrary {
return DeviceLibrary{
Id: d.Id,
Name: d.Name,
Description: d.Description,
Protocol: d.Protocol,
Version: d.Version,
//LibFile: d.LibFile,
//ConfigFile: d.ConfigFile,
DockerConfigId: d.DockerConfigId,
DockerRepoName: d.DockerRepoName,
DockerImageId: d.DockerImageId,
//SupportVersions: SupperVersionsFromModel(d.SupportVersions),
}
}
type DeviceLibraryAddRequest struct {
Id string `json:"id,omitempty"`
Name string `json:"name" binding:"required"`
Description string `json:"description,omitempty"`
Protocol string `json:"protocol"`
Version string `json:"version" binding:"required"`
ContainerName string `json:"container_name" binding:"required"`
DockerConfigId string `json:"docker_config_id" binding:"required"`
DockerRepoName string `json:"docker_repo_name" binding:"required"`
Language string `json:"language"` //代码语言
SupportVersion struct {
IsDefault bool `json:"is_default"`
DockerParamsSwitch bool `json:"docker_params_switch"`
DockerParams string `json:"docker_params"`
ExpertMode bool `json:"expert_mode"`
ExpertModeContent string `json:"expert_mode_content"`
ConfigJson string `json:"config_json"`
} `json:"support_version"`
}
func FromDeviceLibraryRpcToModel(p *DeviceLibraryAddRequest) models.DeviceLibrary {
dl := models.DeviceLibrary{
Id: p.Id,
Name: p.Name,
Description: p.Description,
Protocol: p.Protocol,
Version: p.Version,
ContainerName: p.ContainerName,
DockerRepoName: p.DockerRepoName,
DockerConfigId: p.DockerConfigId,
Language: p.Language,
}
//dl.SupportVersions = append(dl.SupportVersions, models.SupportVersion{
// Version: p.Version,
// IsDefault: p.IsDefault,
// ConfigJson: p.ConfigJson,
// ConfigFile: p.ConfigFile,
// DockerParamsSwitch: p.DockerParamsSwitch,
// DockerParams: s.DockerParams,
// ExpertMode: s.ExpertMode,
// ExpertModeContent: s.ExpertModeContent,
//})
return dl
}
type DeviceLibrarySearchQueryRequest struct {
BaseSearchConditionQuery `schema:",inline"`
DockerConfigId string `form:"docker_config_id" json:"docker_config_id"`
IsInternal string `form:"is_internal" json:"is_internal"`
ClassifyId int `form:"classify_id" json:"classify_id"`
DockerRepoName string `form:"docker_repo_name" json:"docker_repo_name"`
NameAliasLike string `form:"name_alias_like" json:"name_alias_like"`
DownloadStatus string `form:"download_status" json:"download_status"`
DriverType int `form:"driver_type" json:"driver_type" binding:"omitempty,oneof=1 2"` // 驱动库类型1驱动2三方应用
NoInIds string // 约定没有from的为 内置查询条件
ImageIds string // 内置条件
NoInImageIds string // 内置条件
}
type DeviceLibraryResponse struct {
Id string `json:"id"`
Name string `json:"name"`
//Alias string `json:"alias"`
Description string `json:"description"`
//Manufacturer string `json:"manufacturer"`
Protocol string `json:"protocol"`
Version string `json:"version"`
ContainerName string `json:"container_name"`
//ConfigFile string `json:"config_file"`
DockerConfigId string `json:"docker_config_id"`
DockerRepoName string `json:"docker_repo_name"`
OperateStatus string `json:"operate_status"`
IsInternal bool `json:"is_internal"`
Manual string `json:"manual"`
Icon string `json:"icon"`
ClassifyId int `json:"classify_id"`
Created int64 `json:"created"`
Language string `json:"language"`
SupportVersions []DeviceLibrarySupportVersionSimple `json:"support_versions"` // 用于前端展示可供下载/更新的版本号 key:value == 版本号:配置文件
}
func DeviceLibraryResponseFromModel(dl models.DeviceLibrary) DeviceLibraryResponse {
// 如果docker镜像id为空那么返回给前端的版本为 `-`
if dl.DockerImageId == "" {
dl.Version = "-"
}
//if dl.ConfigFile != "" {
// dl.ConfigFile = path.Base(dl.ConfigFile)
//}
return DeviceLibraryResponse{
Id: dl.Id,
Name: dl.Name,
Description: dl.Description,
Protocol: dl.Protocol,
Version: dl.Version,
ContainerName: dl.ContainerName,
//ConfigFile: dl.ConfigFile,
IsInternal: dl.IsInternal,
DockerConfigId: dl.DockerConfigId,
DockerRepoName: dl.DockerRepoName,
OperateStatus: dl.OperateStatus,
Icon: dl.Icon,
Manual: dl.Manual,
ClassifyId: dl.ClassifyId,
Created: dl.Created,
Language: dl.Language,
SupportVersions: DeviceLibrarySupportVersionSimpleFromModel(dl.SupportVersions),
}
}
type DeviceLibraryUpgradeRequest struct {
Id string `json:"id" binding:"required"`
Version string `json:"version" binding:"required"`
}
type DeviceLibraryUpgradeResponse struct {
Id string `json:"id"`
Version string `json:"version"`
OperateStatus string `json:"operate_status"`
}
func GetLibrarySimpleBaseConfig() string {
return `{"deviceServer": {},"deviceProtocols": {},"deviceDpAttrs": []}`
}
type UpdateDeviceLibrary struct {
Id string `json:"id" binding:"required"`
Name *string `json:"name"`
Description *string `json:"description"`
DockerConfigId *string `json:"docker_config_id"`
Protocol *string `json:"protocol"`
Language *string `json:"language"`
Manual *string `json:"manual"`
Icon *string `json:"icon"`
}
func ReplaceDeviceLibraryModelFieldsWithDTO(deviceLibrary *models.DeviceLibrary, patch UpdateDeviceLibrary) {
if patch.Name != nil {
deviceLibrary.Name = *patch.Name
}
if patch.DockerConfigId != nil {
deviceLibrary.DockerConfigId = *patch.DockerConfigId
}
if patch.Description != nil {
deviceLibrary.Description = *patch.Description
}
if patch.Protocol != nil {
deviceLibrary.Protocol = *patch.Protocol
}
if patch.Language != nil {
deviceLibrary.Language = *patch.Language
}
if patch.Manual != nil {
deviceLibrary.Manual = *patch.Manual
}
if patch.Icon != nil {
deviceLibrary.Icon = *patch.Icon
}
}