diff --git a/pkg/services/team/team.go b/pkg/services/team/team.go index 49db0c53734..8d55fb908a8 100644 --- a/pkg/services/team/team.go +++ b/pkg/services/team/team.go @@ -19,7 +19,7 @@ type Service interface { GetTeamIDsByUser(ctx context.Context, query *GetTeamIDsByUserQuery) ([]int64, error) IsTeamMember(ctx context.Context, orgId int64, teamId int64, userId int64) (bool, 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, bypassCache bool) ([]*TeamMemberDTO, error) GetTeamMembers(ctx context.Context, query *GetTeamMembersQuery) ([]*TeamMemberDTO, error) RegisterDelete(query string) } diff --git a/pkg/services/team/teamimpl/team.go b/pkg/services/team/teamimpl/team.go index 245ee98ddae..94fcf6d2186 100644 --- a/pkg/services/team/teamimpl/team.go +++ b/pkg/services/team/teamimpl/team.go @@ -114,18 +114,20 @@ func (s *Service) RemoveUsersMemberships(ctx context.Context, userID int64) erro return s.store.RemoveUsersMemberships(ctx, userID) } -func (s *Service) GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool) ([]*team.TeamMemberDTO, error) { +func (s *Service) GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool, bypassCache bool) ([]*team.TeamMemberDTO, error) { ctx, span := s.tracer.Start(ctx, "team.GetUserTeamMemberships", trace.WithAttributes( attribute.Int64("orgID", orgID), attribute.Int64("userID", userID), )) defer span.End() cacheKey := fmt.Sprintf("teams:%d:%d:%t", orgID, userID, external) - if cached, found := s.cache.Get(cacheKey); found { - if teams, ok := cached.([]*team.TeamMemberDTO); ok { - return teams, nil + if !bypassCache { + if cached, found := s.cache.Get(cacheKey); found { + if teams, ok := cached.([]*team.TeamMemberDTO); ok { + return teams, nil + } + s.cache.Delete(cacheKey) } - s.cache.Delete(cacheKey) } teams, err := s.store.GetMemberships(ctx, orgID, userID, external) if err != nil { @@ -137,7 +139,9 @@ func (s *Service) GetUserTeamMemberships(ctx context.Context, orgID, userID int6 return []*team.TeamMemberDTO{}, nil } - s.cache.Set(cacheKey, teams, defaultCacheDuration) + if !bypassCache { + s.cache.Set(cacheKey, teams, defaultCacheDuration) + } return teams, nil } diff --git a/pkg/services/team/teamtest/team.go b/pkg/services/team/teamtest/team.go index 3caefb9562e..3b88d05d5d3 100644 --- a/pkg/services/team/teamtest/team.go +++ b/pkg/services/team/teamtest/team.go @@ -58,7 +58,7 @@ func (s *FakeService) RemoveUsersMemberships(ctx context.Context, userID int64) return s.ExpectedError } -func (s *FakeService) GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool) ([]*team.TeamMemberDTO, error) { +func (s *FakeService) GetUserTeamMemberships(ctx context.Context, orgID, userID int64, external bool, bypassCache bool) ([]*team.TeamMemberDTO, error) { return s.ExpectedMembers, s.ExpectedError }