iot_server/internal/dtos/devicelibrary.go

206 lines
7.1 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}
}