mirror of
https://github.com/APIParkLab/APIPark.git
synced 2026-06-14 20:41:15 +08:00
Merge branch 'feature/data-mask' into 'main'
finish service publish See merge request apipark/APIPark!94
This commit is contained in:
+38
-1
@@ -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 {
|
||||
|
||||
@@ -8,4 +8,5 @@ const (
|
||||
CommitUpstream CommitType = "upstream"
|
||||
CommitApiProxy CommitType = "api_proxy"
|
||||
CommitServiceDoc CommitType = "service_doc"
|
||||
CommitStrategy CommitType = "strategy"
|
||||
)
|
||||
|
||||
+14
-5
@@ -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,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user