Skip to content

Commit

Permalink
[#2515] Bug/Events and Contributors for Company and Project
Browse files Browse the repository at this point in the history
- Resolved events endpoint caused by incorrect filter attribute changed to event_company_id
- Updated company project contributors endpoint with internal companyID as path parameter

Signed-off-by: wanyaland <[email protected]>
  • Loading branch information
wanyaland committed Jan 28, 2021
1 parent 4d181ac commit 0158b73
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 18 deletions.
4 changes: 2 additions & 2 deletions cla-backend-go/events/repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -473,7 +473,7 @@ func (repo *repository) GetCompanyFoundationEvents(companySFID, companyID, found
keyCondition := expression.Key("company_sfid_foundation_sfid").Equal(expression.Value(key))
var filter expression.ConditionBuilder
if companyID != "" {
filter = expression.Name("company_id").Equal(expression.Value(companyID))
filter = expression.Name("event_company_id").Equal(expression.Value(companyID))
}
return repo.queryEventsTable(CompanySFIDFoundationSFIDEpochIndex, keyCondition, &filter, nextKey, paramPageSize, all, nil)
}
Expand All @@ -484,7 +484,7 @@ func (repo *repository) GetCompanyClaGroupEvents(companySFID, companyID, claGrou
keyCondition := expression.Key("company_sfid_project_id").Equal(expression.Value(key))
var filter expression.ConditionBuilder
if companyID != "" {
filter = expression.Name("company_id").Equal(expression.Value(companyID))
filter = expression.Name("event_company_id").Equal(expression.Value(companyID))
}
return repo.queryEventsTable(CompanySFIDProjectIDEpochIndex, keyCondition, &filter, nextKey, paramPageSize, all, nil)
}
Expand Down
4 changes: 2 additions & 2 deletions cla-backend-go/swagger/cla.v2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3170,7 +3170,7 @@ paths:
tags:
- company

/company/{companySFID}/project/{projectSFID}/contributors:
/company/{companyID}/project/{projectSFID}/contributors:
get:
summary: Get corporate contributors for project
description: Returns list of corporate contributors for project
Expand All @@ -3180,7 +3180,7 @@ paths:
- $ref: "#/parameters/x-acl"
- $ref: "#/parameters/x-username"
- $ref: "#/parameters/x-email"
- $ref: "#/parameters/path-companySFID"
- $ref: "#/parameters/path-companyID"
- $ref: "#/parameters/path-projectSFID"
- $ref: "#/parameters/searchTerm"
responses:
Expand Down
17 changes: 13 additions & 4 deletions cla-backend-go/v2/company/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,22 +150,31 @@ func Configure(api *operations.EasyclaAPI, service Service, projectClaGroupRepo
"functionName": "company.handlers.CompanyGetCompanyProjectContributorsHandler",
utils.XREQUESTID: ctx.Value(utils.XREQUESTID),
"projectSFID": params.ProjectSFID,
"companySFID": params.CompanySFID,
"companyID": params.CompanyID,
}

// Lookup the company by internal ID
log.WithFields(f).Debugf("looking up company by internal ID...")
v1CompanyModel, err := service.GetCompanyByID(ctx, params.CompanyID)
if err != nil || v1CompanyModel == nil {
msg := fmt.Sprintf("unable to lookup company by ID: %s", params.CompanyID)
log.WithFields(f).WithError(err).Warn(msg)
return company.NewGetCompanyProjectActiveClaBadRequest().WithXRequestID(reqID).WithPayload(utils.ErrorResponseBadRequestWithError(reqID, msg, err))
}

// PM - check if authorized by project scope - allow if PM has project ID scope that matches
// Contact,Community Program Manager,CLA Manager,CLA Manager Designee,Company Admin - check if authorized by organization scope - allow if {Contact,Community Program Manager,CLA Manager,CLA Manager Designee,Company Admin} has organization ID scope that matches
// CLA Manager - check if authorized by project|organization scope - allow if CLA Manager (for example) has project ID + org DI scope that matches
log.WithFields(f).Debug("checking permissions")
if !isUserHaveAccessToCLAProjectOrganization(ctx, authUser, params.ProjectSFID, params.CompanySFID, projectClaGroupRepo) {
if !isUserHaveAccessToCLAProjectOrganization(ctx, authUser, params.ProjectSFID, v1CompanyModel.CompanyExternalID, projectClaGroupRepo) {
return company.NewGetCompanyProjectContributorsForbidden().WithXRequestID(reqID).WithPayload(
utils.ErrorResponseForbidden(
reqID,
fmt.Sprintf("user %s does not have access to get contributors with Project scope of %s or Project|Organization scope of %s | %s",
authUser.UserName, params.ProjectSFID, params.ProjectSFID, params.CompanySFID)))
authUser.UserName, params.ProjectSFID, params.ProjectSFID, params.CompanyID)))
}

