package orgimpl import ( "context" "fmt" "time" "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/models" "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/setting" "github.com/grafana/grafana/pkg/util" ) type Service struct { store store cfg *setting.Cfg log log.Logger // TODO remove sqlstore sqlStore *sqlstore.SQLStore } func ProvideService(db db.DB, cfg *setting.Cfg) org.Service { return &Service{ store: &sqlStore{ db: db, dialect: db.GetDialect(), }, cfg: cfg, log: log.New("org service"), } } func (s *Service) GetIDForNewUser(ctx context.Context, cmd org.GetOrgIDForNewUserCommand) (int64, error) { var orga org.Org if cmd.SkipOrgSetup { return -1, nil } if setting.AutoAssignOrg && cmd.OrgID != 0 { _, err := s.store.Get(ctx, cmd.OrgID) if err != nil { return -1, err } return cmd.OrgID, nil } orgName := cmd.OrgName if len(orgName) == 0 { orgName = util.StringsFallback2(cmd.Email, cmd.Login) } if setting.AutoAssignOrg { orga, err := s.store.Get(ctx, int64(s.cfg.AutoAssignOrgId)) if err != nil { return 0, err } if orga.ID != 0 { return orga.ID, nil } if setting.AutoAssignOrgId != 1 { s.log.Error("Could not create user: organization ID does not exist", "orgID", setting.AutoAssignOrgId) return 0, fmt.Errorf("could not create user: organization ID %d does not exist", setting.AutoAssignOrgId) } orga.Name = MainOrgName orga.ID = int64(setting.AutoAssignOrgId) } else { orga.Name = orgName } orga.Created = time.Now() orga.Updated = time.Now() return s.store.Insert(ctx, &orga) } func (s *Service) InsertOrgUser(ctx context.Context, orguser *org.OrgUser) (int64, error) { return s.store.InsertOrgUser(ctx, orguser) } func (s *Service) DeleteUserFromAll(ctx context.Context, userID int64) error { return s.store.DeleteUserFromAll(ctx, userID) } // TODO: remove wrapper around sqlstore func (s *Service) GetUserOrgList(ctx context.Context, query *org.GetUserOrgListQuery) ([]*org.UserOrgDTO, error) { q := &models.GetUserOrgListQuery{ UserId: query.UserID, } err := s.sqlStore.GetUserOrgList(ctx, q) if err != nil { return nil, err } var result []*org.UserOrgDTO for _, orga := range q.Result { result = append(result, &org.UserOrgDTO{ OrgID: orga.OrgId, Name: orga.Name, Role: orga.Role, }) } return result, nil } func (s *Service) UpdateOrg(ctx context.Context, cmd *org.UpdateOrgCommand) error { return s.store.Update(ctx, cmd) }