From 44a9544072bddf5654d1e6c2a3145eaea4ca0929 Mon Sep 17 00:00:00 2001 From: David Deal Date: Thu, 2 Jun 2022 14:03:08 -0700 Subject: [PATCH] Added TotalCount for Company Contributors Response (#3531) --- cla-backend-go/Makefile | 50 +++++++++++-------- cla-backend-go/cmd/server.go | 4 +- cla-backend-go/go.mod | 2 +- cla-backend-go/go.sum | 2 + .../common/corporate-contributors-list.yaml | 4 ++ cla-backend-go/v2/company/service.go | 25 ++++++---- 6 files changed, 53 insertions(+), 34 deletions(-) diff --git a/cla-backend-go/Makefile b/cla-backend-go/Makefile index 11249b9f9..7e14b436f 100644 --- a/cla-backend-go/Makefile +++ b/cla-backend-go/Makefile @@ -20,13 +20,24 @@ COMMIT := $(shell sh -c 'git rev-parse --short HEAD') LDFLAGS=-ldflags "-s -w -X main.version=$(VERSION) -X main.commit=$(COMMIT) -X main.branch=$(BRANCH) -X main.buildDate=$(BUILD_TIME)" BUILD_TAGS=-tags aws_lambda +ifeq "$(shell uname -s)" "Darwin" + BUILD_HOST=darwin +endif +ifeq "$(shell uname -s)" "Linux" + BUILD_HOST=linux +endif + LINT_TOOL=$(shell go env GOPATH)/bin/golangci-lint -LINT_VERSION=v1.41.1 +LINT_VERSION=v1.46.2 +SWAGGER_DIR=$(ROOT_DIR)/swagger +SWAGGER_BIN_DIR=/usr/local/bin SWAGGER_TOOL_VERSION=v0.24.0 +SWAGGER_ASSET="swagger_$(BUILD_HOST)_amd64" +SWAGGER_ASSET_URL="https://github.com/go-swagger/go-swagger/releases/download/$(SWAGGER_TOOL_VERSION)/$(SWAGGER_ASSET)" GO_PKGS=$(shell go list ./... | grep -v /vendor/ | grep -v /node_modules/) GO_FILES=$(shell find . -type f -name '*.go' -not -path './vendor/*') -.PHONY: generate setup tool-setup setup-dev setup-deploy clean-all clean swagger up fmt test run deps build build-mac build-aws-lambda user-subscribe-lambda qc lint +.PHONY: generate setup setup-dev setup-deploy clean-all clean swagger up fmt test run deps build build-mac build-aws-lambda user-subscribe-lambda qc lint all: all-mac all-mac: clean swagger deps fmt build-mac build-aws-lambda-mac build-user-subscribe-lambda-mac build-metrics-lambda-mac build-dynamo-events-lambda-mac build-zipbuilder-scheduler-lambda-mac build-zipbuilder-lambda-mac build-gitlab-repository-check-lambda-mac test lint @@ -40,27 +51,26 @@ generate: swagger setup: $(LINT_TOOL) setup-dev setup-deploy -tool-setup: - @echo "Installing gobin for installing tools..." - @# gobin is the equivalent of 'go get' whilst in module-aware mode but this does not modify your go.mod - #GO111MODULE=off go get -u github.com/myitcv/gobin - go get -u github.com/myitcv/gobin +.PHONY: swagger-tool +swagger-tool: + @echo "Removing old swagger binary in $(SWAGGER_BIN_DIR)..." + @sudo rm -Rf $(SWAGGER_BIN_DIR)/swagger + @echo "Downloading $(SWAGGER_ASSET_URL)" + sudo curl -o $(SWAGGER_BIN_DIR)/swagger -L'#' $(SWAGGER_ASSET_URL) + sudo chmod +x $(SWAGGER_BIN_DIR)/swagger + $(SWAGGER_BIN_DIR)/swagger version setup_dev: setup-dev -setup-dev: tool-setup - @echo "Removing previously install version of swagger..." - @rm -Rf $(shell echo $(GOPATH))/bin/swagger $(shell echo $(GOPATH))/src/github.com/go-swagger - @echo "Installing swagger version: '$(SWAGGER_TOOL_VERSION)'..." - gobin github.com/go-swagger/go-swagger/cmd/swagger@$(SWAGGER_TOOL_VERSION) - @echo "Installing goimports..." - gobin golang.org/x/tools/cmd/goimports - @echo "Installing cover..." - gobin golang.org/x/tools/cmd/cover - @echo "Installing multi-file-swagger tool..." - @echo "Downloading golangci-lint version $(LINT_VERSION)..." +setup-dev: swagger-tool + pushd /tmp && echo "Installing goimport..." && go install golang.org/x/tools/cmd/goimports@latest && echo "Installation coverage tools..." && go install golang.org/x/tools/cmd/cover@latest && popd + + @echo "Installing linter..." @# Latest releases: https://github.com/golangci/golangci-lint/releases - curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(shell go env GOPATH)/bin $(LINT_VERSION) - cd $(dir $(realpath $(firstword $(MAKEFILE_LIST))))swagger && pip3 install virtualenv && virtualenv .venv && source .venv/bin/activate && pip3 install -r requirements.txt + go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(LINT_VERSION) + echo "golangci-lint version:" && golangci-lint version + + @echo "Installing multi-file-swagger tool..." + cd $(dir $(realpath $(firstword $(MAKEFILE_LIST))))swagger && pip3 install virtualenv && virtualenv .venv && source .venv/bin/activate && python -m pip install --upgrade pip && pip3 install -r requirements.txt setup_deploy: setup-deploy setup-deploy: diff --git a/cla-backend-go/cmd/server.go b/cla-backend-go/cmd/server.go index 44b370871..cd98fdab4 100644 --- a/cla-backend-go/cmd/server.go +++ b/cla-backend-go/cmd/server.go @@ -634,7 +634,7 @@ func createUserFromRequest(authorizer auth.Authorizer, usersService users.Servic // search if user exist in database by username userModel, err := usersService.GetUserByLFUserName(claUser.LFUsername) if err != nil { - if err, ok := err.(*utils.UserNotFound); ok { + if _, ok := err.(*utils.UserNotFound); ok { log.WithFields(f).Debug("unable to locate user by lf-email") } else { log.WithFields(f).WithError(err).Warn("searching user by lf-username failed") @@ -649,7 +649,7 @@ func createUserFromRequest(authorizer auth.Authorizer, usersService users.Servic // search if user exist in database by username userModel, err = usersService.GetUserByEmail(claUser.LFEmail) if err != nil { - if err, ok := err.(*utils.UserNotFound); ok { + if _, ok := err.(*utils.UserNotFound); ok { log.WithFields(f).Debug("unable to locate user by lf-email") } else { log.WithFields(f).WithError(err).Warn("searching user by lf-email failed") diff --git a/cla-backend-go/go.mod b/cla-backend-go/go.mod index 6c0c82a8f..798c05a01 100644 --- a/cla-backend-go/go.mod +++ b/cla-backend-go/go.mod @@ -103,7 +103,7 @@ require ( github.com/pelletier/go-toml v1.9.3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/rogpeppe/go-internal v1.8.0 // indirect + github.com/rogpeppe/go-internal v1.8.1 // indirect github.com/spf13/afero v1.6.0 // indirect github.com/spf13/cast v1.3.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/cla-backend-go/go.sum b/cla-backend-go/go.sum index d9ff15622..cce8397c0 100644 --- a/cla-backend-go/go.sum +++ b/cla-backend-go/go.sum @@ -598,6 +598,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= diff --git a/cla-backend-go/swagger/common/corporate-contributors-list.yaml b/cla-backend-go/swagger/common/corporate-contributors-list.yaml index da34f8982..93d0e2e79 100644 --- a/cla-backend-go/swagger/common/corporate-contributors-list.yaml +++ b/cla-backend-go/swagger/common/corporate-contributors-list.yaml @@ -12,6 +12,10 @@ properties: type: integer format: int64 x-omitempty: false + totalCount: + type: integer + format: int64 + x-omitempty: false list: type: array items: diff --git a/cla-backend-go/v2/company/service.go b/cla-backend-go/v2/company/service.go index ec1b02548..8970a7678 100644 --- a/cla-backend-go/v2/company/service.go +++ b/cla-backend-go/v2/company/service.go @@ -71,12 +71,14 @@ var ( // constants const ( - // used when we want to query all data from dependent service. + // HugePageSize is used when we want to query all data from dependent service HugePageSize = int64(10000) - // LoadRepoDetails = true + DontLoadRepoDetails = false - //NoAccount + + // NoAccount constant NoAccount = "Individual - No Account" + //OrgAssociated stating whether user has user association with another org OrgAssociated = "are already associated with other organization" ) @@ -85,7 +87,6 @@ const ( type Service interface { GetCompanyProjectCLAManagers(ctx context.Context, v1CompanyModel *models.Company, projectSFID string) (*models.CompanyClaManagers, error) GetCompanyProjectActiveCLAs(ctx context.Context, companyID string, projectSFID string) (*models.ActiveClaList, error) - //GetCompanyProjectContributors(ctx context.Context, projectSFID string, companySFID string, searchTerm string) (*models.CorporateContributorList, error) GetCompanyProjectContributors(ctx context.Context, params *v2Ops.GetCompanyProjectContributorsParams) (*models.CorporateContributorList, error) GetCompanyProjectCLA(ctx context.Context, authUser *auth.User, companySFID, projectSFID string, companyID *string) (*models.CompanyProjectClaList, error) CreateCompany(ctx context.Context, params *v2Ops.CreateCompanyParams) (*models.CompanyOutput, error) @@ -102,7 +103,7 @@ type Service interface { GetCompanyAdmins(ctx context.Context, companyID string) (*models.CompanyAdminList, error) RequestCompanyAdmin(ctx context.Context, userID string, claManagerEmail string, claManagerName string, contributorName string, contributorEmail string, projectName string, companyName string, lFxPortalURL string) error - // org service lookup + // GetCompanyLookup uses the org service to lookup the value GetCompanyLookup(ctx context.Context, companyName string, websiteName string) (*models.Lookup, error) } @@ -137,7 +138,7 @@ func (s *service) GetCompanyProjectCLAManagers(ctx context.Context, v1CompanyMod "signingEntityName": v1CompanyModel.SigningEntityName, } - // TODO: DAD - separate go routine + // TODO: DAD - consider using separate go routine log.WithFields(f).Debugf("locating CLA Group(s) under project or foundation...") var err error claGroups, err := s.getCLAGroupsUnderProjectOrFoundation(ctx, projectSFID) @@ -146,7 +147,7 @@ func (s *service) GetCompanyProjectCLAManagers(ctx context.Context, v1CompanyMod return nil, err } - // TODO: DAD - separate go routine + // TODO: DAD - consider using separate go routine // get the org client for org info filling orgClient := orgService.GetClient() orgModel, err := orgClient.GetOrganization(ctx, v1CompanyModel.CompanyExternalID) @@ -154,7 +155,7 @@ func (s *service) GetCompanyProjectCLAManagers(ctx context.Context, v1CompanyMod return nil, fmt.Errorf("fetching org model failed for companySFID : %s : %w", v1CompanyModel.CompanyExternalID, err) } - // TODO: DAD - separate go routine + // TODO: DAD - consider using separate go routine signed, approved := true, true maxLoad := int64(10) var sigs []*v1Models.Signature @@ -202,7 +203,7 @@ func (s *service) GetCompanyProjectCLAManagers(ctx context.Context, v1CompanyMod return &models.CompanyClaManagers{List: claManagers}, nil } - // TODO: DAD - separate go routine + // TODO: DAD - consider using separate go routine // get userinfo and project info var usermap map[string]*v2UserServiceModels.User usermap, err = getUsersInfo(lfUsernames.List()) @@ -216,7 +217,7 @@ func (s *service) GetCompanyProjectCLAManagers(ctx context.Context, v1CompanyMod // fill project info fillProjectInfo(claManagers, claGroups) - // TODO: DAD - separate go routine + // TODO: DAD - consider using separate go routine // fetch the cla_manager.added events so can fill the addedOn field claManagerAddedEvents, err := s.eventService.GetCompanyEvents(v1CompanyModel.CompanyID, events.ClaManagerCreated, nil, aws.Int64(100), true) if err != nil { @@ -337,6 +338,7 @@ func (s *service) GetCompanyProjectContributors(ctx context.Context, params *v2O "projectSFID": params.ProjectSFID, "companyID": params.CompanyID, } + if params.SearchTerm != nil { f["searchTerm"] = utils.StringValue(params.SearchTerm) } @@ -360,7 +362,7 @@ func (s *service) GetCompanyProjectContributors(ctx context.Context, params *v2O List: list, }, nil } - log.WithFields(f).Debugf("found %d signatures", len(sigResponse.Signatures)) + log.WithFields(f).Debugf("found %d signatures matching filter critiera - total in database is: %d", len(sigResponse.Signatures), sigResponse.TotalCount) beforeQuery, _ := utils.CurrentTime() var wg sync.WaitGroup @@ -385,6 +387,7 @@ func (s *service) GetCompanyProjectContributors(ctx context.Context, params *v2O List: list, NextKey: sigResponse.LastKeyScanned, ResultCount: sigResponse.ResultCount, + TotalCount: sigResponse.TotalCount, }, nil }