iot_server/internal/models/ability.go

192 lines
5.6 KiB
Go

package models
import (
"database/sql/driver"
"encoding/json"
"github.com/winc-link/hummingbird/internal/pkg/constants"
)
// TypeSpec 物模型的属性、事件、动作的基础信息字段
type TypeSpec struct {
Type constants.SpecsType `json:"type,omitempty"`
Specs string `json:"specs,omitempty"`
}
type TypeSpecIntOrFloat struct {
Min string `json:"min,omitempty"`
Max string `json:"max,omitempty"`
Step string `json:"step,omitempty"`
Unit string `json:"unit,omitempty"`
UnitName string `json:"unitName,omitempty"`
}
func (t *TypeSpecIntOrFloat) TransformTostring() string {
b, _ := json.Marshal(t)
return string(b)
}
type TypeSpecText struct {
Length string `json:"length,omitempty"`
}
func (t *TypeSpecText) TransformTostring() string {
b, _ := json.Marshal(t)
return string(b)
}
type TypeSpecBool map[string]string
func (t *TypeSpecBool) TransformTostring() string {
b, _ := json.Marshal(t)
return string(b)
}
type TypeSpecArray struct {
Size string `json:"size,omitempty"`
Item Item `json:"item,omitempty"`
}
func (t *TypeSpecArray) TransformTostring() string {
b, _ := json.Marshal(t)
return string(b)
}
type TypeSpecEnum map[string]string
func (t *TypeSpecEnum) TransformTostring() string {
b, _ := json.Marshal(t)
return string(b)
}
type TypeSpecStruct struct {
Code string `json:"code"`
Name string `json:"name"`
DataType TypeSpec `json:"data_type"`
}
func (t *TypeSpecStruct) TransformTostring() string {
b, _ := json.Marshal(t)
return string(b)
}
type TypeSpecDate struct {
}
func (t *TypeSpecDate) TransformTostring() string {
b, _ := json.Marshal(t)
return string(b)
}
type Item struct {
Type string `json:"type,omitempty"`
}
func (c Item) Value() (driver.Value, error) {
return GormValueWrap(c)
}
func (c *Item) Scan(value interface{}) error {
return GormScanWrap(value, c)
}
type Properties struct {
Id string `json:"id" gorm:"id;primaryKey;not null;type:string;size:255;comment:主键"`
ProductId string `json:"product_id" gorm:"type:string;size:255;comment:产品ID"`
Name string `json:"name" gorm:"type:string;size:255;comment:名字"`
Code string `json:"code" gorm:"type:string;size:255;comment:标识符"`
AccessMode string `json:"access_mode" gorm:"type:string;size:50;comment:读写模型"`
Require bool `json:"require" gorm:"comment:是否必须"`
TypeSpec TypeSpec `json:"type_spec" gorm:"type:text;comment:属性物模型详情"`
Description string `json:"description" gorm:"type:text;comment:描述"`
Tag string `json:"tag" gorm:"type:string;size:50;comment:标签"`
System bool `json:"system" gorm:"comment:系统内置"`
Timestamps
}
func (c TypeSpec) Value() (driver.Value, error) {
return GormValueWrap(c)
}
func (c *TypeSpec) Scan(value interface{}) error {
return GormScanWrap(value, c)
}
func (p *Properties) TableName() string {
return "properties"
}
func (p *Properties) Get() interface{} {
return *p
}
type Actions struct {
Id string `json:"id" gorm:"id;primaryKey;not null;type:string;size:255;comment:主键"`
ProductId string `json:"product_id" gorm:"type:string;size:255;comment:产品ID"`
Code string `json:"code" gorm:"type:string;size:255;comment:标识符"`
Name string `json:"name" gorm:"type:string;size:255;comment:名字"`
Description string `json:"description" gorm:"type:text;comment:描述"`
Require bool `json:"require" gorm:"comment:是否必须"`
CallType constants.CallType `json:"call_type" gorm:"type:string;size:50;comment:调用方式"`
InputParams InPutParams `json:"input_params" gorm:"type:text;comment:输入参数"` // 输入参数
OutputParams OutPutParams `json:"output_params" gorm:"type:text;comment:输入参数"` // 输出参数
Tag string `json:"tag" gorm:"type:string;size:50;comment:标签"`
System bool `json:"system" gorm:"comment:系统内置"`
Timestamps
}
type InPutParams []InputOutput
type InputOutput struct {
Code string `json:"code"`
Name string `json:"name"`
TypeSpec TypeSpec `json:"type_spec"`
}
func (c InPutParams) Value() (driver.Value, error) {
return GormValueWrap(c)
}
func (c *InPutParams) Scan(value interface{}) error {
return GormScanWrap(value, c)
}
type OutPutParams []InputOutput
func (c OutPutParams) Value() (driver.Value, error) {
return GormValueWrap(c)
}
func (c *OutPutParams) Scan(value interface{}) error {
return GormScanWrap(value, c)
}
func (table *Actions) TableName() string {
return "actions"
}
func (table *Actions) Get() interface{} {
return *table
}
type Events struct {
Id string `json:"id" gorm:"id;primaryKey;not null;type:string;size:255;comment:主键"`
ProductId string `json:"product_id" gorm:"type:string;size:255;comment:产品ID"`
EventType string `json:"event_type" gorm:"type:string;size:255;comment:事件类型"`
Code string `json:"code" gorm:"type:string;size:255;comment:标识符"`
Name string `json:"name" gorm:"type:string;size:255;comment:名字"`
Description string `json:"description" gorm:"type:text;comment:描述"`
Require bool `json:"require" gorm:"comment:是否必须"`
OutputParams OutPutParams `json:"output_params" gorm:"type:text;comment:输入参数"`
Tag string `json:"tag" gorm:"type:string;size:50;comment:标签"`
System bool `json:"system" gorm:"comment:系统内置"`
Timestamps
}
func (table *Events) TableName() string {
return "events"
}
func (table *Events) Get() interface{} {
return *table
}