126 lines
3.4 KiB
Go
126 lines
3.4 KiB
Go
package fake
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
|
|
"github.com/grafana/grafana/pkg/apimachinery/identity"
|
|
"github.com/grafana/grafana/pkg/services/libraryelements"
|
|
"github.com/grafana/grafana/pkg/services/libraryelements/model"
|
|
"github.com/grafana/grafana/pkg/util"
|
|
)
|
|
|
|
// LibraryElementService is a fake with only the required methods implemented while the others are stubbed.
|
|
type LibraryElementService struct {
|
|
elements map[string]model.LibraryElementDTO
|
|
mx sync.RWMutex
|
|
idCounter int64
|
|
}
|
|
|
|
var _ libraryelements.Service = (*LibraryElementService)(nil)
|
|
|
|
func (l *LibraryElementService) CreateElement(c context.Context, signedInUser identity.Requester, cmd model.CreateLibraryElementCommand) (model.LibraryElementDTO, error) {
|
|
l.mx.Lock()
|
|
defer l.mx.Unlock()
|
|
|
|
if len(l.elements) == 0 {
|
|
l.elements = make(map[string]model.LibraryElementDTO, 0)
|
|
}
|
|
|
|
var orgID int64 = 1
|
|
if signedInOrgID := signedInUser.GetOrgID(); signedInOrgID != 0 {
|
|
orgID = signedInOrgID
|
|
}
|
|
|
|
var folderUID string
|
|
if cmd.FolderUID != nil {
|
|
folderUID = *cmd.FolderUID
|
|
}
|
|
|
|
createUID := cmd.UID
|
|
if len(createUID) == 0 {
|
|
createUID = util.GenerateShortUID()
|
|
}
|
|
|
|
if _, exists := l.elements[createUID]; exists {
|
|
return model.LibraryElementDTO{}, model.ErrLibraryElementAlreadyExists
|
|
}
|
|
|
|
l.idCounter++
|
|
|
|
dto := model.LibraryElementDTO{
|
|
ID: l.idCounter,
|
|
OrgID: orgID,
|
|
FolderID: cmd.FolderID, //nolint: staticcheck
|
|
FolderUID: folderUID,
|
|
UID: createUID,
|
|
Name: cmd.Name,
|
|
Kind: cmd.Kind,
|
|
Type: "text",
|
|
Description: "A description",
|
|
Model: cmd.Model,
|
|
Version: 1,
|
|
Meta: model.LibraryElementDTOMeta{},
|
|
}
|
|
|
|
l.elements[createUID] = dto
|
|
|
|
return dto, nil
|
|
}
|
|
|
|
func (l *LibraryElementService) GetElement(c context.Context, signedInUser identity.Requester, cmd model.GetLibraryElementCommand) (model.LibraryElementDTO, error) {
|
|
l.mx.RLock()
|
|
defer l.mx.RUnlock()
|
|
|
|
libraryElement, exists := l.elements[cmd.UID]
|
|
if !exists {
|
|
return model.LibraryElementDTO{}, model.ErrLibraryElementNotFound
|
|
}
|
|
|
|
return libraryElement, nil
|
|
}
|
|
|
|
func (l *LibraryElementService) GetElementsForDashboard(c context.Context, dashboardID int64) (map[string]model.LibraryElementDTO, error) {
|
|
return map[string]model.LibraryElementDTO{}, nil
|
|
}
|
|
|
|
func (l *LibraryElementService) ConnectElementsToDashboard(c context.Context, signedInUser identity.Requester, elementUIDs []string, dashboardID int64) error {
|
|
return nil
|
|
}
|
|
|
|
func (l *LibraryElementService) DisconnectElementsFromDashboard(c context.Context, dashboardID int64) error {
|
|
return nil
|
|
}
|
|
|
|
func (l *LibraryElementService) DeleteLibraryElementsInFolder(c context.Context, signedInUser identity.Requester, folderUID string) error {
|
|
return nil
|
|
}
|
|
|
|
func (l *LibraryElementService) GetAllElements(c context.Context, signedInUser identity.Requester, query model.SearchLibraryElementsQuery) (model.LibraryElementSearchResult, error) {
|
|
elements := make([]model.LibraryElementDTO, 0, len(l.elements))
|
|
|
|
var orgID int64 = 1
|
|
if signedInOrgID := signedInUser.GetOrgID(); signedInOrgID != 0 {
|
|
orgID = signedInOrgID
|
|
}
|
|
|
|
l.mx.RLock()
|
|
defer l.mx.RUnlock()
|
|
|
|
for _, element := range l.elements {
|
|
if element.OrgID != orgID {
|
|
continue
|
|
}
|
|
|
|
elements = append(elements, element)
|
|
}
|
|
|
|
// For this fake ignore pagination to make it simpler.
|
|
return model.LibraryElementSearchResult{
|
|
TotalCount: int64(len(elements)),
|
|
Elements: elements,
|
|
Page: 1,
|
|
PerPage: len(elements),
|
|
}, nil
|
|
}
|