Skip to content

Commit

Permalink
[#3773][#LFX-3206] Foundation|Project Fixes (#3801)
Browse files Browse the repository at this point in the history
  • Loading branch information
nickmango authored Feb 20, 2023
1 parent 5a4ecae commit ef5cad2
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 67 deletions.
14 changes: 9 additions & 5 deletions cla-backend-go/v2/cla_groups/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,16 +187,20 @@ func (s *service) CreateCLAGroup(ctx context.Context, authUser *auth.User, input
// Group and this is a request to create a new CLA Group for the child project - this is new logic that we added
// to support nested CLA groups where some child projects can inherit the CLA Group from the parent project while
// other child projects can have their own CLA Group.
claAnchorProject := *input.FoundationSfid
if len(input.ProjectSfidList) == 1 {
claAnchorProject = input.ProjectSfidList[0]
}
// claAnchorProject := *input.FoundationSfid
// foundationCLAGroup, err := s.v1ProjectService.GetClaGroupByProjectSFID(ctx, claAnchorProject, false)
// if err != nil {
// log.WithFields(f).WithError(err).Warnf("unable to get CLA Group by project SFID: %s", claAnchorProject)
// }
// if len(input.ProjectSfidList) == 1 && foundationCLAGroup != nil {
// claAnchorProject = input.ProjectSfidList[0]
// }

// Associate the specified projects with our new CLA Group
enrollErr := s.EnrollProjectsInClaGroup(ctx, &EnrollProjectsModel{
AuthUser: authUser,
CLAGroupID: claGroup.ProjectID,
FoundationSFID: claAnchorProject,
FoundationSFID: *input.FoundationSfid,
ProjectSFIDList: input.ProjectSfidList,
})
if enrollErr != nil {
Expand Down
102 changes: 40 additions & 62 deletions cla-backend-go/v2/cla_manager/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -563,13 +563,6 @@ func (s *service) CreateCLAManagerDesigneeByGroup(ctx context.Context, params cl
var designeeScopes []*models.ClaManagerDesignee
userEmail := params.Body.UserEmail.String()

foundationSFID := projectCLAGroups[0].FoundationSFID
signedAtFoundationLevel, signedErr := s.projectService.SignedAtFoundationLevel(ctx, foundationSFID)
if signedErr != nil {
msg := fmt.Sprintf("Problem getting level of CLA Group Signature for claGroup: %s ", foundationSFID)
return nil, msg, signedErr
}

// Lookup the company by internal ID
log.WithFields(f).Debugf("looking up company by internal ID...")
v1CompanyModel, err := s.companyService.GetCompany(ctx, params.CompanyID)
Expand All @@ -581,73 +574,58 @@ func (s *service) CreateCLAManagerDesigneeByGroup(ctx context.Context, params cl
f["companySFID"] = v1CompanyModel.CompanyExternalID
f["companyName"] = v1CompanyModel.CompanyName

if signedAtFoundationLevel {
if foundationSFID != "" {
claManagerDesignee, err := s.CreateCLAManagerDesignee(ctx, v1CompanyModel.CompanyID, foundationSFID, userEmail)
// Channel result
type result struct {
designee *models.ClaManagerDesignee
msg string
err error
}
designeeChan := make(chan *result)
var wg sync.WaitGroup
wg.Add(len(projectCLAGroups))

go func() {
wg.Wait()
close(designeeChan)
}()

for _, pcg := range projectCLAGroups {
go func(swg *sync.WaitGroup, pcg *projects_cla_groups.ProjectClaGroup, designeeChannel chan *result) {
defer swg.Done()
log.WithFields(f).Debugf("creating CLA Manager Designee for Project SFID: %s", pcg.ProjectSFID)
claManagerDesignee, err := s.CreateCLAManagerDesignee(ctx, v1CompanyModel.CompanyID, pcg.ProjectSFID, userEmail)
var output result
if err != nil {
if err == ErrCLAManagerDesigneeConflict {
msg := fmt.Sprintf("Conflict assigning cla manager role for Foundation SFID: %s ", foundationSFID)
return nil, msg, err
}
msg := fmt.Sprintf("Creating cla manager failed for Foundation SFID: %s ", foundationSFID)
return nil, msg, err
}
designeeScopes = append(designeeScopes, claManagerDesignee)
}
} else {
// Channel result
type result struct {
designee *models.ClaManagerDesignee
msg string
err error
}
designeeChan := make(chan *result)
var wg sync.WaitGroup
wg.Add(len(projectCLAGroups))

go func() {
wg.Wait()
close(designeeChan)
}()

for _, pcg := range projectCLAGroups {
go func(swg *sync.WaitGroup, pcg *projects_cla_groups.ProjectClaGroup, designeeChannel chan *result) {
defer swg.Done()
log.WithFields(f).Debugf("creating CLA Manager Designee for Project SFID: %s", pcg.ProjectSFID)
claManagerDesignee, err := s.CreateCLAManagerDesignee(ctx, v1CompanyModel.CompanyID, pcg.ProjectSFID, userEmail)
var output result
if err != nil {
if err == ErrCLAManagerDesigneeConflict {
msg := fmt.Sprintf("Conflict assigning cla manager role for Project SFID: %s, error: %s ", pcg.ProjectSFID, err)
output = result{
designee: nil,
msg: msg,
err: ErrCLAManagerDesigneeConflict,
}
}
msg := fmt.Sprintf("Creating cla manager failed for Project SFID: %s, error: %s ", pcg.ProjectSFID, err)
msg := fmt.Sprintf("Conflict assigning cla manager role for Project SFID: %s, error: %s ", pcg.ProjectSFID, err)
output = result{
designee: nil,
msg: msg,
err: err,
err: ErrCLAManagerDesigneeConflict,
}
designeeChannel <- &output
return
}
msg := fmt.Sprintf("Creating cla manager failed for Project SFID: %s, error: %s ", pcg.ProjectSFID, err)
output = result{
designee: claManagerDesignee,
msg: "",
err: nil,
designee: nil,
msg: msg,
err: err,
}
designeeChannel <- &output
}(&wg, pcg, designeeChan)
}
for resultCh := range designeeChan {
if resultCh.err != nil {
return nil, resultCh.msg, resultCh.err
return
}
designeeScopes = append(designeeScopes, resultCh.designee)
output = result{
designee: claManagerDesignee,
msg: "",
err: nil,
}
designeeChannel <- &output
}(&wg, pcg, designeeChan)
}
for resultCh := range designeeChan {
if resultCh.err != nil {
return nil, resultCh.msg, resultCh.err
}
designeeScopes = append(designeeScopes, resultCh.designee)
}

return designeeScopes, "", nil
Expand Down

0 comments on commit ef5cad2

Please sign in to comment.