| 
									
										
										
										
											2022-10-26 23:52:01 +08:00
										 |  |  | package folderimpl | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"context" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/infra/db" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/infra/log" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/services/featuremgmt" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/services/folder" | 
					
						
							|  |  |  | 	"github.com/grafana/grafana/pkg/setting" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | type sqlStore struct { | 
					
						
							|  |  |  | 	db  db.DB | 
					
						
							|  |  |  | 	log log.Logger | 
					
						
							|  |  |  | 	cfg *setting.Cfg | 
					
						
							|  |  |  | 	fm  featuremgmt.FeatureManager | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // sqlStore implements the store interface.
 | 
					
						
							|  |  |  | var _ store = (*sqlStore)(nil) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func ProvideStore(db db.DB, cfg *setting.Cfg, features featuremgmt.FeatureManager) *sqlStore { | 
					
						
							|  |  |  | 	return &sqlStore{db: db, log: log.New("folder-store"), cfg: cfg, fm: features} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-28 21:35:49 +08:00
										 |  |  | func (ss *sqlStore) Create(ctx context.Context, cmd *folder.CreateFolderCommand) (*folder.Folder, error) { | 
					
						
							| 
									
										
										
										
											2022-10-26 23:52:01 +08:00
										 |  |  | 	panic("not implemented") | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-28 21:35:49 +08:00
										 |  |  | func (ss *sqlStore) Delete(ctx context.Context, uid string, orgID int64) error { | 
					
						
							|  |  |  | 	return ss.db.WithDbSession(ctx, func(sess *db.Session) error { | 
					
						
							|  |  |  | 		_, err := sess.Exec("DELETE FROM folder WHERE folder_uid=? AND org_id=?", uid, orgID) | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2022-10-26 23:52:01 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-28 21:35:49 +08:00
										 |  |  | func (ss *sqlStore) Update(ctx context.Context, cmd *folder.UpdateFolderCommand) (*folder.Folder, error) { | 
					
						
							|  |  |  | 	err := ss.db.WithDbSession(ctx, func(sess *db.Session) error { | 
					
						
							|  |  |  | 		_, err := sess.ID(cmd.Folder.ID).AllCols().Update(cmd.Folder) | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2022-10-26 23:52:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-28 21:35:49 +08:00
										 |  |  | 	return cmd.Folder, err | 
					
						
							| 
									
										
										
										
											2022-10-26 23:52:01 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-28 21:35:49 +08:00
										 |  |  | func (ss *sqlStore) Get(ctx context.Context, cmd *folder.GetFolderQuery) (*folder.Folder, error) { | 
					
						
							|  |  |  | 	var foldr *folder.Folder | 
					
						
							|  |  |  | 	err := ss.db.WithDbSession(ctx, func(sess *db.Session) error { | 
					
						
							|  |  |  | 		exists, err := sess.Where("uid=? OR id=? OR title=?", cmd.UID, cmd.ID, cmd.Title).Get(foldr) | 
					
						
							|  |  |  | 		if err != nil { | 
					
						
							|  |  |  | 			return err | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if !exists { | 
					
						
							|  |  |  | 			return folder.ErrFolderNotFound.Errorf("folder not found") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return nil | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 	return foldr, err | 
					
						
							| 
									
										
										
										
											2022-10-26 23:52:01 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-28 21:35:49 +08:00
										 |  |  | func (ss *sqlStore) GetParents(ctx context.Context, cmd *folder.GetParentsQuery) ([]*folder.Folder, error) { | 
					
						
							| 
									
										
										
										
											2022-10-26 23:52:01 +08:00
										 |  |  | 	panic("not implemented") | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-28 21:35:49 +08:00
										 |  |  | func (ss *sqlStore) GetChildren(ctx context.Context, cmd *folder.GetTreeQuery) ([]*folder.Folder, error) { | 
					
						
							|  |  |  | 	var folders []*folder.Folder | 
					
						
							|  |  |  | 	err := ss.db.WithDbSession(ctx, func(sess *db.Session) error { | 
					
						
							|  |  |  | 		err := sess.Where("parent_uid=? AND org_id=?", cmd.UID, cmd.OrgID).Find(folders) | 
					
						
							|  |  |  | 		return err | 
					
						
							|  |  |  | 	}) | 
					
						
							|  |  |  | 	return folders, err | 
					
						
							| 
									
										
										
										
											2022-10-26 23:52:01 +08:00
										 |  |  | } |