Teams: Allow Services to register deletes (#76325)

* add team RegisterDelete

* fix-docs
pull/76308/head
Jo 2 years ago committed by GitHub
parent 72a1de855c
commit 79b2974215
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      docs/sources/developers/http_api/team_sync.md
  2. 1
      pkg/services/team/team.go
  3. 13
      pkg/services/team/teamimpl/store.go
  4. 6
      pkg/services/team/teamimpl/team.go
  5. 3
      pkg/services/team/teamtest/team.go

@ -113,7 +113,7 @@ Status Codes:
## Remove External Group ## Remove External Group
`DELETE /api/teams/:teamId/groups/:groupId` `DELETE /api/teams/:teamId/groups?groupId=external-group-id`
**Required permissions** **Required permissions**
@ -126,7 +126,7 @@ See note in the [introduction]({{< ref "#external-group-synchronization-api" >}}
**Example Request**: **Example Request**:
```http ```http
DELETE /api/teams/1/groups/cn=editors,ou=groups,dc=grafana,dc=org HTTP/1.1 DELETE /api/teams/1/groups?groupId=cn%3Deditors%2Cou%3Dgroups%2Cdc%3Dgrafana%2Cdc%3Dorg HTTP/1.1
Accept: application/json Accept: application/json
Content-Type: application/json Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4= Authorization: Basic YWRtaW46YWRtaW4=

@ -20,4 +20,5 @@ type Service interface {
RemoveUsersMemberships(tx context.Context, userID int64) error RemoveUsersMemberships(tx context.Context, userID int64) error
GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool) ([]*TeamMemberDTO, error) GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool) ([]*TeamMemberDTO, error)
GetTeamMembers(ctx context.Context, query *GetTeamMembersQuery) ([]*TeamMemberDTO, error) GetTeamMembers(ctx context.Context, query *GetTeamMembersQuery) ([]*TeamMemberDTO, error)
RegisterDelete(query string)
} }

@ -30,11 +30,13 @@ type store interface {
RemoveMember(ctx context.Context, cmd *team.RemoveTeamMemberCommand) error RemoveMember(ctx context.Context, cmd *team.RemoveTeamMemberCommand) error
GetMemberships(ctx context.Context, orgID, userID int64, external bool) ([]*team.TeamMemberDTO, error) GetMemberships(ctx context.Context, orgID, userID int64, external bool) ([]*team.TeamMemberDTO, error)
GetMembers(ctx context.Context, query *team.GetTeamMembersQuery) ([]*team.TeamMemberDTO, error) GetMembers(ctx context.Context, query *team.GetTeamMembersQuery) ([]*team.TeamMemberDTO, error)
RegisterDelete(query string)
} }
type xormStore struct { type xormStore struct {
db db.DB db db.DB
cfg *setting.Cfg cfg *setting.Cfg
deletes []string
} }
func getFilteredUsers(signedInUser identity.Requester, hiddenUsers map[string]struct{}) []string { func getFilteredUsers(signedInUser identity.Requester, hiddenUsers map[string]struct{}) []string {
@ -142,6 +144,8 @@ func (ss *xormStore) Delete(ctx context.Context, cmd *team.DeleteTeamCommand) er
"DELETE FROM team_role WHERE org_id=? and team_id = ?", "DELETE FROM team_role WHERE org_id=? and team_id = ?",
} }
deletes = append(deletes, ss.deletes...)
for _, sql := range deletes { for _, sql := range deletes {
_, err := sess.Exec(sql, cmd.OrgID, cmd.ID) _, err := sess.Exec(sql, cmd.OrgID, cmd.ID)
if err != nil { if err != nil {
@ -567,3 +571,8 @@ func (ss *xormStore) getTeamMembers(ctx context.Context, query *team.GetTeamMemb
} }
return queryResult, nil return queryResult, nil
} }
// RegisterDelete registers a delete query to be executed when the transaction is committed
func (ss *xormStore) RegisterDelete(query string) {
ss.deletes = append(ss.deletes, query)
}

@ -14,7 +14,7 @@ type Service struct {
} }
func ProvideService(db db.DB, cfg *setting.Cfg) team.Service { func ProvideService(db db.DB, cfg *setting.Cfg) team.Service {
return &Service{store: &xormStore{db: db, cfg: cfg}} return &Service{store: &xormStore{db: db, cfg: cfg, deletes: []string{}}}
} }
func (s *Service) CreateTeam(name, email string, orgID int64) (team.Team, error) { func (s *Service) CreateTeam(name, email string, orgID int64) (team.Team, error) {
@ -68,3 +68,7 @@ func (s *Service) GetUserTeamMemberships(ctx context.Context, orgID, userID int6
func (s *Service) GetTeamMembers(ctx context.Context, query *team.GetTeamMembersQuery) ([]*team.TeamMemberDTO, error) { func (s *Service) GetTeamMembers(ctx context.Context, query *team.GetTeamMembersQuery) ([]*team.TeamMemberDTO, error) {
return s.store.GetMembers(ctx, query) return s.store.GetMembers(ctx, query)
} }
func (s *Service) RegisterDelete(query string) {
s.store.RegisterDelete(query)
}

@ -72,3 +72,6 @@ func (s *FakeService) GetUserTeamMemberships(ctx context.Context, orgID, userID
func (s *FakeService) GetTeamMembers(ctx context.Context, query *team.GetTeamMembersQuery) ([]*team.TeamMemberDTO, error) { func (s *FakeService) GetTeamMembers(ctx context.Context, query *team.GetTeamMembersQuery) ([]*team.TeamMemberDTO, error) {
return s.ExpectedMembers, s.ExpectedError return s.ExpectedMembers, s.ExpectedError
} }
func (s *FakeService) RegisterDelete(query string) {
}

Loading…
Cancel
Save