result, err := service.GetCompanyProjectContributors(ctx, params.ProjectSFID, params.CompanySFID, utils.StringValue(params.SearchTerm))
result, err := service.GetCompanyProjectContributors(ctx, params.ProjectSFID, params.CompanyID, utils.StringValue(params.SearchTerm))
if err != nil {
if err == v1Company.ErrCompanyDoesNotExist {
return company.NewGetCompanyProjectContributorsNotFound().WithXRequestID(reqID)
Expand Down
19 changes: 9 additions & 10 deletions cla-backend-go/v2/company/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -323,16 +323,16 @@ func (s *service) GetCompanyProjectActiveCLAs(ctx context.Context, companyID str
return &out, nil
}

func (s *service) GetCompanyProjectContributors(ctx context.Context, projectSFID string, companySFID string, searchTerm string) (*models.CorporateContributorList, error) {
func (s *service) GetCompanyProjectContributors(ctx context.Context, projectSFID string, companyID string, searchTerm string) (*models.CorporateContributorList, error) {
f := logrus.Fields{
"functionName": "GetCompanyProjectContributors",
utils.XREQUESTID: ctx.Value(utils.XREQUESTID),
"projectSFID": projectSFID,
"companySFID": companySFID,
"companyID": companyID,
"searchTerm": searchTerm,
}
list := make([]*models.CorporateContributor, 0)
sigs, err := s.getAllCompanyProjectEmployeeSignatures(ctx, companySFID, projectSFID)
sigs, err := s.getAllCompanyProjectEmployeeSignatures(ctx, companyID, projectSFID)
if err != nil {
log.WithFields(f).Warnf("problem fetching all company project employee signatures, error: %+v", err)
return nil, err
Expand Down Expand Up @@ -1314,19 +1314,18 @@ func fillCorporateContributorModel(wg *sync.WaitGroup, usersRepo users.UserRepos
result <- &contributor
}

func (s *service) getAllCompanyProjectEmployeeSignatures(ctx context.Context, companySFID string, projectSFID string) ([]*v1Models.Signature, error) {
func (s *service) getAllCompanyProjectEmployeeSignatures(ctx context.Context, companyID string, projectSFID string) ([]*v1Models.Signature, error) {
f := logrus.Fields{
"functionName": "company.service.getAllCompanyProjectEmployeeSignatures",
utils.XREQUESTID: ctx.Value(utils.XREQUESTID),
"companySFID": companySFID,
"companyID": companyID,
"projectSFID": projectSFID,
}
log.WithFields(f).Debug("getAllCompanyProjectEmployeeSignatures")
comp, claGroup, err := s.getCompanyAndClaGroup(ctx, companySFID, projectSFID)
_, claGroup, err := s.getCompanyAndClaGroup(ctx, companyID, projectSFID)
if err != nil {
return nil, err
}
companyID := comp.CompanyID
params := v1SignatureParams.GetProjectCompanyEmployeeSignaturesParams{
HTTPRequest: nil,
CompanyID: companyID,
Expand All @@ -1340,11 +1339,11 @@ func (s *service) getAllCompanyProjectEmployeeSignatures(ctx context.Context, co
}

// get company and project in parallel
func (s *service) getCompanyAndClaGroup(ctx context.Context, companySFID, projectSFID string) (*v1Models.Company, *v1Models.ClaGroup, error) {
func (s *service) getCompanyAndClaGroup(ctx context.Context, companyID, projectSFID string) (*v1Models.Company, *v1Models.ClaGroup, error) {
f := logrus.Fields{
"functionName": "company.service.getCompanyAndClaGroup",
utils.XREQUESTID: ctx.Value(utils.XREQUESTID),
"companySFID": companySFID,
"companyID": companyID,
"projectSFID": projectSFID,
}
var comp *v1Models.Company
Expand All @@ -1355,7 +1354,7 @@ func (s *service) getCompanyAndClaGroup(ctx context.Context, companySFID, projec
cp.Add(2)
go func() {
defer cp.Done()
comp, companyErr = s.companyRepo.GetCompanyByExternalID(ctx, companySFID)
comp, companyErr = s.companyRepo.GetCompany(ctx, companyID)
}()
go func() {
defer cp.Done()
Expand Down

0 comments on commit 0158b73

Please sign in to comment.