horizoncd/horizon

View on GitHub
core/controller/applicationregion/controller.go

Summary

Maintainability
A
35 mins
Test Coverage
F
59%
// Copyright © 2023 Horizoncd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
 
package applicationregion
 
import (
"context"
 
applicationmanager "github.com/horizoncd/horizon/pkg/application/manager"
applicationregionmanager "github.com/horizoncd/horizon/pkg/applicationregion/manager"
"github.com/horizoncd/horizon/pkg/applicationregion/models"
envmanager "github.com/horizoncd/horizon/pkg/environment/manager"
envregionmanager "github.com/horizoncd/horizon/pkg/environmentregion/manager"
perror "github.com/horizoncd/horizon/pkg/errors"
groupmanager "github.com/horizoncd/horizon/pkg/group/manager"
"github.com/horizoncd/horizon/pkg/param"
regionmanager "github.com/horizoncd/horizon/pkg/region/manager"
)
 
type Controller interface {
List(ctx context.Context, applicationID uint) (ApplicationRegion, error)
Update(ctx context.Context, applicationID uint, regions ApplicationRegion) error
}
 
type controller struct {
mgr applicationregionmanager.Manager
regionMgr regionmanager.Manager
environmentMgr envmanager.Manager
environmentRegionMgr envregionmanager.Manager
groupMgr groupmanager.Manager
applicationMgr applicationmanager.Manager
}
 
var _ Controller = (*controller)(nil)
 
func NewController(param *param.Param) Controller {
return &controller{
mgr: param.ApplicationRegionMgr,
regionMgr: param.RegionMgr,
environmentMgr: param.EnvMgr,
environmentRegionMgr: param.EnvironmentRegionMgr,
groupMgr: param.GroupMgr,
applicationMgr: param.ApplicationMgr,
}
}
 
Method `controller.List` has 5 return statements (exceeds 4 allowed).
func (c *controller) List(ctx context.Context, applicationID uint) (ApplicationRegion, error) {
applicationRegions, err := c.mgr.ListByApplicationID(ctx, applicationID)
if err != nil {
return nil, perror.WithMessage(err, "failed to list application regions")
}
 
environments, err := c.environmentMgr.ListAllEnvironment(ctx)
if err != nil {
return nil, perror.WithMessage(err, "failed to list environment")
}
 
application, err := c.applicationMgr.GetByID(ctx, applicationID)
if err != nil {
return nil, err
}
environmentRegions, err := c.groupMgr.GetDefaultRegions(ctx, application.GroupID)
if err != nil {
return nil, perror.WithMessage(err, "failed to list environmentRegions")
}
 
return ofApplicationRegion(applicationRegions, environments, environmentRegions), nil
}
 
func (c *controller) Update(ctx context.Context, applicationID uint, regions ApplicationRegion) error {
applicationRegions := make([]*models.ApplicationRegion, 0)
 
for _, r := range regions {
if r.Environment != "" && r.Region != "" {
_, err := c.environmentRegionMgr.GetByEnvironmentAndRegion(ctx, r.Environment, r.Region)
if err != nil {
return perror.WithMessagef(err,
"environment/region %s/%s is not exists", r.Environment, r.Region)
}
applicationRegions = append(applicationRegions, &models.ApplicationRegion{
ApplicationID: applicationID,
EnvironmentName: r.Environment,
RegionName: r.Region,
})
}
}
 
return c.mgr.UpsertByApplicationID(ctx, applicationID, applicationRegions)
}