save insights explorer to database
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
package models
|
||||
|
||||
import "encoding/json"
|
||||
|
||||
// InsightsExplorer represents a saved insights explorer configuration
|
||||
type InsightsExplorer struct {
|
||||
ExplorerId int64 `xorm:"PK"`
|
||||
Uid int64 `xorm:"INDEX(IDX_insights_explorer_uid_deleted_order) NOT NULL"`
|
||||
Deleted bool `xorm:"INDEX(IDX_insights_explorer_uid_deleted_order) NOT NULL"`
|
||||
Name string `xorm:"VARCHAR(64) NOT NULL"`
|
||||
DisplayOrder int32 `xorm:"INDEX(IDX_insights_explorer_uid_deleted_order) NOT NULL"`
|
||||
Data string `xorm:"MEDIUMBLOB"`
|
||||
Hidden bool `xorm:"NOT NULL"`
|
||||
CreatedUnixTime int64
|
||||
UpdatedUnixTime int64
|
||||
DeletedUnixTime int64
|
||||
}
|
||||
|
||||
// InsightsExplorerCreateRequest represents all parameters of insights explorer creation request
|
||||
type InsightsExplorerCreateRequest struct {
|
||||
Name string `json:"name" binding:"required,notBlank,max=64"`
|
||||
Data map[string]any `json:"data" binding:"required"`
|
||||
ClientSessionId string `json:"clientSessionId"`
|
||||
}
|
||||
|
||||
// InsightsExplorerModifyRequest represents all parameters of insights explorer modification request
|
||||
type InsightsExplorerModifyRequest struct {
|
||||
Id int64 `json:"id,string" binding:"required,min=0"`
|
||||
Name string `json:"name" binding:"required,notBlank,max=64"`
|
||||
Data map[string]any `json:"data" binding:"required"`
|
||||
Hidden bool `json:"hidden"`
|
||||
ClientSessionId string `json:"clientSessionId"`
|
||||
}
|
||||
|
||||
// InsightsExplorerGetRequest represents all parameters of insights explorer getting request
|
||||
type InsightsExplorerGetRequest struct {
|
||||
Id int64 `form:"id,string" binding:"required,min=1"`
|
||||
}
|
||||
|
||||
// InsightsExplorerHideRequest represents all parameters of insights explorer hiding request
|
||||
type InsightsExplorerHideRequest struct {
|
||||
Id int64 `json:"id,string" binding:"required,min=1"`
|
||||
Hidden bool `json:"hidden"`
|
||||
}
|
||||
|
||||
// InsightsExplorerMoveRequest represents all parameters of insights explorer moving request
|
||||
type InsightsExplorerMoveRequest struct {
|
||||
NewDisplayOrders []*InsightsExplorerNewDisplayOrderRequest `json:"newDisplayOrders" binding:"required,min=1"`
|
||||
}
|
||||
|
||||
// InsightsExplorerNewDisplayOrderRequest represents a data pair of id and display order
|
||||
type InsightsExplorerNewDisplayOrderRequest struct {
|
||||
Id int64 `json:"id,string" binding:"required,min=1"`
|
||||
DisplayOrder int32 `json:"displayOrder"`
|
||||
}
|
||||
|
||||
// InsightsExplorerDeleteRequest represents all parameters of insights explorer deleting request
|
||||
type InsightsExplorerDeleteRequest struct {
|
||||
Id int64 `json:"id,string" binding:"required,min=1"`
|
||||
}
|
||||
|
||||
// InsightsExplorerInfoResponse represents a view-object of insights explorer info
|
||||
type InsightsExplorerInfoResponse struct {
|
||||
Id int64 `json:"id,string"`
|
||||
Name string `json:"name"`
|
||||
DisplayOrder int32 `json:"displayOrder"`
|
||||
Hidden bool `json:"hidden"`
|
||||
Data map[string]any `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
// ToInsightsExplorerInfoResponse returns a view-object according to database model
|
||||
func (a *InsightsExplorer) ToInsightsExplorerInfoResponse() (*InsightsExplorerInfoResponse, error) {
|
||||
var data map[string]any = nil
|
||||
|
||||
if a.Data != "" {
|
||||
err := json.Unmarshal([]byte(a.Data), &data)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return &InsightsExplorerInfoResponse{
|
||||
Id: a.ExplorerId,
|
||||
Name: a.Name,
|
||||
DisplayOrder: a.DisplayOrder,
|
||||
Hidden: a.Hidden,
|
||||
Data: data,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// InsightsExplorerInfoResponseSlice represents the slice data structure of InsightsExplorerInfoResponse
|
||||
type InsightsExplorerInfoResponseSlice []*InsightsExplorerInfoResponse
|
||||
|
||||
// Len returns the count of items
|
||||
func (s InsightsExplorerInfoResponseSlice) Len() int {
|
||||
return len(s)
|
||||
}
|
||||
|
||||
// Swap swaps two items
|
||||
func (s InsightsExplorerInfoResponseSlice) Swap(i, j int) {
|
||||
s[i], s[j] = s[j], s[i]
|
||||
}
|
||||
|
||||
// Less reports whether the first item is less than the second one
|
||||
func (s InsightsExplorerInfoResponseSlice) Less(i, j int) bool {
|
||||
return s[i].DisplayOrder < s[j].DisplayOrder
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestInsightsExplorerInfoResponseSliceLess(t *testing.T) {
|
||||
var insightsExplorerRespSlice InsightsExplorerInfoResponseSlice
|
||||
insightsExplorerRespSlice = append(insightsExplorerRespSlice, &InsightsExplorerInfoResponse{
|
||||
Id: 1,
|
||||
DisplayOrder: 3,
|
||||
})
|
||||
insightsExplorerRespSlice = append(insightsExplorerRespSlice, &InsightsExplorerInfoResponse{
|
||||
Id: 2,
|
||||
DisplayOrder: 1,
|
||||
})
|
||||
insightsExplorerRespSlice = append(insightsExplorerRespSlice, &InsightsExplorerInfoResponse{
|
||||
Id: 3,
|
||||
DisplayOrder: 2,
|
||||
})
|
||||
|
||||
sort.Sort(insightsExplorerRespSlice)
|
||||
|
||||
assert.Equal(t, int64(2), insightsExplorerRespSlice[0].Id)
|
||||
assert.Equal(t, int64(3), insightsExplorerRespSlice[1].Id)
|
||||
assert.Equal(t, int64(1), insightsExplorerRespSlice[2].Id)
|
||||
}
|
||||
Reference in New Issue
Block a user