Folders: Export folder store implementation (#93897)
* Export folder store implementation * Rename folder store * Add folder store as a parameter to folder service * Add folder store to dash service implementation * Fix folder store comments
This commit is contained in:
@@ -22,19 +22,19 @@ import (
|
||||
|
||||
const DEFAULT_BATCH_SIZE = 999
|
||||
|
||||
type sqlStore struct {
|
||||
type FolderStoreImpl struct {
|
||||
db db.DB
|
||||
log log.Logger
|
||||
}
|
||||
|
||||
// sqlStore implements the store interface.
|
||||
var _ store = (*sqlStore)(nil)
|
||||
var _ folder.Store = (*FolderStoreImpl)(nil)
|
||||
|
||||
func ProvideStore(db db.DB) *sqlStore {
|
||||
return &sqlStore{db: db, log: log.New("folder-store")}
|
||||
func ProvideStore(db db.DB) *FolderStoreImpl {
|
||||
return &FolderStoreImpl{db: db, log: log.New("folder-store")}
|
||||
}
|
||||
|
||||
func (ss *sqlStore) Create(ctx context.Context, cmd folder.CreateFolderCommand) (*folder.Folder, error) {
|
||||
func (ss *FolderStoreImpl) Create(ctx context.Context, cmd folder.CreateFolderCommand) (*folder.Folder, error) {
|
||||
if cmd.UID == "" {
|
||||
return nil, folder.ErrBadRequest.Errorf("missing UID")
|
||||
}
|
||||
@@ -83,7 +83,7 @@ func (ss *sqlStore) Create(ctx context.Context, cmd folder.CreateFolderCommand)
|
||||
return foldr.WithURL(), err
|
||||
}
|
||||
|
||||
func (ss *sqlStore) Delete(ctx context.Context, UIDs []string, orgID int64) error {
|
||||
func (ss *FolderStoreImpl) Delete(ctx context.Context, UIDs []string, orgID int64) error {
|
||||
if len(UIDs) == 0 {
|
||||
return nil
|
||||
}
|
||||
@@ -103,7 +103,7 @@ func (ss *sqlStore) Delete(ctx context.Context, UIDs []string, orgID int64) erro
|
||||
})
|
||||
}
|
||||
|
||||
func (ss *sqlStore) Update(ctx context.Context, cmd folder.UpdateFolderCommand) (*folder.Folder, error) {
|
||||
func (ss *FolderStoreImpl) Update(ctx context.Context, cmd folder.UpdateFolderCommand) (*folder.Folder, error) {
|
||||
updated := time.Now()
|
||||
uid := cmd.UID
|
||||
|
||||
@@ -191,7 +191,7 @@ func (ss *sqlStore) Update(ctx context.Context, cmd folder.UpdateFolderCommand)
|
||||
// └── B/C
|
||||
//
|
||||
// The full path of C is "A/B\/C".
|
||||
func (ss *sqlStore) Get(ctx context.Context, q folder.GetFolderQuery) (*folder.Folder, error) {
|
||||
func (ss *FolderStoreImpl) Get(ctx context.Context, q folder.GetFolderQuery) (*folder.Folder, error) {
|
||||
foldr := &folder.Folder{}
|
||||
err := ss.db.WithDbSession(ctx, func(sess *db.Session) error {
|
||||
exists := false
|
||||
@@ -244,7 +244,7 @@ func (ss *sqlStore) Get(ctx context.Context, q folder.GetFolderQuery) (*folder.F
|
||||
return foldr.WithURL(), err
|
||||
}
|
||||
|
||||
func (ss *sqlStore) GetParents(ctx context.Context, q folder.GetParentsQuery) ([]*folder.Folder, error) {
|
||||
func (ss *FolderStoreImpl) GetParents(ctx context.Context, q folder.GetParentsQuery) ([]*folder.Folder, error) {
|
||||
if q.UID == "" {
|
||||
return []*folder.Folder{}, nil
|
||||
}
|
||||
@@ -295,7 +295,7 @@ func (ss *sqlStore) GetParents(ctx context.Context, q folder.GetParentsQuery) ([
|
||||
return util.Reverse(folders[1:]), nil
|
||||
}
|
||||
|
||||
func (ss *sqlStore) GetChildren(ctx context.Context, q folder.GetChildrenQuery) ([]*folder.Folder, error) {
|
||||
func (ss *FolderStoreImpl) GetChildren(ctx context.Context, q folder.GetChildrenQuery) ([]*folder.Folder, error) {
|
||||
var folders []*folder.Folder
|
||||
|
||||
err := ss.db.WithDbSession(ctx, func(sess *db.Session) error {
|
||||
@@ -353,7 +353,7 @@ func (ss *sqlStore) GetChildren(ctx context.Context, q folder.GetChildrenQuery)
|
||||
return folders, err
|
||||
}
|
||||
|
||||
func (ss *sqlStore) getParentsMySQL(ctx context.Context, q folder.GetParentsQuery) (folders []*folder.Folder, err error) {
|
||||
func (ss *FolderStoreImpl) getParentsMySQL(ctx context.Context, q folder.GetParentsQuery) (folders []*folder.Folder, err error) {
|
||||
err = ss.db.WithDbSession(ctx, func(sess *db.Session) error {
|
||||
uid := ""
|
||||
// covered by UQE_folder_org_id_uid
|
||||
@@ -387,7 +387,7 @@ func (ss *sqlStore) getParentsMySQL(ctx context.Context, q folder.GetParentsQuer
|
||||
}
|
||||
|
||||
// TODO use a single query to get the height of a folder
|
||||
func (ss *sqlStore) GetHeight(ctx context.Context, foldrUID string, orgID int64, parentUID *string) (int, error) {
|
||||
func (ss *FolderStoreImpl) GetHeight(ctx context.Context, foldrUID string, orgID int64, parentUID *string) (int, error) {
|
||||
height := -1
|
||||
queue := []string{foldrUID}
|
||||
for len(queue) > 0 && height <= folder.MaxNestedFolderDepth {
|
||||
@@ -445,7 +445,7 @@ func (ss *sqlStore) GetHeight(ctx context.Context, foldrUID string, orgID int64,
|
||||
// The full path UIDs of C is "uid1/uid2/uid3".
|
||||
// The full path UIDs of B is "uid1/uid2".
|
||||
// The full path UIDs of A is "uid1".
|
||||
func (ss *sqlStore) GetFolders(ctx context.Context, q getFoldersQuery) ([]*folder.Folder, error) {
|
||||
func (ss *FolderStoreImpl) GetFolders(ctx context.Context, q folder.GetFoldersFromStoreQuery) ([]*folder.Folder, error) {
|
||||
if q.BatchSize == 0 {
|
||||
q.BatchSize = DEFAULT_BATCH_SIZE
|
||||
}
|
||||
@@ -467,7 +467,7 @@ func (ss *sqlStore) GetFolders(ctx context.Context, q getFoldersQuery) ([]*folde
|
||||
}
|
||||
s.WriteString(` FROM folder f0`)
|
||||
// join the same table multiple times to compute the full path of a folder
|
||||
if q.WithFullpath || q.WithFullpathUIDs || len(q.ancestorUIDs) > 0 {
|
||||
if q.WithFullpath || q.WithFullpathUIDs || len(q.AncestorUIDs) > 0 {
|
||||
s.WriteString(getFullpathJoinsSQL())
|
||||
}
|
||||
// covered by UQE_folder_org_id_uid
|
||||
@@ -489,7 +489,7 @@ func (ss *sqlStore) GetFolders(ctx context.Context, q getFoldersQuery) ([]*folde
|
||||
args = append(args, accesscontrol.K6FolderUID, accesscontrol.K6FolderUID)
|
||||
}
|
||||
|
||||
if len(q.ancestorUIDs) == 0 {
|
||||
if len(q.AncestorUIDs) == 0 {
|
||||
if q.OrderByTitle {
|
||||
s.WriteString(` ORDER BY f0.title ASC`)
|
||||
}
|
||||
@@ -503,8 +503,8 @@ func (ss *sqlStore) GetFolders(ctx context.Context, q getFoldersQuery) ([]*folde
|
||||
}
|
||||
|
||||
// filter out folders if they are not in the subtree of the given ancestor folders
|
||||
if err := batch(len(q.ancestorUIDs), int(q.BatchSize), func(start2, end2 int) error {
|
||||
s2, args2 := getAncestorsSQL(ss.db.GetDialect(), q.ancestorUIDs, start2, end2, s.String(), args)
|
||||
if err := batch(len(q.AncestorUIDs), int(q.BatchSize), func(start2, end2 int) error {
|
||||
s2, args2 := getAncestorsSQL(ss.db.GetDialect(), q.AncestorUIDs, start2, end2, s.String(), args)
|
||||
if q.OrderByTitle {
|
||||
s2 += " ORDER BY f0.title ASC"
|
||||
}
|
||||
@@ -533,7 +533,7 @@ func (ss *sqlStore) GetFolders(ctx context.Context, q getFoldersQuery) ([]*folde
|
||||
return folders, nil
|
||||
}
|
||||
|
||||
func (ss *sqlStore) GetDescendants(ctx context.Context, orgID int64, ancestor_uid string) ([]*folder.Folder, error) {
|
||||
func (ss *FolderStoreImpl) GetDescendants(ctx context.Context, orgID int64, ancestor_uid string) ([]*folder.Folder, error) {
|
||||
var folders []*folder.Folder
|
||||
|
||||
recursiveQueriesAreSupported, err := ss.db.RecursiveQueriesAreSupported()
|
||||
|
||||
Reference in New Issue
Block a user