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