package orgimpl import ( "context" "github.com/grafana/grafana/pkg/events" "github.com/grafana/grafana/pkg/services/org" "github.com/grafana/grafana/pkg/services/sqlstore" "github.com/grafana/grafana/pkg/services/sqlstore/db" "github.com/grafana/grafana/pkg/services/sqlstore/migrator" ) const MainOrgName = "Main Org." type store interface { Get(context.Context, int64) (*org.Org, error) Insert(context.Context, *org.Org) (int64, error) InsertOrgUser(context.Context, *org.OrgUser) (int64, error) DeleteUserFromAll(context.Context, int64) error } type sqlStore struct { db db.DB dialect migrator.Dialect } func (ss *sqlStore) Get(ctx context.Context, orgID int64) (*org.Org, error) { var orga org.Org err := ss.db.WithDbSession(ctx, func(sess *sqlstore.DBSession) error { has, err := sess.Where("id=?", orgID).Get(&orga) if err != nil { return err } if !has { return org.ErrOrgNotFound } return nil }) if err != nil { return nil, err } return &orga, nil } func (ss *sqlStore) Insert(ctx context.Context, org *org.Org) (int64, error) { var orgID int64 var err error err = ss.db.WithDbSession(ctx, func(sess *sqlstore.DBSession) error { if orgID, err = sess.InsertOne(org); err != nil { return err } if org.ID != 0 { // it sets the setval in the sequence if err := ss.dialect.PostInsertId("org", sess.Session); err != nil { return err } } sess.PublishAfterCommit(&events.OrgCreated{ Timestamp: org.Created, Id: org.ID, Name: org.Name, }) return nil }) if err != nil { return 0, err } return orgID, nil } func (ss *sqlStore) InsertOrgUser(ctx context.Context, cmd *org.OrgUser) (int64, error) { var orgID int64 var err error err = ss.db.WithDbSession(ctx, func(sess *sqlstore.DBSession) error { if orgID, err = sess.Insert(cmd); err != nil { return err } return nil }) if err != nil { return 0, err } return orgID, nil } func (ss *sqlStore) DeleteUserFromAll(ctx context.Context, userID int64) error { return ss.db.WithDbSession(ctx, func(sess *sqlstore.DBSession) error { if _, err := sess.Exec("DELETE FROM org_user WHERE user_id = ?", userID); err != nil { return err } return nil }) }