Merge branch 'feature/data-mask' into 'main'

finish service publish

See merge request apipark/APIPark!94
This commit is contained in:
刘健
2024-11-27 19:47:16 +08:00
4 changed files with 54 additions and 7 deletions
+38 -1
View File
@@ -5,6 +5,8 @@ import (
"errors"
"fmt"
"github.com/APIParkLab/APIPark/service/strategy"
api_doc "github.com/APIParkLab/APIPark/service/api-doc"
service_doc "github.com/APIParkLab/APIPark/service/service-doc"
@@ -40,11 +42,39 @@ type imlReleaseModule struct {
serviceDocService service_doc.IDocService `autowired:""`
upstreamService upstream.IUpstreamService `autowired:""`
publishService publish.IPublishService `autowired:""`
strategyService strategy.IStrategyService `autowired:""`
transaction store.ITransaction `autowired:""`
projectService service.IServiceService `autowired:""`
clusterService cluster.IClusterService `autowired:""`
}
func (m *imlReleaseModule) latestStrategyCommits(ctx context.Context, serviceId string) ([]*commit.Commit[strategy.StrategyCommit], error) {
list, err := m.strategyService.All(ctx, 2, serviceId)
if err != nil {
return nil, fmt.Errorf("get latest strategy failed:%w", err)
}
return utils.SliceToSlice(list, func(s *strategy.Strategy) *commit.Commit[strategy.StrategyCommit] {
key := fmt.Sprintf("service-%s", s.Id)
return &commit.Commit[strategy.StrategyCommit]{
Target: s.Id,
Key: key,
Data: &strategy.StrategyCommit{
Id: s.Id,
Name: s.Name,
Priority: s.Priority,
Filters: s.Filters,
Config: s.Config,
Driver: s.Driver,
IsStop: s.IsStop,
Version: s.UpdateAt.Format("20060102150405"),
},
}
}, func(s *strategy.Strategy) bool {
return !s.IsDelete
}), nil
}
func (m *imlReleaseModule) Create(ctx context.Context, serviceId string, input *dto.CreateInput) (string, error) {
proInfo, err := m.projectService.Check(ctx, serviceId, projectRuleMustServer)
@@ -103,6 +133,13 @@ func (m *imlReleaseModule) Create(ctx context.Context, serviceId string, input *
return c.Key, c.UUID
})
})
strategies, err := m.latestStrategyCommits(ctx, serviceId)
if err != nil {
return "", err
}
strategyCommits := utils.SliceToMapO(strategies, func(c *commit.Commit[strategy.StrategyCommit]) (string, string) {
return c.Target, c.UUID
})
var newRelease *release.Release
err = m.transaction.Transaction(ctx, func(ctx context.Context) error {
@@ -161,7 +198,7 @@ func (m *imlReleaseModule) Create(ctx context.Context, serviceId string, input *
requestCommitMap := utils.SliceToMapO(requestCommits, func(c *commit.Commit[api.Request]) (string, string) {
return c.Target, c.UUID
})
newRelease, err = m.releaseService.CreateRelease(ctx, serviceId, input.Version, input.Remark, requestCommitMap, apiProxyCommits, docCommit.UUID, serviceDocCommit.UUID, upstreamCommitsForUKC)
newRelease, err = m.releaseService.CreateRelease(ctx, serviceId, input.Version, input.Remark, requestCommitMap, apiProxyCommits, docCommit.UUID, serviceDocCommit.UUID, upstreamCommitsForUKC, strategyCommits)
return err
})
if err != nil {
+1
View File
@@ -8,4 +8,5 @@ const (
CommitUpstream CommitType = "upstream"
CommitApiProxy CommitType = "api_proxy"
CommitServiceDoc CommitType = "service_doc"
CommitStrategy CommitType = "strategy"
)
+14 -5
View File
@@ -281,7 +281,7 @@ func (s *imlReleaseService) SetRunning(ctx context.Context, service string, id s
}
func (s *imlReleaseService) CreateRelease(ctx context.Context, service string, version string, remark string, apiRequestCommit, apisProxyCommits map[string]string, apiDocCommit, serviceDocCommit string, upstreams map[string]map[string]string) (*Release, error) {
func (s *imlReleaseService) CreateRelease(ctx context.Context, service, version, remark string, apiRequestCommit, apisProxyCommits map[string]string, apiDocCommits, serviceDocCommits string, upstreams map[string]map[string]string, strategies map[string]string) (*Release, error) {
operator := utils.UserId(ctx)
releaseId := uuid.NewString()
commits := make([]*release.Commit, 0, len(apisProxyCommits)+len(upstreams)+2)
@@ -315,23 +315,32 @@ func (s *imlReleaseService) CreateRelease(ctx context.Context, service string, v
})
}
}
if apiDocCommit != "" {
if apiDocCommits != "" {
commits = append(commits, &release.Commit{
Type: CommitApiDocument,
Target: service,
Release: releaseId,
Key: CommitApiDocument,
Commit: apiDocCommit,
Commit: apiDocCommits,
})
}
if serviceDocCommit != "" {
if serviceDocCommits != "" {
commits = append(commits, &release.Commit{
Type: CommitServiceDoc,
Target: service,
Release: releaseId,
Key: CommitServiceDoc,
Commit: serviceDocCommit,
Commit: serviceDocCommits,
})
}
for key, value := range strategies {
commits = append(commits, &release.Commit{
Type: CommitStrategy,
Target: key,
Release: releaseId,
Key: CommitStrategy,
Commit: value,
})
}
+1 -1
View File
@@ -14,7 +14,7 @@ type IReleaseService interface {
// GetRelease 获取发布信息
GetRelease(ctx context.Context, id string) (*Release, error)
// CreateRelease 创建发布
CreateRelease(ctx context.Context, service string, version string, remark string, apiRequestCommit, apisProxyCommits map[string]string, apiDocCommits, serviceDocCommits string, upstreams map[string]map[string]string) (*Release, error)
CreateRelease(ctx context.Context, service, version, remark string, apiRequestCommit, apisProxyCommits map[string]string, apiDocCommits, serviceDocCommits string, upstreams map[string]map[string]string, strategies map[string]string) (*Release, error)
// DeleteRelease 删除发布
DeleteRelease(ctx context.Context, id string) error
List(ctx context.Context, service string) ([]*Release, error)