|
|
package model |
|
|
|
|
|
import ( |
|
|
"database/sql/driver" |
|
|
"encoding/json" |
|
|
|
|
|
"github.com/QuantumNous/new-api/common" |
|
|
|
|
|
"gorm.io/gorm" |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type JSONValue json.RawMessage |
|
|
|
|
|
|
|
|
func (j JSONValue) Value() (driver.Value, error) { |
|
|
if j == nil { |
|
|
return nil, nil |
|
|
} |
|
|
return []byte(j), nil |
|
|
} |
|
|
|
|
|
|
|
|
func (j *JSONValue) Scan(value interface{}) error { |
|
|
switch v := value.(type) { |
|
|
case nil: |
|
|
*j = nil |
|
|
return nil |
|
|
case []byte: |
|
|
|
|
|
b := make([]byte, len(v)) |
|
|
copy(b, v) |
|
|
*j = JSONValue(b) |
|
|
return nil |
|
|
case string: |
|
|
*j = JSONValue([]byte(v)) |
|
|
return nil |
|
|
default: |
|
|
|
|
|
b, err := json.Marshal(v) |
|
|
if err != nil { |
|
|
return err |
|
|
} |
|
|
*j = JSONValue(b) |
|
|
return nil |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func (j JSONValue) MarshalJSON() ([]byte, error) { |
|
|
if j == nil { |
|
|
return []byte("null"), nil |
|
|
} |
|
|
return j, nil |
|
|
} |
|
|
|
|
|
|
|
|
func (j *JSONValue) UnmarshalJSON(data []byte) error { |
|
|
if data == nil { |
|
|
*j = nil |
|
|
return nil |
|
|
} |
|
|
b := make([]byte, len(data)) |
|
|
copy(b, data) |
|
|
*j = JSONValue(b) |
|
|
return nil |
|
|
} |
|
|
|
|
|
type PrefillGroup struct { |
|
|
Id int `json:"id"` |
|
|
Name string `json:"name" gorm:"size:64;not null;uniqueIndex:uk_prefill_name,where:deleted_at IS NULL"` |
|
|
Type string `json:"type" gorm:"size:32;index;not null"` |
|
|
Items JSONValue `json:"items" gorm:"type:json"` |
|
|
Description string `json:"description,omitempty" gorm:"type:varchar(255)"` |
|
|
CreatedTime int64 `json:"created_time" gorm:"bigint"` |
|
|
UpdatedTime int64 `json:"updated_time" gorm:"bigint"` |
|
|
DeletedAt gorm.DeletedAt `json:"-" gorm:"index"` |
|
|
} |
|
|
|
|
|
|
|
|
func (g *PrefillGroup) Insert() error { |
|
|
now := common.GetTimestamp() |
|
|
g.CreatedTime = now |
|
|
g.UpdatedTime = now |
|
|
return DB.Create(g).Error |
|
|
} |
|
|
|
|
|
|
|
|
func IsPrefillGroupNameDuplicated(id int, name string) (bool, error) { |
|
|
if name == "" { |
|
|
return false, nil |
|
|
} |
|
|
var cnt int64 |
|
|
err := DB.Model(&PrefillGroup{}).Where("name = ? AND id <> ?", name, id).Count(&cnt).Error |
|
|
return cnt > 0, err |
|
|
} |
|
|
|
|
|
|
|
|
func (g *PrefillGroup) Update() error { |
|
|
g.UpdatedTime = common.GetTimestamp() |
|
|
return DB.Save(g).Error |
|
|
} |
|
|
|
|
|
|
|
|
func DeletePrefillGroupByID(id int) error { |
|
|
return DB.Delete(&PrefillGroup{}, id).Error |
|
|
} |
|
|
|
|
|
|
|
|
func GetAllPrefillGroups(groupType string) ([]*PrefillGroup, error) { |
|
|
var groups []*PrefillGroup |
|
|
query := DB.Model(&PrefillGroup{}) |
|
|
if groupType != "" { |
|
|
query = query.Where("type = ?", groupType) |
|
|
} |
|
|
if err := query.Order("updated_time DESC").Find(&groups).Error; err != nil { |
|
|
return nil, err |
|
|
} |
|
|
return groups, nil |
|
|
} |
|
|
|